2017-06-06 89 views
-1

我正在使用高級自定義字段(ACF)。如果該字段爲空,我不想顯示ACF中繼器字段the_sub_field('feature_image_post');。如果字段爲空,我將字段封裝在div中,並使用CSS編寫了display = none,但我確信有更好的方法來完成此操作。我的邏輯似乎不起作用。如果字段爲空,如何創建不顯示字段的條件?

<?php 

     // check if the repeater field has rows of data 

     if(have_rows('repeat_field')): 

      // loop through the rows of data 
      while (have_rows('repeat_field')) : the_row(); 

       // display a sub field value 

       echo '<span class="place-name">'; 
        the_sub_field('place_name'); 
       echo '</span>'; 


     if (!empty (get_sub_field('feature_image_post'))) { 

     echo '<div class="post-feature" style="display:block;">'; 
     echo the_sub_field('feature_image_post'); 
     echo '</div>'; 

     } 

     else { 
     echo '<div class="post-feature" style="display:none;">' 
     echo the_sub_field('feature_image_post'); 
     echo '</div>'; 

     } 
      endwhile; 

     else : 

      // no rows found 

     endif; 

回答

1

這裏不需要else語句。如果該字段沒有設置,那麼你根本不顯示任何內容。

我的方法是使用get_sub_field()並將結果作爲條件的一部分分配給變量。

ACF中圖像的默認返回值是一個值的數組,因此我將假設這就是您所擁有的。

實施例:

if ($feature_image_post = get_sub_field('feature_image_post')) { 
    echo '<div class="post-feature">'; 
    printf('<img src="%s" alt="%s" />', esc_url($feature_image_post['url']), esc_attr($feature_image_post['title'])); 
    echo '</div>'; 
} 

最後一點提高是get_sub_field()the_sub_field()之間的差異。在您的原始代碼中,您試圖回顯the_sub_field()get_...將返回一個值,而the_...將輸出它使echo在該上下文中是多餘的。

+0

絕對是一個好點!我會看一看 – Mariton

1
if (! empty(get_sub_field('feature_image_post'))) { 
    echo '<div class="post-feature" style="display:block;">'; 
    the_sub_field('feature_image_post'); 
    echo '</div>'; 
} 

,就是這樣。在這種情況下,get_sub_field('feature_image_post')是空的,它只會跳過整個部分。

據我所知 - 在ACF中的the_意味着它顯示的數據,所以你在這之前不需要echo

並且請經常檢查您是否已經用;關閉了您的echo,因爲在該示例中您沒有。

+0

我明白了,我需要一個elseif語句來創建另一個條件嗎?我的代碼應該工作嗎? – Mariton

+1

上面的代碼將用於檢查是否有該值,如果不是,則跳過並不顯示任何內容。當然,如果沒有特色圖像,您可以使用'else {}'來顯示其他內容。 'elseif {}'如果你還有其他條件可以製作。 如果條件沒有連接到沒有第一個,那麼只是另一個單獨的'if {}'。 – Angie

相關問題