我继承了一个Wordpress插件,可以在编辑页面和/或帖子时使自定义字段可用。它为页面添加的内容略微不同于帖子。该插件使用以下内容确定页面或帖子:
if(preg_match('|post.php|i', $_SERVER['SCRIPT_NAME']) || preg_match('|post-new.php|i', $_SERVER['SCRIPT_NAME'])) {
add_meta_box('qaws_' . $cg ,$group, 'qaws_admin_meta', 'post', 'advanced', 'core');
} elseif(preg_match('|page.php|i', $_SERVER['SCRIPT_NAME']) || preg_match('|page-new.php|i', $_SERVER['SCRIPT_NAME'])) {
add_meta_box('qaws_' . $cg ,$group, 'qaws_admin_meta', 'page', 'advanced', 'core');
}
这在旧版本的Wordpress中运行良好,因为他们在编辑帖子时使用URL中的post.php,编辑页面时使用page.php。但是,现在,Wordpress不会这样做。帖子和页面都使用类似于post.php?post=4&action=edit
的URL进行编辑,因此URL中唯一可能的标识符是帖子编号。
那么,我如何识别我是否正在编辑页面或帖子?有Wordpress功能可以告诉我这个吗?是获取邮政编号的唯一选择,并以某种方式检查它以查看它是什么?
你会怎么做?
修改
这就是我做的......
而不是执行preg_match我检索了全局$ id,使用get_all_page_ids()
获取所有页面的列表,并将$ id与get_all数组中的id匹配。如果匹配,请执行add_meta_box页面,如果没有匹配则。
我还将检查结果移出了一个循环,它在其中保存了一堆准时呈现页面。现在我在开始和循环中设置了一个标志,渲染这些meta_box只是检查是否设置了该标志。
答案 0 :(得分:11)
从 WP 3.1 开始,您可以使用get_current_screen()
获取有关后端显示的当前屏幕的完整信息:http://codex.wordpress.org/Function_Reference/get_current_screen
答案 1 :(得分:3)
你的插件可以使用函数is_page()吗?
答案 2 :(得分:2)
最好使用get_post_type($ id)
答案 3 :(得分:1)
第530行@see set_current_screen()
global $typenow
$typenow = $this->post_type;
以下是我使用的内容:
if ($typenow == 'post') {
//do something for post screens only.
}
或
if ($typenow == 'page') {
//do something for page screens only.
}
答案 4 :(得分:0)
以下是我使用的内容:
if( strstr($_SERVER['REQUEST_URI'], 'wp-admin/post-new.php') || strstr($_SERVER['REQUEST_URI'], 'wp-admin/post.php') ) {
//I'm editing a post, page or custom post type
}else{
//I'm doing none of the above.
}
祝你好运!
答案 5 :(得分:0)
您可以尝试使用get_current_screen()函数,检查您是从帖子或页面进行编辑,只需设置条件
$screen = get_current_screen();
if($screen->post_type == 'page'){
//do something for page screens only
}elseif($screen->post_type == 'post'){
//do something for post screens only.
}
让我知道它是否适合你。