Добавьте функцию 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>
Author: markratledge, 2011-07-27

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().

 5
Author: Mark Duncan, 2011-07-28 09:02:57

Некоторое время назад мне нужно было что-то подобное, вот что я использовал:

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");
         }
    });

Я используя оба этих метода на страницах опций, и оба они работают без проблем.

 5
Author: Mario, 2011-07-27 19:06:59