問題描述

我正在構建一個外掛,我想在管理員頭部新增一些 javascript,但僅在某些管理頁面上。我不是指您建立自己的 WordPress 頁面,而是現有的管理員部分頁面,如’Your Profile’,’Users’ 等。是否有專門為此任務的 wp 功能?我一直在尋找,我只能找到布林函式 is_admin 和動作鉤子,但不是一個布林函式,只是檢查。

最佳解決方案

執行此操作的方法是使用’admin_enqueue_scripts’ 掛鉤到 en-queue 您需要的檔案。該鉤子將透過一個 $ hook_suffix 與載入的當前頁面相關:

function my_admin_enqueue($hook_suffix) {
    if($hook_suffix == 'appearance_page_theme-options') {
        wp_enqueue_script('my-theme-settings', get_template_directory_uri() . '/js/theme-settings.js', array('jquery'));
        wp_enqueue_style('my-theme-settings', get_template_directory_uri() . '/styles/theme-settings.css');
        ?>
        <script type="text/javascript">
        //<![CDATA[
        var template_directory = '<?php echo get_template_directory_uri() ?>';
        //]]>
        </script>
        <?php
    }
}
add_action('admin_enqueue_scripts', 'my_admin_enqueue');

次佳解決方案

wp-admin 中有一個全域性變數,稱為 $ pagenow,它儲存當前頁面的名稱,即 edit.php,post.php 等。

您還可以檢視 $ _GET 請求,進一步縮小您的位置,例如:

global $pagenow;
if (( $pagenow == 'post.php' ) && ($_GET['post_type'] == 'page')) {

    // editing a page

    }

if ($pagenow == 'users.php') {

    // user listing page

    }

if ($pagenow == 'profile.php') {

    // editing user profile page

    }

第三種解決方案

最全面的方法是在 WordPress 3.1 中新增 get_current_screen

$screen = get_current_screen();

回報

WP_Screen Object (
    [action] =>
    [base] => post
    [id] => post
    [is_network] =>
    [is_user] =>
    [parent_base] => edit
    [parent_file] => edit.php
    [post_type] => post
    [taxonomy] =>
)

第四種方案

提供上述問題的替代方法/方法。

// When you are viewing the users list or your editing another user's profile
add_action( 'admin_print_scripts-users.php', 'your_enqueue_callback' );

// When you are editing your own profile
add_action( 'admin_print_scripts-profile.php', 'your_enqueue_callback' );

function your_enqueue_callback() {
    wp_enqueue_script( .. YOUR ENQUEUE ARGS .. );
}

該方法更直接地針對特定頁面,並避免在回撥中需要條件邏輯 (因為您已經在選定的鉤子中進行了區分) 。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。