高级自定义字段Wordpress Repeater字段按日期排序

时间:2016-02-27 19:09:34

标签: php wordpress date advanced-custom-fields

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

这就是我目前的情况:

<?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次,根据日期没有排序,如果没有输入日期(需要默认为销售日期TBA),则会抛出错误。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

请注意,您的集成不完整,通过两个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>";
}

答案 1 :(得分:-1)

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

因为任何PHP解决方案都不太合适。

制作自定义帖子类型&#34;销售日期&#34;这是一个自定义字段&#34; date&#34;和第二个&#34;邮政关系&#34;。 然后从Post Type&#34; Sales Dates&#34;中选择。所有帖子按元键排序&#34;日期&#34;使用关系字段,您可以从非隐藏的帖子类型中获取数据。