2017-07-27 61 views
0

我做了ACF插件組與文件下載。在組中我有「文件1」,「文件2」等字段。 我想顯示所有附加文件到頁面。可以顯示屬於組的所有字段?我嘗試使用基本代碼,但在這種情況下,我只有一個文件。顯示整個字段從組(文件+ ACF)

如何添加迭代到這個或顯示所有字段?

<?php 

$file = get_field('attachment_1'); 

if($file): 

    // vars 
    $url = $file['url']; 
    $title = $file['title']; 
    $caption = $file['caption']; 

    if($caption): ?> 

     <div class="wp-caption"> 

    <?php endif; ?> 

<ul> 
     <li><a href="<?php echo $url; ?>" title="<?php echo $title; ?>"> 

     <span><?php echo $title; ?></span> 

    </a> 
     </li> 
<ul> 

    <?php if($caption): ?> 

      <p class="wp-caption-text"><?php echo $caption; ?></p> 

     </div> 

    <?php endif; ?> 

<?php endif; ?> 
+0

這取決於你如何設置自定義字段,例如,你在轉發器中的「File1」,「File2」等字段或必須創建一個單獨的字段foreach?該組還有其他領域嗎?讓我們知道自定義字段組的結構,以便我們可以幫助:-) – FluffyKitten

+0

@FluffyKitten我創建了組 - 「PDF」。在這個組中,我有單獨的字段「文件1」,「文件2」,「文件3」,「文件4」,「文件5」。還有一個聲明字段,其中包含如何附加文件的信息標題。 我想顯示此組中的所有字段。 – Pat

+0

下面的答案有用嗎?還是需要更多幫助? – FluffyKitten

回答

1

您的所有領域都設立個體,它不只是一個通過相同類型(即只是你的文件中的字段)的所有字段的數組循環的問題。

有可能爲你工作的幾種方式:

選項1. 如果所有文件中的字段名遵循相同的命名模式,並依次命名爲,你可以循環使用名稱。

例如,假設你的字段命名爲attachment_1高達attachment_5:通過現場的數組

$statement = get_field('name_of_your_statement_field'); 
//do whatever you need to with $statement 

for ($i=1; $i<=5; $i++){ 
    //use the number from the loop to find the file by name 
    $file = get_field('attachment_'.$i); 
    if($file){ 
     // display file details as appropriate 
    } 
} 

選項2. 如果文件字段名稱不遵循同樣的模式,你可以循環名。

例子:

$statement = get_field('name_of_your_statement_field'); 
//do whatever you need to with $statement 

// Create an array with the field names of all your files 
// N.B. This also lets you specify the order to process them 
$file_fieldnames = array('file_1', 'file2', 'another_file'); 

foreach ($file_fieldnames as $fieldname) { 
    $file = get_field($fieldname); 
    if($file){ 
     // display file details as appropriate 
    } 
} 

選項3如果你想通過郵局/網頁上的所有字段循環,你可以保存域到一個數組。

這看起來似乎是最通用的方法,但它很複雜,因爲您不知道每個字段的類型以便知道如何處理和顯示它們......您首先必須弄清楚它是什麼字段類型。您可以通過名稱來完成此操作(與上面類似),或者您可以嘗試通過檢查字段內容來識別每個字段。

請注意,檢查字段內容是非常危險的,因爲還有其他類型的字段可能具有相似的特徵(例如文件不是唯一可以有url的類型),所以我不會建議這種策略,除非你是100%肯定你永遠不會改變字段組或添加另一個字段組到帖子/頁面。

實施例:

$fields = get_fields(); 
foreach ($fields as $fieldname => $content) { 
    if (is_string ($content)){ 
     // display the string 
    } 
    else if (is_array($content) && $content['url']) { 
     // then you could assume its a file and display as appropriate 
    } 
} 

注意,沒有該代碼的被測試。但是,它應該讓您瞭解每個選項背後的邏輯,以便您可以決定哪些適合您。基於新的代碼提供

UPDATE:

請參見下面的根據您的jsfiddle代碼。我忽略了文件列表之外的標題,因爲它沒有任何意義 - 每個文件都可以有自己的標題。

<?php 

for ($i=1; $i<=5; $i++){ 
    //use the number from the loop to find the file by name 
    $file = get_field('attachment_'.$i); 
    if($file){ 
     $url = $file['url']; 
     $title = $file['title']; 
     $caption = $file['caption']; 
     // now display this file INSIDE the loop so that each one gets displayed: 
     ?> 
     <li> 
      <a href="<?php echo $url; ?>" title="<?php echo $title; ?>" target="_blank"> 
      <span><?php echo $title; ?></span> 
      </a> 
      <?php if($caption): ?> 
       <p class="wp-caption-text"><?php echo $caption; ?></p> 
      <?php endif; ?> 
     </li> 
     <?php 
    } // end if 
} // end for loop 
?> 
<ul> 

如果你瞭解陣列,我建議你添加的文件細節到一個數組,又做了第二循環顯示文件......不過我猜你不精通基本編碼結構,因爲你不懂循環,所以我試圖保持簡單。我強烈建議你做一些關於編程基礎的教程,如果你正在嘗試編寫代碼。