web-dev-qa-db-ja.com

あなたがどのようにあなたはあなたが特定のページにいるかどうかを確認することができます WP 管理セクションたとえば、「ユーザー>あなたのプロフィール」ページにいるかどうかを確認するにはどうすればよいですか。

私はプラグインを作成していて、管理者用ヘッドにjavascriptを追加したいのですが、それは特定の管理者ページのためだけです。自分で作成したWordPressページのようなページではなく、「あなたのプロフィール」、「ユーザー」などのような既存の管理セクションページなどです。このタスク専用のwp機能はありますか?私は探していて、ブール関数is_adminとアクションフックしか見つけることができませんが、チェックするだけのブール関数は見つけることができません。

32
racl101

これを行う方法は、必要なファイルをキューに入れるために 'admin_enqueue_scripts'フックを使用することです。このフックは、ロードされている現在のページに関連する$ 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');
23
prettyboymp

現在のページの名前を保持する $ pagenow と呼ばれるwp-adminにグローバル変数があります、すなわち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

    }
53
goldenapples

最も包括的な方法は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] => 
)
18
Louis-Rémi

上記の質問に対する代替方法/アプローチを提供すること。

// 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 .. );
}

このメソッドは、特定のページをより直接的に対象とし、コールバック内で条件付きロジックを必要としないようにします(すでに選択されたフックでその区別を行っているため)。

9
t31os

Add_menu_page関数がアクションフックを返すという事実について誰も言及していないのは不思議だと思います

$hook = add_menu_page($menu_title, $page_title, $capability, $slug, $function, $icon_url, $position);
add_action( 'load-' . $hook, 'my_admin_enqueue_scripts' );
function my_admin_enqueue_scripts() {
    wp_enqueue_script(/*...*/);
    wp_enqueue_style(/*...*/);
}

あなたが$フックを必要とし、あなたがあなた自身でメニューページを追加しなかったならば、docは ここ

例えば、トップレベルのメニューページのフックは

load-toplevel_page_ $ MenuSlug

サブメニューページのフックは

load- $ MenuSlug_page_ $ SubMenuSlug

そのロジックに従って、ユーザーのプロフィールページのフックは次のようになります。

load-users_page_profile

3
Tofandel