在Wordpress中为现有的WP_Query添加条件

时间:2013-08-29 12:36:28

标签: php wordpress

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

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 个答案:

答案 0 :(得分:5)

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

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

global $wp_query;
$args = array_merge( $wp_query->query_vars, array( 'post_type' => 'product' ) );
query_posts( $args );

答案 1 :(得分:0)

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'people',
            'field' => 'slug',
            'terms' => 'bob'
        )
    )
);
$query = new WP_Query( $args );

来自codex的代码段在此处查看更多内容wp query

答案 2 :(得分: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.

答案 3 :(得分: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。

我希望这对某人有帮助。