列出多个$query的正确方法->;设置


Correct way to list multiple $query->set

列出多个$query->set的正确方法是什么?我是否可以拥有多个$query->set,如下面的"代码A"
还是我应该把它们组合成一个?如果是,您将如何组合三个$query->set代码?我试着在下面的"代码B"中组合它们,但没有成功。


代码A:组合$query->set之前

此代码位于functions.php 中

function featured_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( 'category_name', 'new' );
    $query->set( 'cat', '-60, -61' );
    $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'featured_category' );


代码B:组合$query->set后

此代码位于functions.php 中

function featured_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( array( 'category_name' => 'new', 'cat' => '-60, -61', 'posts_per_page' => 5) );
    }
}
add_action( 'pre_get_posts', 'featured_category' );

使用set方法(它是WP_Query类的一部分)的正确方法是传递两个参数-一个查询参数键和一个查询参数值。所以你的第一个例子(代码A)是正确的方法

您可以在此处查看方法代码:https://core.trac.wordpress.org/browser/tags/4.0/src/wp-includes/query.php#L2328

p.S。如果要从查询中排除多个类别,请考虑使用category__not_in查询参数,例如:

$query->set( 'category__not_in', array(60, 61) );

有关类别查询参数的详细信息,请查看http://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

或者,为了获得更优雅简洁的方法。你可以将它们分组成一个数组,然后循环遍历它们。

<?php
$query_vars = array(
    'post_type' => 'question',
    'post_status' => 'publish',
    'posts_per_page' => 1,
    'posts_per_archive_page' => 1,
    'orderby' => 'rand(' . get_query_var( 'docket' ) . ')',
);
foreach ( $query_vars as $key => $value ) {
    $wp_query->set( $key, $value );
};