Добавьте функцию jQuery на страницы администратора
Мне нужно добавить немного готового jQuery для публикации/редактирования страниц в admin. Я взламываю старый плагин, который добавляет текстовое поле на страницу редактора и обрабатывает вставку этого текста в файл шаблона, но ввод текста - это только html; эта функция готовности документа добавляет класс mceEditor в текстовое поле. Эта функция работает, когда я вручную включаю ее в admin-header.php , но я, конечно, не могу этого сделать.
Я не думаю, что мне нужно ставить его в очередь, так как это не библиотека. Или я? И, если применимо: каковы плюсы/минусы различных способов его добавления?
Итак, как мне подключить это или иным образом загрузить его в редакторы сообщений/страниц в admin? Он должен войти в файл плагина, а не functions.php в теме.
<script type="text/javascript">
jQuery(document).ready( function () {
jQuery("#dt-additional-info").addClass("mceEditor");
if ( typeof( tinyMCE ) == "object" && typeof( tinyMCE.execCommand ) == "function" ) {
jQuery("#dt-additional-info").wrap( "<div id='editorcontainer'></div>" );
tinyMCE.execCommand("mceAddControl", false, "dt-additional-info");
}
});
</script>
2 answers
Я был бы склонен просто поставить одну очередь в очередь и покончить с этим..
Это означает, что вам нужно управлять дополнительным файлом (файлом JS), но когда вы пишете код, обычно неплохо создать какую-то форму организации с вашими файлами (или, по крайней мере, войти в привычку делать это), т. Е. javascript/jquery в одной папке, css - в другой, сохраняя PHP и HTML в ваших основных файлах PHP плагина.
Поэтому я бы предложил переместить jQuery в файл js, а затем запустить очередь установка jQuery в качестве зависимого, но нет необходимости регистрировать его для одноразового вызова.
Довольно много вариантов в отношении крючков, но я бы лично выбрал..
function yournamespace_enqueue_scripts( $hook ) {
if( !in_array( $hook, array( 'post.php', 'post-new.php' ) ) )
return;
wp_enqueue_script(
'your_script_handle', // Handle
plugins_url( '/yourfilename.js', __FILE__ ), // Path to file
array( 'jquery' ) // Dependancies
);
}
add_action( 'admin_enqueue_scripts', 'yournamespace_enqueue_scripts', 2000 );
Просто настройте страницы, на которых вам нужна очередь для запуска в вызове in_array()
.
Некоторое время назад мне нужно было что-то подобное, вот что я использовал:
function admin_js() { ?>
<script type="text/javascript">
jQuery(document).ready( function () {
jQuery("#dt-additional-info").addClass("mceEditor");
if ( typeof( tinyMCE ) == "object" && typeof( tinyMCE.execCommand ) == "function" ) {
jQuery("#dt-additional-info").wrap( "<div id='editorcontainer'></div>" );
tinyMCE.execCommand("mceAddControl", false, "dt-additional-info");
}
});
</script>
<?php }
add_action('admin_head', 'admin_js');
В то время я просто подключил его к действию admin_head
, теперь я знаю, что есть множество действий. Возможно, в этом случае было бы лучше подключить его к действию admin_print_scripts
:
add_action('admin_print_scripts', 'admin_js');
Примечание: При этом скрипт будет напечатан на странице, если вы хотите сохранить его во внешнем файле, вам придется поставить его в очередь:
function admin_js() {
wp_register_script('admin_js', plugins_url( .'/yourplugin/admin-js.js' . ), array('jquery'));
wp_enqueue_script('admin_js');
}
add_action('admin_enqueue_scripts', 'admin_js');
И в вашем файле admin-js.js
javascript:
jQuery(document).ready( function () {
jQuery("#dt-additional-info").addClass("mceEditor");
if ( typeof( tinyMCE ) == "object" && typeof( tinyMCE.execCommand ) == "function" ) {
jQuery("#dt-additional-info").wrap( "<div id='editorcontainer'></div>" );
tinyMCE.execCommand("mceAddControl", false, "dt-additional-info");
}
});
Я используя оба этих метода на страницах опций, и оба они работают без проблем.