2017-06-06 6 views
-1

Ich verwende erweiterte benutzerdefinierte Felder (ACF). Ich möchte das ACF-Repeater-Feld the_sub_field('feature_image_post'); nicht anzeigen, wenn das Feld leer ist. Ich habe das Feld in ein Div eingepackt und eine Anzeige = none mit CSS geschrieben, wenn das Feld leer ist, aber ich bin mir sicher, dass es einen besseren Weg dafür gibt. Meine Logik scheint nicht zu funktionieren.Wie erstelle ich eine Bedingung, die kein Feld anzeigt, wenn das Feld leer ist?

<?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; 

Antwort

1

Hier ist keine else-Anweisung erforderlich. Wenn das Feld nicht festgelegt wurde, zeigen Sie einfach nichts an.

Mein Ansatz wäre get_sub_field() zu verwenden und das Ergebnis als Teil der Bedingung einer Variablen zuzuordnen.

Der Standard-Rückgabewert für ein Bild in ACF ist ein Array von Werten, also gehe ich davon aus, dass es das ist, was Sie haben.

Beispiel:

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>'; 
} 

Ein letzter Punkt zu erhöhen, ist der Unterschied zwischen get_sub_field() und the_sub_field(). In Ihrem ursprünglichen Code haben Sie versucht, the_sub_field() zu echo. get_... wird einen Wert zurückgeben, während the_... es ausgeben wird, echo in diesem Zusammenhang redundant.

+0

Definitiv ein guter Punkt! Ich werde es mir ansehen – 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>'; 
} 

und das ist es. In diesem Fall, in dem get_sub_field('feature_image_post') leer ist, wird nur das ganze Teil übersprungen.

so weit ich weiß - the_ in ACF bedeutet, dass es die Daten anzeigen, so dass Sie nicht vorher echo benötigen.

und bitte überprüfen Sie immer, ob Sie Ihre echo mit ; geschlossen haben, denn im Beispiel haben Sie nicht.

+0

Verstanden, also brauche ich eine elseif-Anweisung, um eine andere Bedingung zu erstellen? Sollte mein Code funktionieren? – Mariton

+1

Der obige Code funktioniert, um zu überprüfen, ob es diesen Wert gibt, wenn nicht, dann einfach überspringen und nichts anzeigen. Sie können natürlich 'else {} 'verwenden, um etwas anderes anzuzeigen, wenn kein Bild vorhanden ist. 'elseif {}' wenn Sie eine andere Bedingung haben. Wenn die Bedingung nicht damit verbunden ist, dass die erste Bedingung nicht vorhanden ist, dann wird nur eine weitere separate 'if {} '. – Angie

Verwandte Themen