如何才能在插件的设置页面上只加载插件js?

时间:2013-01-17 作者:dcp3450

我有一个插件与一些默认wordpress函数冲突。在帖子和页面创建/编辑区域中。我只需要设置页面上的功能。我在admin中加载了js文件,没问题。

我是否可以告诉脚本不要加载,除非我正在查看插件的设置页面?

3 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

您需要使用插件页面特定的脚本排队挂钩。

编辑最佳实践方法是使用admin_enqueue_scripts-{hook}, 而不是admin_print_scirpts-{hook}. 但是,因为您专门针对自己插件的管理页面,所以任何一个都很好。

要避免的钩子是“全局”admin_print_scripts.

原始呼叫如下所示:

    /* Using registered $page handle to hook script load */
    add_action(\'admin_print_scripts-\' . $page, \'my_plugin_admin_scripts\');
然后定义$page 像这样钩住:

$page = add_submenu_page( $args );
已复制答案directly out of the Codex:

<?php
add_action( \'admin_init\', \'my_plugin_admin_init\' );
add_action( \'admin_menu\', \'my_plugin_admin_menu\' );

function my_plugin_admin_init() {
    /* Register our script. */
    wp_register_script( \'my-plugin-script\', plugins_url(\'/script.js\', __FILE__) );
}

function my_plugin_admin_menu() {
    /* Register our plugin page */
    $page = add_submenu_page( \'edit.php\', // The parent page of this menu
                              __( \'My Plugin\', \'myPlugin\' ), // The Menu Title
                              __( \'My Plugin\', \'myPlugin\' ), // The Page title
              \'manage_options\', // The capability required for access to this item
              \'my_plugin-options\', // the slug to use for the page in the URL
                              \'my_plugin_manage_menu\' // The function to call to render the page
                           );

    /* Using registered $page handle to hook script load */
    add_action(\'admin_print_scripts-\' . $page, \'my_plugin_admin_scripts\');
}

function my_plugin_admin_scripts() {
    /*
     * It will be called only on your plugin admin page, enqueue our script here
     */
    wp_enqueue_script( \'my-plugin-script\' );
}

function my_plugin_manage_menu() {
    /* Output our admin page */
}
?>

SO网友:kaiser

为了让您的生活更轻松,编码速度更快(无需核心文件搜索),我们编写了"Current Admin Info" Plugin.

通过这种方式,您可以很容易地看到从管理全局列表或get_current_screen() 函数,然后可以使用在其他上下文帮助选项卡中看到的属性访问该函数。

// See dump
var_dump( get_current_screen()->property );

# @example
// Get the post type
$post_type = get_current_screen()->post_type;
// Get the current parent_file (main menu entry that meets for every submenu)
$parent = get_current_screen()->parent_file;
enter image description here

enter image description here

SO网友:akTed

我还不明白为什么,但是according to Codex, 您应该只使用admin_enqueue_scripts 将样式/脚本排入管理队列。我有一个open Question 询问原因,但尚未得到满意的答复。Codex条目可能参考this core dev\'s post.

以下是如何以“正确”的方式进行操作(注意:admin_enqueue_scripts 钩子只能从另一个钩子函数调用,例如,正如我在第二个代码块中使用admin_menu. 如果你想勾引admin_enqueue_scripts 太早,您将收到错误):

add_action(\'admin_enqueue_scripts\', \'YOUR_ENQUEUEING_FUNCTION\');
function YOUR_ENQUEUEING_FUNCTION($hook_suffix) {
    global $my_menu_hook_akt;

    // exit function if not on my own options page!
    // $my_menu_hook_akt is generated when creating the options page, e.g.,
    // $my_menu_hook_akt = add_menu_page(...), add_submenu_page(...), etc
    if ($hook_suffix != $my_menu_hook_akt) return;

    $handle = \'my_js\';
    wp_register_script($handle, \'http://example.com/path/to/my-javascript.js\');
    wp_enqueue_script($handle);
} // function YOUR_ENQUEUEING_FUNCTION
下面是一个功能齐全的插件;它除了将javascript文件注入到<;仅限选项页的页眉

<?php
// Plugin Name:0-Menu Test
global $my_menu_hook_akt;

add_action(\'admin_menu\', \'create_menu_akt\');
function create_menu_akt() {
    global $my_menu_hook_akt;
    $my_menu_hook_akt = add_menu_page(
        \'My Cool Plugin\\\'s Title\',
        \'My Cool Plugin\\\'s Name\',
        \'manage_options\',
        \'my-cool-plugins-slug\',
        \'draw_options_page_akt\'
    );
    add_action(\'admin_enqueue_scripts\', \'enqueue_only_on_my_page_akt\');
} // function create_menu_akt


function enqueue_only_on_my_page_akt($hook_suffix) {
    global $my_menu_hook_akt;

    // exit function if not on my own options page!
    // $my_menu_hook_akt is generated when creating the options page, e.g.,
    // $my_menu_hook_akt = add_menu_page(...), add_submenu_page(...), etc
    if ($hook_suffix != $my_menu_hook_akt) return;

    $handle = \'my_js\';
    wp_register_script($handle, \'http://example.com/path/to/my-javascript.js\');
    wp_enqueue_script($handle);
} // function enqueue_only_on_my_page_akt


function draw_options_page_akt() {
    // draw your options page
} // function draw_options_page_akt

结束

相关推荐

Wp_admin edit.php速度慢,有很多查询

我有大约4000个帖子。目前,当我点击所有帖子(edit.php)时,加载大约需要10秒,我显示了大约1000个查询!大多数看起来像。。。SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy