问题描述
我不知道为什么我的排序功能不排序我的”events” 我的自定义 post-meta 。我有一个名为 wr_event
的 custom-post-type … 我有我的自定义列设置,我的 post-meta 显示在列中,就像我想要的。 “Event-Date” 手柄已经是一个可排序的链接!只有当我点击 sort-link 的事件日期列表不更新的事情。该功能被触发,因为我看到页面重新加载,但它不排序任何。
即使如果我点击 sort-link,这两个国家之间的 url 将会切换
http://url/wp-admin/edit.php?post_type=wr_event&orderby=event_date&order=desc
http://url/wp-admin/edit.php?post_type=wr_event&orderby=event_date&order=asc
但是列表总是看起来一样!
以下是我自定义列的整个代码:
add_filter("manage_edit-wr_event_columns", "wr_event_edit_columns");
function wr_event_edit_columns($columns) {
$columns = array(
"cb" => "<input type="checkbox" />",
"title" => "Event",
"event_date" => "Event Date",
"type" => "Type",
);
return $columns;
}
add_action("manage_posts_custom_column", "event_custom_columns");
function event_custom_columns($column) {
global $post;
switch ($column) {
case "event_date":
$custom = get_post_custom();
echo $custom['_wr_event_date'][0];
break;
case "type":
echo get_the_term_list($post->ID, 'event_type', '', ', ','');
break;
}
}
add_filter("manage_edit-wr_event_sortable_columns", "wr_event_sortable_columns");
function wr_event_sortable_columns( $columns ) {
$columns['event_date'] = 'event_date';
return $columns;
}
add_filter("request", "event_column_orderby");
function event_column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && 'event_date' == $vars['event_date'] ) {
$vars = array_merge( $vars,
array(
'meta_key' => '_wr_event_date',
'orderby' => 'meta_value_num',
'order' => 'asc'
)
);
}
return $vars;
}
最佳解决方案
这是因为您正在检查'event_date' == $vars['event_date']
不是'event_date' == $vars['orderby]
。
但不要使用 request
滤波器。代替:
add_action( 'pre_get_posts', 'event_column_orderby' );
function event_column_orderby( $query ) {
if( ! is_admin() )
return;
$orderby = $query->get( 'orderby');
if( 'event_date' == $orderby ) {
$query->set('meta_key','_wr_event_date');
$query->set('orderby','meta_value_num');
}
}
… 并且不要手动设置 order
,因为您将不会看到在 ASC /DESC 之间切换时的区别。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。