确定我是在编辑Wordpress中的页面还是帖子

时间:2010-11-03 09:11:12

标签: php wordpress wordpress-plugin

我继承了一个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只是检查是否设置了该标志。

6 个答案:

答案 0 :(得分:11)

WP 3.1 开始,您可以使用get_current_screen()获取有关后端显示的当前屏幕的完整信息:http://codex.wordpress.org/Function_Reference/get_current_screen

答案 1 :(得分:3)

你的插件可以使用函数is_page()吗?

见这里:http://codex.wordpress.org/Conditional_Tags

答案 2 :(得分:2)

答案 3 :(得分:1)

文件/wp-admin/includes/screen.php中的

第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.
}

让我知道它是否适合你。