查询重置问题或代码有缺陷,以启用自定义POST类型查询

时间:2013-02-16 作者:Soyo

在阅读了这里并尝试了各种选项之后,我终于能够让我的自定义帖子类型“推荐”(使用产品“工具集”创建)与我的标准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”,因为过滤器现在应用于正确的位置。非常感谢您的帮助。

2 个回复
最合适的回答,由SO网友:Milo 整理而成

pre_get_posts 在每个查询上运行,因此您要检查is_main_query() 因此,它仅适用于默认查询,而不适用于在页面上运行的其他查询。

您还应该养成引用传递给函数的查询对象的习惯,如$query->is_category(), 作为主叫is_category() 是的包装器$wp_query->is_category(), 这也可能会产生意想不到的结果,这取决于你正在尝试做什么。

SO网友:s_ha_dum

看起来您只是想让WordPress在查询中包含您的自定义帖子类型。你需要做的就是register the post type 具有\'public\' => true. 就像这个例子from the Codex:

function codex_custom_init() {
    $args = array( \'public\' => true, \'label\' => \'Books\' );
    register_post_type( \'book\', $args );
}
add_action( \'init\', \'codex_custom_init\' );
我误解你了吗?

结束

相关推荐

LIKE %...% Meta Query

我有一个序列化数组作为元值,我正在尝试运行WP Query,它在序列化数组中找到一个特定的值。以下是序列化数组字段的示例:a:6:{i:0;s:3:\"173\";i:1;s:3:\"172\";i:2;s:3:\"171\";i:3... 这是我的查询,但它不起作用:ID也是我正在搜索的数字。$practiceArgs = array( \'post_type\' => \'attorney\', \'post_status\' => \'publi