我想添加一些过滤器来选择所需的帖子,例如:
function exclude_post($query) {
if ($query->is_home) {
// Do some PHP code
}
return $query;
}
add_filter('pre_get_posts', 'exclude_post');
如何向现有的 WP_Query实例添加新条件$query
?
如果要使用过滤器修改查询,可以$query->set('post_type', 'post');
在函数中使用,只需添加参数即可。
如果要修改主循环,可以使用:
global $wp_query;
$args = array_merge( $wp_query->query_vars, array( 'post_type' => 'product' ) );
query_posts( $args );
您想创建一个自定义的帖子列表,但又不想丢失当前的wp_query
? 简单,使用wp_reset_query()
!
$my_query = new WP_Query( $argument_array );
//... Do all you have to do with the query ...
wp_reset_query(); // This will restore the original query.
$args = array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'people',
'field' => 'slug',
'terms' => 'bob'
)
)
);
$query = new WP_Query( $args );
来自 codex 的片段在这里查看更多wp 查询
作为 wp_reset_query() 的替代方法并提供对查询的更多控制,这对我有用:
您可以使用 array_push() 添加到 $args 数组。然后,您只需创建一个新的 WP_Query。当然,这仅在您仍然设置了 $args 变量时才有效。
在您的代码中,您可以编写:
$new_arg = array('tax_query' => array(
array(
'taxonomy' => get_query_var('taxonomy'),
'field' => 'slug',
'terms' => get_query_var('term'),
),
)
);
array_push($args,$new_arg);
$query = new WP_Query( $args );
在上面的代码中,我只是使用 array_push 将新的数组元素添加到 WP_QUERY 正在使用的同一数组中。然后,我只是将它传递回 WP_QUERY。
我希望这可以帮助别人。