【问题标题】:Orderby ACF custom field date don't workOrderby ACF 自定义字段日期不起作用
【发布时间】:2017-07-06 19:32:36
【问题描述】:

我查看了另一个帖子,但我什么也没找到,我从 3 天就开始了:

我想按ASC 的顺序显示 3 个“晚会” 但2018年总是在2017年之前

$auj = date('Ymd');

$queryEvent = new WP_Query(
    array(
    'category_name' => 'evenements',
    'posts_per_page' => 3,
    'meta_key' => 'date_de_fin',
    'orberby' => 'meta_key',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'date_de_fin',
            'value' => $auj,
            'compare' => '>=',
        ),
    )
    )
);

?>

有人有想法吗?

【问题讨论】:

  • date_de_fin 的日期格式是什么,如果不在 Y-m-d 中,则检查此答案。 stackoverflow.com/a/41542520/5019802.
  • 格式是Ymd,我试试你的代码,订单显示是一样的:/
  • 您能否发布更新后的代码以及date_de_fin 的一些示例值。
  • 完成旁边的回声捕获

标签: wordpress date advanced-custom-fields custom-fields


【解决方案1】:

我已更新您的代码。请尝试更新后的查询。

<?php $auj = date('Ymd');

$queryEvent = new WP_Query(
    array(
        'category_name' => 'evenements',
        'posts_per_page' => 3,
        'meta_key' => 'date_de_fin',
        'orberby' => 'meta_value_num', 
        'order' => 'ASC',
        'meta_query' => array(
            array(
                'key'     => 'date_de_fin',
                'value'   => $auj,
                'compare' => '>=',
                'type' => 'DATE'
             ),
        )
    ));
?>

我在 meta_query 中替换了 'orderby' 值并添加了 'type' 参数。

希望对你有帮助。

【讨论】:

  • 您的代码已上线,0 次更改,但感谢您的尝试
  • 您是否安装了任何用于订购帖子的插件?
  • 请在您的“date_de_fin”自定义字段中说明返回或保存格式。
  • Ymd et no 我没有安装插件
【解决方案2】:

由于您的日期格式不是Y-m-d,所以您需要定义自己的 做空逻辑

function wh_posts_orderby($orderby, $query) {
    //Only for custom orderby key
    if ($query->get('orderby') != 'yyyymmdd_date_format')
        return $orderby;
    if (!( $order = $query->get('order') ))
        $order = 'ASC';
    global $wpdb;
    $fieldName = $wpdb->postmeta . '.meta_value';
    return "STR_TO_DATE(" . $fieldName . ", '%Y%m%d') " . $order;
}

add_filter('posts_orderby', 'wh_posts_orderby', 10, 2);

将 ^^above 代码添加到您的活动主题 functions.php 文件中。


现在您可以按日期对帖子进行排序(格式 YYYYMMDD)
$auj = date('Ymd');
$args = [
    'category_name' => 'evenements',
    'posts_per_page' => 3,
    'meta_key' => 'date_de_fin',
    'orberby' => 'yyyymmdd_date_format', //check this line
    'order' => 'ASC',
    'meta_query' => [
        'relation' => 'AND', //added this
        [
            'key' => 'date_de_fin',
            'value' => $auj,
            'compare' => '>=',
            'type' => 'DATE'
        ],
    ]
];
$queryEvent = new WP_Query($args);
if ($queryEvent->have_posts()) :
    /* Start the Loop */
    while ($queryEvent->have_posts()) : $queryEvent->the_post();

    //you post

    endwhile;
endif;

相关回答How do I query posts and use the 'orderby' attribute to order posts in loop according to date 'meta_value'?

希望这会有所帮助!

【讨论】:

【解决方案3】:

我解决了一个 SQL 查询的问题:

   $queryEvent = $wpdb->get_results( 'SELECT * FROM cci_posts INNER JOIN cci_postmeta ON cci_posts.id = cci_postmeta.post_id INNER JOIN cci_term_relationships ON  cci_posts.id = cci_term_relationships.object_id WHERE cci_term_relationships.term_taxonomy_id = 4 AND cci_postmeta.meta_key = "date_de_fin" AND cci_postmeta.meta_value > 20170221 AND cci_posts.post_status = "publish" ORDER BY cci_postmeta.meta_value ASC LIMIT 3', OBJECT );
                        //$queryEvent = new WP_Query($args);
                        ?>
                        <?php if ( $queryEvent ) : ?>

                        <?php /* Start the Loop */ ?>
                        <?php foreach ($queryEvent as $post) {
                          setup_postdata($post); ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2018-10-02
    • 2015-11-04
    • 2021-07-24
    相关资源
    最近更新 更多