我继承了一个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不这样做了。帖子和页面都使用如下所示的URL进行编辑:post.php?post=4&action=edit
,因此URL中唯一可能的标识符是帖子编号。
那么,我该如何识别我是在编辑一个页面还是一个帖子呢?有没有一个WordPress的功能可以很容易地告诉我这一点?是唯一的选择,抓住帖子编号,并以某种方式检查它,看看它是什么?
你会如何处理这个问题?
- 编辑:**以下是我所做的......我没有执行preg_match,而是检索了全局$id,使用
get_all_page_ids()
获得了所有页面的列表,并将$id与get_all数组中的id进行了匹配。如果匹配,则执行页面add_meta_box,如果不匹配,则执行post。
- 编辑:**以下是我所做的......我没有执行preg_match,而是检索了全局$id,使用
我还把检查从一个循环中移走了,这个循环节省了大量的时间来呈现页面。现在我在开始处设置了一个标志,在呈现这些meta_boxes的循环中,只需检查是否设置了该标志。
6条答案
按热度按时间iklwldmw1#
自WP 3.1起,您可以使用
get_current_screen()
获取后端显示的当前屏幕的完整信息:http://codex.wordpress.org/Function_Reference/get_current_screenqhhrdooz2#
函数is_page()对你的插件可用吗?
参见此处:http://codex.wordpress.org/Conditional_Tags
uujelgoq3#
最好使用get_post_type($id)
http://codex.wordpress.org/Function_Reference/get_post_type
b1uwtaje4#
在文件/wp-admin/includes/screen. php第530行@参见设置当前屏幕()
下面是我使用的:
或
并且如果需要期望某些类型
8yoxcaq75#
下面是我使用的:
祝你好运!
ruoxqz4g6#
你可以尝试使用get_current_screen()函数,检查你是从post还是page编辑,你只需要设置一个条件
如果对你有用就告诉我。