【问题标题】:Wordpress Events Orderby Meta Value DateWordpress 事件 Orderby Meta Value Date
【发布时间】:2014-07-25 13:27:01
【问题描述】:

我在获取参数数组以在 Wordpress 中按日期对事件列表进行排序时遇到了一些问题。我在 Stack Overflow 和其他地方找到了几个建议的解决方案,但经过大量试验和错误后,似乎没有一个解决方案有效。

这没什么花哨的,它应该比这容易得多。也许它更容易,我只是想多了?非常感谢任何帮助。

我在帖子中使用插件http://www.advancedcustomfields.com 有一个自定义日期字段,数据库中的字段名称是“event_date”。

我尝试了以下各种形式:

$args = array(
     'post_status'       => 'publish',
     'meta_key'          => 'event_date',
     'orderby'           => 'meta_value_num',
     'order'             => 'DESC',
     'posts_per_page'    => 6,
     'paged'             => $paged,
     'post__not_in'      => $exclude_array
);

$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query($args);

$default_excerpt_length = 250;

还有:

$args = array(
    'post_status'       => 'publish',
    'meta_key'          => 'event_date',
    'meta_value_num'    => time(),
    'meta_compare'      => '>=',
    'orderby'           => 'meta_value_num',
    'order'             => 'DESC',
    'posts_per_page'    => 6,
    'paged'             => $paged,
    'post__not_in'      => $exclude_array
);

$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query($args);

$default_excerpt_length = 250;

还有:

$today = date('Y-m-d');

query_posts(array(
    'post_type'         => 'events',
    'posts_per_page'    => 6,
    'paged'             => $paged,
    'meta_key'          => 'event_date',
    'orderby'           => 'meta_value',
    'order'             => 'DESC',
    'meta_query' => array(
        array(
        'key'        => 'event_date',
        'meta-value' => $value,
        'value'      => $today,
        'compare'    => '>=',
        'type'       => 'CHAR'
        )
    )
));

【问题讨论】:

    标签: php wordpress plugins


    【解决方案1】:

    这最终导致了我需要的解决方案:http://www.advancedcustomfields.com/resources/field-types/date-picker/

    我最终通过该网址将高级自定义字段设置更改为 yymmdd。

    这是我用来查询帖子的:

    $args = array(
      'post_status'       => 'publish',
      'posts_per_page'    => 6,
      'paged'             => $paged,
      'meta_key'          => 'event_date',
      'orderby'           => 'meta_value_num',
      'order'             => 'ASC'
    );
    

    这就是我用来调整页面上日期的视觉输出的:

    <?php
    $source = get_field('event_date');
    $date = new DateTime($source);
    echo $date->format('F j, Y');
    ?>
    

    【讨论】:

    • 我遇到了类似的问题,但我不得不使用 'orderby' => 'meta_value' 而不是 'meta_value_num'。我认为这是因为 ACF 将数据库中的日期存储为字符串而不是数字。
    • @JMac 你是对的,'meta_value' 对我也有帮助,如果你使用自定义字段
    【解决方案2】:

    在搜索了多个类似的帖子后,我从其他各种 SO 帖子的部分内容中汇总了一个解决方案,希望它可以对其他人有所帮助。

    我有一个名为“日期”的自定义元键(我知道命名约定不好),此查询显示未来所有具有自定义“日期”元字段的帖子,按最接近今天的方式排序。

    $args = array(
            'post_type' => 'training-course',
            'posts_per_page' => '-1',
            'meta_key' => 'date',
            'orderby' => 'meta_value',
            'order' => 'ASC',
            'meta_query' => array(
                array(
                    'key' => 'date',
                    'value' => date("Ymd"), // date format error
                    'compare' => '<='
                )                   
             )
        );
    

    【讨论】:

    • 嗨 $args['meta_query']['value'] 必须是 date('Ymd') 而不是 date('YYmmdd')
    猜你喜欢
    • 2013-12-27
    • 2015-12-02
    • 2012-02-06
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    相关资源
    最近更新 更多