【问题标题】:Advanced Custom Fields Wordpress Repeater Field Order By Date高级自定义字段 Wordpress 转发器字段按日期排序
【发布时间】:2016-06-10 23:50:19
【问题描述】:

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

这是我目前拥有的:

<?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),它就会引发错误。

非常感谢任何帮助。

【问题讨论】:

  • 你通过'orderby' =&gt; 'modified', order=&gt; 'DESC'的任何原因?
  • 只是通用格式来启动 WP_Query 并拉出所有帖子。
  • 由于它是转发器字段中的子字段,因此在 WP_Query 数组中尝试按 $key 和元数字顺序排序时不起作用。

标签: php wordpress date advanced-custom-fields


【解决方案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>";
}

【讨论】:

  • 尝试这个我得到了大量的错误,不支持的操作符等等。
  • 错别字不是问题,我已经修复了这些,错别字没什么大不了的。但是我收到了这个致命错误:字符串不支持 [] 运算符。与 $order[] = $row['es-date'] 关联
  • 我认为可能有一点被误解了。我需要根据销售日期“es-date”列出每个房地产销售的订单。每个房地产销售都是一个自定义的帖子类型,es-date 是 Estate_sale_dates 转发器字段的子字段。
  • 啊哈,不清楚,谢谢。好吧,那么您不能那样使用“循环”,您需要在此之前对其进行排序。我想你正在寻找order posts by custom fields
【解决方案2】:

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

因为任何 PHP 解决方案都表现不佳。

创建自定义帖子类型“销售日期”,并在此自定义字段“日期”和第二个“帖子关系”。 然后从 Post Type "Sales Dates" 中选择所有 Posts order by meta key "dates" 以及从未隐藏的帖子类型中获取数据的关系字段。

【讨论】:

  • 具有 ACF 日期字段的自定义帖子类型将起作用。我让它在客户网站上运行。
  • 但是 ACF Repeater Fied 中 Date 的 ACF 字段不能用于排序。在最好的情况下,它的性能不佳。有区别。
  • 您所做的只是按元键排序。这并不难。示例:advancedcustomfields.com/resources/orde-posts-by-custom-fields。作为自定义帖子类型 - 没问题。作为中继器 - 不起作用。
  • 你错了!这只有在您有 ACF 日期字段时才有可能。如果您的 ACF 日期字段位于 ACF 转发器字段中,那么这是不可能的。
  • 例如:一位艺术家的巡演有很多日期和地点。日期和位置存储在 ACF 中继器字段中。您将在日历中显示所有日期。这是不可能的。如果你有很多艺术家,有很多巡演,很多日期,当你需要两种带有 ACF 关系字段的帖子类型时,你会在一个列表中订购它。如果将日期存储在 ACF 中继器字段中,则无法对其进行排序而不会造成性能损失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多