/doctors/
是post类型的存档,因此我们可以检查该查询是否正在pre_get_posts
通过的操作conditional tag is_post_type_archive( \'doctors\' )
并相应地修改这些查询。
WordPress通过引用($query
在本例中),因此我们可以通过set
查询对象的方法。此代码将放在您的主题中functions.php
文件:
function wpa_doctor_gender( $query ) {
// if this is the main query on the doctors post type archive
if ( $query->is_post_type_archive( \'doctors\' )
&& $query->is_main_query() ) {
// set query vars for all doctors queries
$query->set( \'meta_key\', \'last_name\' );
$query->set( \'orderby\', \'meta_value\' );
$query->set( \'order\', \'ASC\' );
// set meta_query if gender is female
if ( isset( $_GET[\'gender\'] )
&& \'female\' == $_GET[\'gender\'] ){
$meta_query = array(
array(
\'key\' => \'gender\',
\'value\' => $_GET[\'gender\'],
\'compare\' => \'IN\'
)
)
$query->set( \'meta_query\', $meta_query );
}
}
}
add_action( \'pre_get_posts\', \'wpa_doctor_gender\' );
现在,在模板中,我们可以去掉所有自定义查询代码和循环,只需运行vanilla循环即可输出帖子:
while( have_posts() ) {
the_post();
the_title();
// etc..
}