scott
  • 0
Гуру

Плагин — Убедитесь, что jquery загружен на моей странице настроек, а также мой файл JS

  • 0

Я создаю свой первый плагин WordPress и изо всех сил пытаюсь найти правильный и лучший способ убедиться, что jquery и мой собственный файл JS включены на мою страницу настроек моего плагина.

Мне не нужно, чтобы они загружались где-либо еще, кроме моей страницы настроек.

Какой код и где его разместить в моем плагине?

Это то, что у меня есть для создания страницы настроек:

add_action("admin_menu", "create_admin_pages");

function create_admin_pages() {
    add_submenu_page('options-general.php', "MYPLUGIN", "MYPLUGIN", 10, "my-plugin", 'settings_page');
}
functions settings_page() {
    // Settings form is here and I need Jquery and my script loaded for this
}

РЕДАКТИРОВАТЬ: приведенный выше код несколько упрощен, поэтому не раскрывать функцию плагинов до тех пор, пока она не будет готова к выпуску. Плагин, который я кодирую, заключен в класс, поэтому нормально, что имена функций являются общими.

Share
  1. Поздравляем с вашим первым плагином WP! Надеюсь, вы вернетесь еще! 🙂

    • 0
  2. Первое использование add_options_page() — более короткая обертка, лучшая практика.

    Во-вторых, вам нужно сохранить результат в некоторой (глобальной или статической) переменной. Это часто используется, и в документации на него ссылаются разными именами. Global $hook_suffix содержит такое значение для текущей страницы.

    function create_admin_pages() {
    
       global $my_page;
    
       $my_page = add_options_page(...
    

    Оттуда примерно так:

    add_action('admin_enqueue_scripts', 'enqueue_script');
    
    function enqueue_script($hook_suffix) {
    
        global $my_page;
    
        if ($my_page == $hook_suffix)
            wp_enqueue_script('my_script', plugins_url('my_script.js', __FILE__), array('jquery'));
    }
    
    • 0
  3. Вы можете admin_print_scripts-{$page} подключиться, чтобы включить или поставить свои скрипты в очередь только на своей странице, например:

    $page = add_management_page( 'myplugin', 'myplugin', 9, __FILE__, 'myplugin_admin_page' );
    add_action( "admin_print_scripts-$page", 'myplugin_plugin_add_scripts' );
    
    function myplugin_plugin_add_scripts(){
      wp_enqueue_script('myscript', '/wp-content/plugins/myplugin/myscript.js'); 
    }
    

    таким же образом вы можете использовать admin_print_styles-$page стили css.

    • 0
  4. Если ваш код обернут внутри класса, используйте переменную класса для хранения хука страницы плагина, это упростит обращение и в основном сделает то, что делает Rarst, но без необходимости глобальных операторов…

    class WPSE_Example_Code {
        private $hook;
        function __construct() {
            add_action( 'admin_menu', array( $this, 'on_admin_menu' ) );
        }
        function on_admin_menu() {
            $this->hook = add_options_page( .. your params .. );
            add_action( 'admin_enqueue_scripts', array( $this, 'on_admin_enqueue_scripts' ) );
            // OR (you'd not need the conditional statement in the function below if using this method)
            // add_action( 'admin_print_scripts-' . $this->hook , array( $this, 'on_admin_enqueue_scripts' ) );
        }
        function on_admin_enqueue_scripts( $hook_suffix ) {
            if( $this->hook != $hook_suffix )
                return;
            wp_enqueue_script( 'your-script-handle', plugins_url( '/yourfilename.js', __FILE__ ), array( 'jquery' ), '1.0', true );
        }
    }
    

    С технической точки зрения, один admin_print_scripts-$hook или admin_enqueue_scripts оба подходят для вашего использования, что вы используете, на самом деле вопрос предпочтений. Я склонен использовать admin_print_scripts-$hook себя (потому что мне обычно нужен скрипт только для одной страницы, это позволяет избежать необходимости писать условную логику внутри обратного вызова, как в моем примере).

    • 0

Оставить ответ

You must login to add an answer.