WP 관리 섹션의 특정 페이지에 있는지 어떻게 확인할 수 있습니까? 예를 들어 사용자> 프로필 페이지에 있는지 어떻게 확인할 수 있습니까?


32

플러그인을 만들고 있는데 관리자 헤드에 일부 자바 스크립트를 추가하고 싶지만 특정 관리자 페이지에만 추가하고 싶습니다. 워드 프레스 페이지와 같이 자신을 만드는 페이지를 의미하는 것이 아니라 '내 프로필', '사용자'등과 같은 기존의 관리자 섹션 페이지를 의미합니다.이 작업에 특별히 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에 $ 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

    }

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를 리턴하는 경우가 있지만 get_current_screen ()을 호출하려고 시도하면 정의되지 않아 치명적인 오류가 발생합니다. 알려진 예는 WP - 관리자 / customize.php 인 admin_init 후크에서 호출하면 함수가 리턴 널 (null) 그것은 나중에 current_screen 같은 후크 확인에 사용할 수 있어야한다. "-.. 코덱스 .
그 브라질 사람

@ThatBrazilianGuy 빠른 확인은 get_current_screen()모든 관리자 페이지에서 안전하게 사용할 수있는 한 더 이상 그렇지 않다는 것을 암시 합니다.
shahar

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

이 방법은 특정 페이지를보다 직접적으로 대상으로하고 콜백 내부에 조건부 논리가 필요하지 않도록합니다 (선택한 후크에서 이미 구분했기 때문에).


왜이 답변이 더 많은 표를 얻지 못했는지, 질문의 정확한 사용 사례를 다루고 최소한의 코드로 솔루션을 제공하기를 바랍니다. 피드백은 좋을 것입니다 ..
t31os

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.