我有一个名为&#34的自定义帖子类型;团队成员"以及一些自定义列 - 一个专门用于订购自定义帖子的列。我已经进行了设置,这样当您第一次访问“团队成员”选项卡时,这些帖子将按照“团队订单”排序(ASC)。柱。这工作得很好,但是,我遇到了一个小问题,如果我点击Team Order列来反转排序到DESC,看起来似乎Wordpress已经识别出它们已经在页面排序了最初加载。相反,它再次查询帖子并再次以ASC顺序返回它们。然后,如果再次单击列标题,它将以DESC顺序返回帖子。如何摆脱点击两次的需要?首次加载页面时,帖子已按升序排序。为什么Wordpress会错过这个并在第二次按升序返回它们,然后再继续使用DESC?
这是我的代码,如果您想了解更多内容,请与我们联系。感谢
try
答案 0 :(得分:0)
试试这个
//team_members Post Type: sortable columns orderby
add_action( 'pre_get_posts', 'team_members_orderby_columns', 1 );
function team_members_orderby_columns( $query ){
if( !is_admin() ){
return;
}
$order = $query->get( 'team_order' );
if ( $query->is_main_query() && ( $orderby = $query->get( 'orderby' ) ) ) {
switch( $orderby ) {
case 'team_order':
$query->set( 'meta_key', 'team_order' );
$query->set( 'orderby', 'meta_value_num' );
if ( ! in_array( $order, array( 'ASC', 'DESC' ) ) )
$query->set( 'order', 'ASC' );
}
break;
}
}
}
答案 1 :(得分:0)
那是很久以前的事了,但是也许我的解决方案可以帮助某人:
要在页面加载时启用列排序,需要检查是否设置了$orderby = $query->get( 'orderby' )
。如果未设置您的自定义订购。与此类似:
$orderby = $query->get('orderby');
if ($orderby === 'team_order') {
$query->set('meta_key','team_order');
$query->set('orderby','meta_value_num');
return;
}
if ($orderby === '') {
$query->set('meta_key','team_order');
$query->set('orderby','meta_value_num');
if ($query->get('order') === '') {
$query->set( 'order', 'DESC' );
}
return;
}
或在@sastra-nababans答案中为切换条件添加其他情况:
case '': // If orderby is empty
$query->set('meta_key', 'team_order' );
$query->set('orderby', 'meta_value_num' );
if ($query->get('order') === '')
$query->set('order', 'DESC');
}
break;