2013-07-11 67 views
0

我有一個相當基本的設置與Wordpress高級自定義字段。我需要將額外的字段添加到自定義帖子中,然後在帖子頁面上顯示它們。我有這樣的代碼可以工作,但是當我得到一個有多個複選框選擇的自定義字段時,顯然這個特定字段會拋出「數組」這個詞,因爲它是一個數組。傾銷數組

如何在下面創建此代碼,爲常規字段以及其中包含數組的字段轉儲所有標籤和數據。

$fields = get_field_objects(); 
if($fields) 

{ 
echo '<div class="item-info-custom">'; 
     echo '<dl class="item-custom">'; 
     echo '<dt class="title"><h4>Custom Information</h4></dt>'; 
      foreach($fields as $field_name => $field) 
       { 
        echo '<dt class="custom-label">' . $field['label'] . ': </dt>'; 
        echo '<dd class="custom-data">' . $field['value'] . '</dd>'; 
       } 

     echo '</dl>'; 
echo '</div>'; 
} 

這是我工作的最終代碼:

<?php 

$fields = get_field_objects(); 
if($fields) 

{ 
echo '<div class="item-info-custom">'; 
     echo '<dl class="item-custom">'; 
     echo '<dt class="title"><h4>Custom Information</h4></dt>'; 
      foreach($fields as $field_name => $field) 
       { 
         echo '<dt class="custom-label">' .   $field['label'] . ': </dt>'; 
        echo '<dd class="custom-data">'; 

if (is_array($field['value'])) { 
echo implode(', ', $field['value']); 
} 
else { 
echo $field['value']; 
} 

echo '</dd>'; 
       } 

     echo '</dl>'; 
echo '</div>'; 
} 

?> 
+0

如果字段是數組 - 做一件事情,如果不是 - 做另一件事。 –

+0

也許通過使用is_array函數添加附加條件。如果$ field是一個數組,你添加一個額外的循環 – user

回答

0

你需要做一些類型檢查。您可以使用像is_array()這樣的功能並執行其他邏輯。

例如:

echo '<dd class="custom-data">'; 

if (is_array($field['value'])) { 
    echo implode(', ', $field['value']); 
} 
else { 
    echo $field['value']; 
} 

echo '</dd>'; 
+0

這是我可以工作的人。我確信其他人也是現場,我只是不知道弄清楚。這是我使用的最終代碼。如果您發現任何問題,請告訴我,它似乎按我預期的方式工作。 – OcalaDesigns

+0

太好了。其他人有類似的邏輯。他們還演示了一個遞歸解決方案。但這可能是矯枉過正。 –

+0

謝謝賈森你的時間! – OcalaDesigns

1

根據在$場[「值」]的數組組成,你可以做下列操作之一:

如果它的值,你可以在一個簡單的列表只需將它們與implode一起粘貼在一起。

echo '<dd class="custom-data">' . (is_array($field['value'])?implode(", ", $field['value']:$field['value']) . '</dd>'; 

如果數組包含這樣表示主陣列(標籤和值鍵),您可以創建一個函數來渲染陣列和遞歸調用它,當你遇到一個數組值數據。

<?php 

function showFields($data){ 
echo '<div class="item-info-custom">'; 
     echo '<dl class="item-custom">'; 
     echo '<dt class="title"><h4>Custom Information</h4></dt>'; 
      foreach($fields as $field_name => $field) 
       { 
        echo '<dt class="custom-label">' . $field['label'] . ': </dt>'; 
        if (is_array($field['value'])){ 
         showFields($field['value']); 
        } 
        echo '<dd class="custom-data">' . $field['value'] . '</dd>'; 
       } 

     echo '</dl>'; 
echo '</div>'; 
} 
$fields = get_field_objects(); 
if($fields) showFields($fields); 
+0

謝謝Orangepill的時間! – OcalaDesigns