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

eaf3rand  于 2023-03-01  发布在  WordPress
关注(0)|答案(6)|浏览(218)

我继承了一个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。

我还把检查从一个循环中移走了,这个循环节省了大量的时间来呈现页面。现在我在开始处设置了一个标志,在呈现这些meta_boxes的循环中,只需检查是否设置了该标志。

iklwldmw

iklwldmw1#

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

qhhrdooz

qhhrdooz2#

函数is_page()对你的插件可用吗?
参见此处:http://codex.wordpress.org/Conditional_Tags

b1uwtaje

b1uwtaje4#

在文件/wp-admin/includes/screen. php第530行@参见设置当前屏幕()

global $typenow;
$typenow = $this->post_type;

下面是我使用的:

if ($typenow == 'post') {
//do something for post screens only.
}

if ($typenow == 'page') {
//do something for page screens only.
}

并且如果需要期望某些类型

if (!$typenow == 'page' AND !$typenow == 'post') {
    //do something for page screens only.
}
8yoxcaq7

8yoxcaq75#

下面是我使用的:

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

祝你好运!

ruoxqz4g

ruoxqz4g6#

你可以尝试使用get_current_screen()函数,检查你是从post还是page编辑,你只需要设置一个条件

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

如果对你有用就告诉我。

相关问题