WP管理セクションの特定のページにいるかどうかを確認するにはどうすればよいですか?たとえば、[ユーザー]> [プロフィール]ページにいるかどうかを確認するにはどうすればよいですか?


32

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


1
回答が受け入れられなかったことを思い出させるための穏やかな微調整。提供された回答がどれもあなたの質問に十分に答えない場合、または提供された情報を理解するのに苦労している場合は、コメントしてください。
t31os

回答:


24

これを行う方法は、「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');

55

wp-adminには、現在のページの名前(edit.php、post.phpなど)を保持する$ pagenowというグローバル変数があります。

また、$ _ 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

    }

1
global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. }たとえば、カスタムテーマ設定ページにいるかどうかを確認しますadmin.php?page=prefix-theme-settings
lowtechsun

19

最も包括的な方法がget_current_screenWordPress 3.1に追加されました

$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] => 
)

3
「使用上の制限-この関数はほとんどの管理ページで定義されていますが、すべてではありません。したがって、is_admin()がtrueを返す場合があります。知られている例は、WP-adminの/ customize.phpあるadmin_initフックから呼び出された場合、関数の戻りをnullそれは、このようなcurrent_screenなど、後のフックでの使用にOKでなければなりません」 - 。。。コーデックス
そのブラジル人

@ThatBrazilianGuy簡単なチェックではget_current_screen()、すべての管理ページで安全に使用できることがわかる限り、これはもはや当てはまらないことが示唆されています。
シャハール

1
@shaharこれは、上記のリンクされたドキュメントと私の経験によると、まだそうです。
fabrik

9

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

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

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


なぜこの回答がこれ以上票を獲得しなかったのかを知り、質問の正確なユースケースを網羅し、最小限のコードでソリューションを提供したいです。フィードバックはいいでしょう。
t31os14年

3

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

$ hookが必要で、メニューページを自分で追加しなかった場合、ドキュメントはここにあります

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

load-toplevel_page_ $ MenuSlug

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

load- $ MenuSlug_page_ $ SubMenuSlug

そのロジックに従って、ユーザーのプロファイルページのフックは

load-users_page_profile

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.