问题描述
我正在构建一个插件,我想在管理员头部添加一些 javascript,但仅在某些管理页面上。我不是指您创建自己的 WordPress 页面,而是现有的管理员部分页面,如’Your Profile’,’Users’ 等。是否有专门为此任务的 wp 功能?我一直在寻找,我只能找到布尔函数 is_admin
和动作钩子,但不是一个布尔函数,只是检查。
最佳解决方案
执行此操作的方法是使用’admin_enqueue_scripts’ 挂钩到 en-queue 您需要的文件。该钩子将通过一个 $ 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
}
第三种解决方案
最全面的方法是在 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] =>
)
第四种方案
提供上述问题的替代方法/方法。
// 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 .. );
}
该方法更直接地针对特定页面,并避免在回调中需要条件逻辑 (因为您已经在选定的钩子中进行了区分) 。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。