按自定义日期字段对帖子进行排序(非标准日期格式)

时间:2015-01-06 作者:Chris Pink

我继承了一个带有帖子类型课程的网站,该网站有一个自定义字段“日期开始”,一个日期选择器。

不幸的是,开始日期存储为“ddmmyy”,ACF文档暗示此代码与“yymdd”一起工作

现在我无法将所有日期更改为这种格式,因为有很多依赖代码。

那么,我如何让这个查询工作——根据“日期开始”自定义字段按顺序排列帖子?它不适用于作为DESC的订单或作为ASC的订单。输出似乎是随机顺序。

$posts = get_posts(array(
    \'post_type\'     => \'course\',
    \'posts_per_page\'    => -1,
    \'meta_key\'      => \'date-start\',
    \'orderby\'       => \'meta_value_num\',
    \'order\'         => \'DESC\'
));

1 个回复
SO网友:bonger

您可以添加posts_orderby 筛选以翻转meta\\u值:

function wpse174075_posts_orderby( $orderby, $query ) {
    if ( $query->get( \'orderby\' ) != \'ddmmyy_date_format\' ) return $orderby;
    if ( ! ( $order = $query->get( \'order\' ) ) ) $order = \'DESC\';
    global $wpdb;
    $mv = $wpdb->postmeta . \'.meta_value\';
    // Note SUBSTR() position (2nd) arg is 1-indexed.
    return \'CONCAT(SUBSTR(\' . $mv . \', 5, 2), SUBSTR(\' . $mv . \', 3, 2), SUBSTR(\' . $mv . \', 1, 2)) \' . $order;
}

add_filter( \'posts_orderby\', \'wpse174075_posts_orderby\', 10, 2 );
$posts = get_posts(array(
    \'post_type\'     => \'course\',
    \'posts_per_page\'    => -1,
    \'meta_key\'      => \'date-start\',
    \'orderby\'       => \'ddmmyy_date_format\',
    \'order\'         => \'DESC\',
    \'suppress_filters\' => false,
));
remove_filter( \'posts_orderby\', \'wpse174075_posts_orderby\', 10 );

结束

相关推荐

将MENU_ORDER添加到CPT管理页面

我有一个自定义的帖子类型(cpt\\U roundtable),正在尝试向admin页面添加一列,显示每个条目的menu\\u顺序。这是我的职责。php文件。function set_roundtable_columns($columns) { return array( \'cb\' => \'<input type=\"checkbox\" />\', \'title\' => __(\'Title\'),