在阅读了这里并尝试了各种选项之后,我终于能够让我的自定义帖子类型“推荐”(使用产品“工具集”创建)与我的标准cat/tag查询一起显示,而不会让菜单消失!!下面是我提出的代码,并将其放置在我的主题的自定义函数中。php文件:
add_filter(\'pre_get_posts\', \'query_post_type\');
function query_post_type($query) {
if(is_category() || is_tag() || is_home() && empty($query->query_vars[\'suppress_filters\'] ) ) {
$post_type = get_query_var(\'post_type\');
if($post_type)
$post_type = $post_type;
else
$post_type = array(\'post\',\'testimonial\',\'nav_menu_item\');
$query->set(\'post_type\',$post_type);
return $query;
}
}
作为新手,我不太确定这与循环有什么关系,所以现在的问题是,当拉取我的自定义帖子类型时,在同一页上,从同一自定义帖子类型拉取的页脚小部件会产生奇怪的结果,所以很明显我需要应用wp\\u reset\\u query();或wp\\u reset\\u postdata();-但我的努力并没有奏效。我在查询本身的最后一个容器中,以及在不同的主题位置尝试过它。这让我想知道我是否真的做得不对,或者我的代码中隐藏着一个致命的缺陷???我希望有人能在这件事上救我,这太令人沮丧了。。。
附录-根据收到的评论更新此内容。。。
如果这对其他人有帮助,我尝试了以下建议的一些更改,但一开始没有正确地遵循它们。。。例如,将“$query->is\\u category()| |$query->is\\u tag()”等与“is\\u main\\u query()”(duh)混在一起,如果后一个添加没有帮助,那么它就会失败。。。但随后我再次阅读并遵循完整的建议,应用以下内容:
add_filter(\'pre_get_posts\', \'query_post_type\');
function query_post_type($query) {
if($query->is_category() || $query->is_tag() || $query->is_home() && $query->is_main_query()) {
$post_type = get_query_var(\'post_type\');
if($post_type)
$post_type = $post_type;
else
$post_type = array(\'post\',\'testimonial\');
$query->set(\'post_type\',$post_type);
return $query;
}
}
。。。现在它似乎工作正常!因此,正如下面所述,不要将$query->包含到每一个语句元素中,这会带来糟糕的魔力!
似乎我现在也能够消除&&;空($query->query\\u vars[\'suppress\\u filter\')以及添加的“nav\\u menu\\u item”,因为过滤器现在应用于正确的位置。非常感谢您的帮助。