高级自定义字段 Wordpress 转发器字段按日期排序

Advanced Custom Fields Wordpress Repeater Field Order By Date

我正在使用高级自定义字段 pro 来存储和显示有关房地产销售日期的信息。这些保存在转发器字段中,字段中的每一行都有开始时间、结束时间和日期。我需要在转发器字段行中显示按日期排序的信息。目前它是按修改日期排序的。我尝试了几种解决方案,但 none 似乎可以满足我的需要。

这是我目前拥有的:

<?php
$latestes = new WP_Query(
    array(
        'post_type' => 'estate-sales',
        'post_status' => 'publish',
        'posts_per_page' => 10,
        'orderby' => 'modified',
        'order' => 'DESC'
        )
    );

while ( $latestes->have_posts() ) : $latestes->the_post();
    echo '<li class="frontpage-esale"><a href="';
    the_permalink();
    echo '">';
    the_title();
    echo '&nbsp;';
    $rowses = get_field('estate_sale_dates');
    $first_row = $rowses[0];
    $first_row_date = $first_row['es-date'];
    $first_row_start = $first_row['es-start-time'];
    $first_row_end = $first_row['es-end-time'];
    echo '&nbsp;-&nbsp;';
    if ($first_row_date) {
        echo date('F j, Y',strtotime($first_row_date));
    }
    else {
    echo 'Sale Dates TBA';
    }
endwhile;
wp_reset_query();
?>

寻找解决方案时最常见的答案是做这样的事情:

$latestes = new WP_Query(
    array(
        'post_type' => 'estate-sales',
        'post_status' => 'publish',
        'posts_per_page' => 10,
        'orderby' => 'modified',
        'order' => 'DESC'
        )
    );

while ( $latestes->have_posts() ) : $latestes->the_post();
$repeater = get_field('estate_sale_dates');
    foreach( $repeater as $key => $row )
    {
        $column_id[ $key ] = $row['es-date'];
    }
    array_multisort( $column_id, SORT_ASC, $repeater );
    foreach( $repeater as $row ) {
    echo '<li class="frontpage-esale"><a href="';
    the_permalink();
    echo '">';
    the_title();
    echo '&nbsp;';
    $rowses = get_field('estate_sale_dates');
    $first_row = $rowses[0];
    $first_row_date = $first_row['es-date'];
    $first_row_start = $first_row['es-start-time'];
    $first_row_end = $first_row['es-end-time'];
    echo '&nbsp;-&nbsp;';
    if ($first_row_date) {
        echo date('F j, Y',strtotime($first_row_date));
    }
    else {
    echo 'Sale Dates TBA';
    }
    }
endwhile;
wp_reset_query();
?>

但是,当我尝试这样做时,它会列出每次销售 3 次,根本不按日期排序,如果没有输入日期(只需默认销售日期待定),它就会抛出错误。

非常感谢任何帮助。

请注意,您的集成未完成,有两个 get_field('estate_sale_dates'); 表示,并且名称 $first_row 在迭代所有这些时不合适。没有排序,你基本上就是在做

  $repeater = get_field( 'estate_sale_dates' );
  ...
  foreach ( $repeater => $row_that_isnt_used )
  {
     $rowses = get_field( 'estate_sale_dates' );
     $first_row = $rowses[0]; 
  }

我想这就是您想要的:

<?php
while ( $latestes->have_posts() ) {
                $latestes->the_post();
    echo '<li class="frontpage-esale"><a href="';
    the_permalink();
    echo '">';
    the_title();
    echo '</a> ';

    if ( ! count( $sale_dates = get_field('estate_sale_dates') ) )
        echo '<span>Sale Dates TBA</span>';
    else
    {
        // $order = array_column( $sale_dates, 'es-date' ): (php 5.5+)
        foreach( $sale_dates as $ignore => $row )
            $order[] = $row['es-date'];

        array_multisort( $order, SORT_ASC, $sale_dates );

        echo "<ul>";
        foreach( $sale_dates as $row ) {
            $date  = $row['es-date'];
            $start = $row['es-start-time'];
            $end   = $row['es-end-time'];
            echo "<li>" . date('F j, Y',strtotime($row_date)) . " $start-$end</li>";
        }
        echo "</ul>";
    }

    echo "</li>";
}

我的日历也有同样的问题。没有解决方案可以使用 repater 字段以正确的方式执行此操作。最好的方法是在隐藏的 post 类型和关系字段中使用自定义字段。

因为任何 PHP 解决方案都是低效的。

创建自定义 Post 在此自定义字段中键入 "Sales Dates" "date" 和第二个 "Post Relation"。 然后 select from Post 输入 "Sales Dates" all Posts order by meta key "dates" 与关系字段你从未隐藏的数据中获取数据 post类型。