这里可用的解决方案
我已经设置了一个名为clientarea的自定义帖子类型,并在管理区域中为其设置了几个自定义列-自定义列都是自定义元字段,正如您从我的代码中看到的那样。我想按“约会日期”默认排序。
所有列都可以正常工作,并且可以按预期进行手动排序,但是我无法使用默认的排序顺序。
如果我将默认排序字段更改为标准字段(例如“标题”),则它可以按预期工作;当我尝试将自定义列设置为默认的排序顺序时,它似乎不起作用。顺序有效(即,即使使用自定义列,我也可以默认在asc和desc之间进行切换),但是它没有选择orderby,因此恢复了按自定义帖子发布日期排序的顺序。
我想念什么?
我的代码如下:
add_action( 'manage_posts_custom_column' , 'custom_columns', 10, 2 );
function custom_columns( $column, $post_id ) {
global $wpdb;
switch ( $column ) {
case 'extranet_case_office':
$get_office_ID = get_post_meta( $post_id, 'extranet_case_office', true );
$get_office_name = $wpdb->get_results('SELECT post_title FROM `cn_bf_posts` WHERE `ID` = '.$get_office_ID);
echo $get_office_name[0]->post_title;
break;
case 'extranet_appointment_date':
echo date('d/m/Y',strtotime(get_post_meta( $post_id, 'extranet_appointment_date', true )));
break;
case 'extranet_appointment_type':
echo get_post_meta( $post_id, 'extranet_appointment_type', true );
break;
case 'extranet_insolvency_practioner':
$get_person_ID = get_post_meta( $post_id, 'extranet_insolvency_practioner', true );
$get_person_name = $wpdb->get_results('SELECT post_title FROM `cn_bf_posts` WHERE `ID` = '.$get_person_ID);
echo $get_person_name[0]->post_title;
break;
default:
break;
}
}
add_filter( 'manage_edit-clientarea_sortable_columns', 'my_sortable_clientarea_columns' );
function my_sortable_clientarea_columns( $columns ) {
$columns['extranet_case_office'] = 'extranet_sort_office';
$columns['extranet_appointment_date'] = 'extranet_sort_date';
$columns['extranet_appointment_type'] = 'extranet_sort_type';
$columns['extranet_insolvency_practioner'] = 'extranet_sort_IP';
return $columns;
}
add_action( 'pre_get_posts', 'extranet_orderby' );
function extranet_orderby( $query ) {
if( ! is_admin() )
return;
$orderby = $query->get( 'orderby');
switch ( $orderby ) {
case 'extranet_sort_office':
$query->set('meta_key','extranet_case_office');
$query->set('orderby','meta_value_num');
break;
case 'extranet_sort_date':
$query->set('meta_key','extranet_appointment_date');
$query->set('orderby','meta_value');
break;
case 'extranet_sort_type':
$query->set('meta_key','extranet_appointment_type');
$query->set('orderby','meta_value');
break;
case 'extranet_sort_IP':
$query->set('meta_key','extranet_insolvency_practioner');
$query->set('orderby','meta_value_num');
break;
default:
break;
}
}
add_action('pre_get_posts','clientarea_default_order');
function clientarea_default_order( $query ){
if( $query->get('post_type')=='clientarea' ){
if( $query->get('orderby') == '' )
$query->set('orderby','extranet_sort_date');
if( $query->get('order') == '' )
$query->set('order','desc');
}
}
关注-过去,我曾为一个结果不一的客户尝试过此操作。渴望看到一个好的解决方案。
—
jdm2112
您能解决自定义列的排序问题吗?
—
jdm2112
@ jdm2112-是的-我将此问题交叉发布在Stack Exchange上(因为我有足够的代表在那里设置赏金。)-给出的两个答案都是正确的,但是被接受的答案给出了更多的解释和建议的代码改进。stackoverflow.com/questions/31434373/...
—
SinisterBeard
您应该添加适当的解决方案。您可以从Stack Overflow上的帖子或所有答案的组合中复制解决方案,然后将链接作为鸣谢形式发布给原始作者。我知道@birgire会介意用信用重新发布;-)
—
Pieter Goosen
很高兴听到它对解决问题有帮助,只是在WPSE上注意到了这个问题。@PieterGoosen感谢您的建议,“无论您要介意还是不介意”这都是史诗般的问题😃–
—
birgire