【发布时间】:2016-02-17 13:32:33
【问题描述】:
我有一个名为reservation 的自定义帖子类型。在其中,我得到了您命名的活动/房间的预订(不重要)。
当我转到我的自定义帖子类型页面时,我可以很好地显示所有帖子。第一列是预订日期。现在预订日期可以是一个-28.11.2015,也可以是多个-28.11.2015, 29.11.2015, 02.12.2015.
我想启用该列的排序。问题是,这是一个字符串,而不是数字,所以我不能像here 中描述的那样创建一个简单的可排序列查询。
到目前为止,我尝试过这个:
add_filter( 'manage_edit-reservation_sortable_columns', 'reservation_sortable_column' );
if (!function_exists('reservation_sortable_column')) {
function reservation_sortable_column( $columns ) {
$columns['reservation_date'] = 'reservation_date';
return $columns;
}
}
add_filter( 'posts_clauses', 'manage_wp_posts_be_qe_pre_get_posts', 1, 2 );
if (!function_exists('manage_wp_posts_be_qe_pre_get_posts')) {
function manage_wp_posts_be_qe_pre_get_posts( $pieces, $query ) {
global $wpdb;
if ($query->is_main_query() && ( $orderby = $query->get('orderby') ) ) {
$order = strtoupper( $query->get('order') );
if ( !in_array( $order, array('ASC', 'DESC') ) ) {
$order = 'ASC';
switch ($orderby) {
case 'reservation_date':
$pieces[ 'join' ] .= " LEFT JOIN $wpdb->postmeta wp_rd ON wp_rd.post_id = {$wpdb->posts}.ID AND wp_rd.meta_key = 'reservation_date'";
$pieces[ 'orderby' ] = "STR_TO_DATE( wp_rd.meta_value,'%d.%m.%Y' ) $order, " . $pieces[ 'orderby' ];
break;
}
}
return $pieces;
}
}
}
这不起作用,因为我正在处理字符串。
幸运的是,我的日期(当有人选择它们时)已经按从低到高排序。它们存储在$custom['reservation_date'] 数组中,其中$custom = get_post_custom($post->ID)。所以我可以像$custom['reservation_date'][0] 一样得到它们。
我也可以分开第一次约会
preg_match('/^(.+?),/', $custom['reservation_date'][0], $matches);
如果只有一个日期,没有逗号,我可以把它们弄出来:
$first_date = (!empty($matches)) ? $matches[0] : $custom['reservation_date'][0];
现在困扰我的是如何在我的自定义查询中使用它?目前排序是在meta_valuereservation_date(字符串)上完成的。我该如何制作,以便我可以根据这些第一次日期进行排序?
假设我有这样的日期:
19.11.2015, 20.11.2015
28.11.2015
14.11.2015, 15.11.2015
13.11.2015
当我点击按升序对它们进行排序时,我想得到
13.11.2015
14.11.2015, 15.11.2015
19.11.2015, 20.11.2015
28.11.2015
再次单击该列将使它们按降序排列
28.11.2015
19.11.2015, 20.11.2015
14.11.2015, 15.11.2015
13.11.2015
感谢任何帮助。
【问题讨论】:
-
不能那样做。我拥有的 Datepicker(从中获取我的日期)将条目存储为字符串,而不是数字。我的插件中的所有东西都已经可以工作了,除了这个。
-
我可能会构建一个自定义元值,我可以从中对其中包含数字的排序,然后我可以使用
pre_get_posts解决方案。 -
我只是从教程中复制了那部分,我的sql知识基本上不存在:S这就是为什么我在这里寻求任何帮助和指导
-
我会看看我能做什么,但我已经创建并运行了所有东西(前端和后端),排序只是我想添加的一个功能(除非客户要求,否则不是必需的)。我不想把这一切都搞砸了。
-
multidatespickr.sourceforge.net 添加到 jquery-ui
标签: php mysql wordpress sorting