Update
我找到了解决方案,首先使用
is_main_query()
, 然后使用
is_post_type_archive( \'tribe_events\' )
第一个答案中提出的条件陈述。
function order_calendar_by_artist( $query ){
if ( is_admin() || !$query->is_main_query() ) {
return;
}
if( is_post_type_archive( \'tribe_events\' ) ){
$query->set( \'meta_key\', \'artist\' );
$query->set( \'orderby\', \'meta_value\' );
}
}
add_filter( \'pre_get_posts\', \'order_calendar_by_artist\', 99 );
Old Answer 2
尝试以下操作(在插件论坛上找到):
function order_calendar_by_artist( $query ) {
if ( !empty( $query->tribe_is_multi_posttype ) ) {
$query->set( \'meta_key\', \'artist\' );
$query->set( \'orderby\', \'meta_value\' );
}
}
add_action( \'pre_get_posts\', \'order_calendar_by_artist\' );
看来您需要找到正确的
$query
对于日历插件。你可以一直
print_r( $query);
查看该页面上正在运行哪些查询,并相应地调整条件。可能需要一段时间,但这是我在mo能想到的全部。
<小时>
Old answer 1
可以将函数代码封装在条件语句中,如下所示:
function order_calendar_by_artist( $query ) {
if ( is_post_type_archive( \'tribe_events\' ) ) {
$query->set( \'meta_key\', \'artist\' );
$query->set( \'orderby\', \'meta_value\' );
}
return $query;
}
add_filter( \'pre_get_posts\', \'order_calendar_by_artist\', 99 );
这样做只需调整
tribe_events
post类型存档页。根据查询需要在何处生效,可能需要调整条件。目前您正在使用
pre_get_posts
影响站点上每一个查询的操作,因此您需要深入到您希望运行功能的特定区域(即使用条件)。
您还可以使用以下方法来避免影响管理端
if ( is_post_type_archive( \'tribe_events\' ) && !is_admin() ) {
...
}
我还没有实际测试过这个,但它应该可以工作。。。(他说)
否则,您可能需要使用WP_Query()
功能并在需要重新排序帖子的任何位置创建新查询。
$args = array(
\'post_type\' => \'tribe_events\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'ASC\', //or DESC
\'meta_key\' => \'artist\'
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
//Loop stuff
endwhile;
endif;
wp_reset_postdata();