플러그인을 만들고 있는데 관리자 헤드에 일부 자바 스크립트를 추가하고 싶지만 특정 관리자 페이지에만 추가하고 싶습니다. 워드 프레스 페이지와 같이 자신을 만드는 페이지를 의미하는 것이 아니라 '내 프로필', '사용자'등과 같은 기존의 관리자 섹션 페이지를 의미합니다.이 작업에 특별히 wp 기능이 있습니까? 나는 찾고 있었고 부울 함수 is_admin
와 액션 후크 만 찾을 수 있지만 확인하는 부울 함수는 찾을 수 없습니다.
플러그인을 만들고 있는데 관리자 헤드에 일부 자바 스크립트를 추가하고 싶지만 특정 관리자 페이지에만 추가하고 싶습니다. 워드 프레스 페이지와 같이 자신을 만드는 페이지를 의미하는 것이 아니라 '내 프로필', '사용자'등과 같은 기존의 관리자 섹션 페이지를 의미합니다.이 작업에 특별히 wp 기능이 있습니까? 나는 찾고 있었고 부울 함수 is_admin
와 액션 후크 만 찾을 수 있지만 확인하는 부울 함수는 찾을 수 없습니다.
답변:
이를 수행하는 방법은 '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');
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
}
global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. }
예를 들어 사용자 정의 테마 설정 페이지에 있는지 확인합니다 admin.php?page=prefix-theme-settings
.
가장 포괄적 인 방법이 get_current_screen
WordPress 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] =>
)
get_current_screen()
모든 관리자 페이지에서 안전하게 사용할 수있는 한 더 이상 그렇지 않다는 것을 암시 합니다.
위의 질문에 다른 방법 / 접근법을 제공합니다.
// 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 .. );
}
이 방법은 특정 페이지를보다 직접적으로 대상으로하고 콜백 내부에 조건부 논리가 필요하지 않도록합니다 (선택한 후크에서 이미 구분했기 때문에).
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