Answers:
完成此操作的方法是使用“ 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