duanliaoyin3171 2015-03-09 20:43
浏览 61
已采纳

按ACF Datepicker排序WP_Query

I have a “Upcoming Events” page, and a “Past Events” page. Each event has a custom field called “event_date”.

I want to create a loop that displays all of the events greater than today. I've taken a look through these articles, but couldn't get it to work: http://support.advancedcustomfields.com/forums/topic/how-do-i-filter-and-sort-event-posts-with-start-and-end-date/

https://wordpress.org/support/topic/plugin-advanced-custom-fields-sorting-by-date-picker

wordpress advanced custom fields order posts by date-picker

From what I’ve gathered in the three links above, I would put this in my functions.php file:

    // CREATE UNIX TIME STAMP FROM DATE PICKER
function custom_unixtimesamp ( $post_id ) {
    if ( get_post_type( $post_id ) == 'event_type' ) {
    $event_date = get_post_meta($post_id, 'event_date', true);

        if($event_date) {
            $dateparts = explode('/', $event_date);
            $newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2])));
            update_post_meta($post_id, 'unixstartdate', $newdate1  );
        }
    }
}
add_action( 'save_post', 'custom_unixtimesamp', 100, 2);

Then I would add something like this to my page template:

<?php 
$today = time();
$args = array(
        'post_type' => 'event_type',
        'posts_per_page' => 5,
        'meta_query' => array(
            array(
            'key' => 'unixstartdate',
            'compare' => '>=',
            'value' => $today,
            )
        ),
        'meta_key' => 'event_date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
    );

$query = new WP_Query( $args );
$event_type = $query->posts;
?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

Right now that’s not turning up any results. My post-type is called “event_type”, and the key is “event_date”.

Any thoughts on where I’m going wrong?

  • 写回答

3条回答 默认 最新

  • doushan1157 2015-03-10 18:20
    关注

    I found a solution here thanks to svsdnb.

    https://wordpress.org/support/topic/query-date-array-to-display-future-events-only

    Instead of having to convert the timestamp in functions.php, there is a way to do this specifically with ACF where you use

    current_time('Ymd')
    

    instead of

     $today = date ('Ymd')
    

    Here's what I've ended up with (and it seems to be working, and includes events that happen today):

    <?php 
    $today = current_time('Ymd');
    $args = array(
        'post_type' => 'event_type',
        'post_status' => 'publish',
        'posts_per_page' => '0',
        'meta_query' => array(
            array(
                'key' => 'event_date',
                'compare' => '>=', // Upcoming Events - Greater than or equal to today
                'value' => $today,
            )
        ),
        'meta_key' => 'event_date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
        );
    
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动