此功能可帮助您筛选出非标准帖子类型:
function is_non_standard_type($id = null) {
if (!$id) {
// rewind_posts();
global $post;
$id = $post->ID;
}
$post_type = get_post_type( $id );
return in_array($post_type, array(\'post\', \'page\', \'attachment\', \'nav_menu, \'nav_menu_item\', \'revision\')); // You might want to handle revision differently
}
请记住,这基本上只适用于单页(即。
is_single() === true
), 即使这样,你也不能完全确定。这是由于全球
$post
在加载页面的过程中可能会发生变化,具体取决于任何循环过程中发生的情况。例如,侧栏中的循环可能会覆盖
$post
. 要解释这一点,您可以使用
rewind_posts()
还原到页面开始加载时全局查询/发布所处的状态。
但也有存档页,对于$post
变量可能不包含任何内容,也可能不反映单个帖子类型。以分类法页面为例,因为分类法对于单个帖子类型不是唯一的,所以您不能仅仅因为您正在查询taxonomy_x
你只会得到类型的帖子post_type_y
. 您可以通过使用下面这样的函数来解决这个问题,但只有在运行的查询具有post_type
定义,但可能并不总是这样。
function queried_post_type_object() {
$var = get_query_var(\'post_type\');
if ($var) {
return get_post_type_object($var);
}
return null;
}
即使您能够正确地确定显示的是哪种帖子类型、分类法等,所涉及的逻辑也不会是微不足道的。找到以下各项的正确组合
is_single()
,
is_archive()
结合不同职位类型的例外情况可能会带来挑战,但通过一些工作,您应该能够解决它。