4

我想添加一些过滤器来选择所需的帖子,例如:

function exclude_post($query) {
    if ($query->is_home) {

       // Do some PHP code

    }    
    return $query;
}

add_filter('pre_get_posts', 'exclude_post');

如何向现有的 WP_Query实例添加新条件$query

4

4 回答 4

7

如果要使用过滤器修改查询,可以$query->set('post_type', 'post');在函数中使用,只需添加参数即可。

如果要修改主循环,可以使用:

global $wp_query;
$args = array_merge( $wp_query->query_vars, array( 'post_type' => 'product' ) );
query_posts( $args );
于 2013-08-29T13:06:24.957 回答
0

您想创建一个自定义的帖子列表,但又不想丢失当前的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.
于 2013-08-29T13:06:55.190 回答
0
$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'people',
            'field' => 'slug',
            'terms' => 'bob'
        )
    )
);
$query = new WP_Query( $args );

来自 codex 的片段在这里查看更多wp 查询

于 2013-08-29T12:45:05.050 回答
0

作为 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。

我希望这可以帮助别人。

于 2020-02-10T19:01:38.723 回答