2016-02-27 67 views
1

我使用高級自定義字段親來存儲和顯示有關房地產銷售日期的信息。這些保存在中繼器字段中,字段中的每一行都有一個開始時間,結束時間和日期。我需要在中繼器字段行中顯示按日期排序的信息。目前它是按修改日期排序的。我嘗試了幾種解決方案,但似乎沒有任何工作需要我做。高級自定義字段WordPress的中繼器字段排序依據日期

這是我目前:

<?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次,根本不按日期排序,如果沒有輸入日期(只需要默認銷售日期待定),則會引發錯誤。

任何幫助非常感謝。

+0

爲什麼你要傳遞''orderby'=>'modified',order =>'DESC''? – Kenney

+0

只是一般格式來啓動WP_Query並拉出所有帖子。 – Xype

+0

由於它是中繼器字段中的子字段,因此無法按WP_Query數組內的$ key和元數字順序進行排序。 – Xype

回答

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>"; 
} 
+0

嘗試這個我只是得到噸錯誤,不支持的運營商等。 – Xype

+0

修正了錯別字。 – Kenney

+0

錯別字不是問題,我已經修復了這些問題,在拼寫錯誤上沒什麼大不了的。但是我得到這個致命錯誤:[]運算符不支持字符串。與$ order [] = $ row ['es-date']相關聯 – Xype

-1

我有一個日曆同樣的問題。有沒有解決方案,以正確的方式與repater字段做到這一點。做到這一點的最佳方式是在隱藏帖子類型和關係字段中使用自定義字段。

因爲任何PHP解決方案都不能執行。

在自定義字段「日期」和第二個「發佈關係」中創建自定義帖子類型「銷售日期」。 然後從帖子類型「銷售日期」中選擇所有帖子通過元關鍵字「日期」與關係字段您從非隱藏帖子類型中獲取數據。

+0

具有日期的ACF字段的自定義帖子類型將工作。我讓它在客戶端上運行。 – Aibrean

+0

但ACF Repeater Fied中的ACF字段不適用於排序。在最好的情況下,它不起作用。之間有差別。 – Skrabbel

+0

你所做的只是按元鍵排序。這並不難。例如:https://www.advancedcustomfields.com/resources/orde-posts-by-custom-fields/。作爲自定義帖子類型 - 沒有問題。作爲中繼器 - 不起作用。 – Aibrean

相關問題