kulturbanause Blog

Responsive Design, WordPress, Konzeption, HTML, CSS, JS & UX/UI …

WordPress: Benutzerdefinierte Felder (Custom Fields) nur dann ausgeben wenn Werte eingetragen wurden

In WordPress besteht die Möglichkeit Beiträge durch Zusatzinformationen zu ergänzen. Das geschieht unter anderem über die so genannten Benutzerdefinierten Felder. Hierbei wird zunächst einmal ein Name (auch Schlüssel genannt) festgelegt. Diesem Namen können anschließend verschiedene Werte zugewiesen werden, die dann wiederum im Theme ausgegeben werden können. Nun kann es vorkommen, dass dieser Wert in ein weiteres Code-Snippet - z.B. einen img- oder a-Tag eingebunden werden soll. Wird nun das Benutzerdefinierte Feld nicht ausgefüllt, so kommt es zu Fehldarstellungen auf der Seite. Wie Ihr dieses Problem umgeht und Eingabefehler verhindert, möchte ich in diesem Beitrag kurz erläutern.

Workshops und Seminare von kulturbanause

Visual Prototyping, Responsive Design, CSS Grid & Flexbox, Sketch, Adobe XD …

Jetzt Frühbucher-Rabatte sichern!

Beispiel

Ich erkläre die Funktion am besten einmal an einem konkreten Beispiel: Für einen Blog mit Buchrezensionen habe ich ein Benutzerdefiniertes Feld für die ISBN-Nummer angelegt. Der "Name" war in diesem Fall "ISBN" und als "Wert" konnte der Kunde die individuelle ISBN-Nummer des rezensierten Buches angeben.

Ansicht der Benutzerdefinierten Felder in WordPress

Im Theme habe ich nun den "Wert", also die eingetragene ISBN-Nummer ausgelesen und in den vorgegebenen String eines Shop-Links integriert. Somit konnte unter jeder Buchrezension ein Link zum Online-Shop integriert werden. Das Produkt wurde dann über die ISBN-Nummer eindeutig identifiziert.

Nun kann es aber vorkommen, dass der Kunde vergisst die ISBN-Nummer einzutragen. Oder aber der Artikel ist im Shop nicht vorhanden. In einem solchen Fall muss sichergestellt werden, dass der Button zum Online-Shop nur dann angezeigt wird, wenn innerhalb von WordPress das Benutzerdefinierte Feld auch einen Wert erhalten hat. Anderenfalls hätten wir einen toten Link.

Wert des Feldes in Variable speichern und ausgeben

Mit dem folgenden Code löst ihr dieses Problem. Zunächst speichert ihr den "Wert" des Benutzerdefinierten Feldes in eine beliebige Variable.


<?php $beliebige_variable = get_post_meta($post->ID, 'name_des_benutzerdefinierten_feldes', true); ?>

Anschließend kann der Inhalt im Theme ausgegeben werden.


<?php echo $beliebige_variable; ?>

Abfragen ob das Feld ausgefüllt wurde

Um den Wert nur dann auszugeben wenn auch etwas eingetragen wurde, prüfen wir ob der Inhalt ungleich "leer" ist. Sofern das der Fall ist wird die Ausgabe ausgeführt. Anderenfalls passiert in diesem Beispiel nichts.


<?php $beliebige_variable = get_post_meta($post->ID, 'name_des_benutzerdefinierten_feldes', true); ?>

<?php if(get_post_meta($post->ID, 'name_des_benutzerdefinierten_feldes', true) != '') : ?>
  <?php echo $beliebige_variable; ?>
<?php endif; ?>

Der Code inkl. echter Werte sah in meine Fall etwa so aus:


<?php $isbn = get_post_meta($post->ID, 'ISBN', true); ?>
      
<?php if(get_post_meta($post->ID, 'ISBN', true) != '') : ?>
  <a href="http://www.url-des-shops.com/products/<?php echo $isbn; ?>/details/" target="_blank" class="button">Artikel kaufen</a>
<?php endif; ?>

Eine Alternative bereitstellen, wenn das Feld leer ist

Mit einer simplen If-Else-Abfrage könnt ihr eine Alternative bereitstellen, wenn das Feld nicht ausgefüllt wurde. Der Aufbau sieht dann so aus:


<?php
  if ($beliebige_variable == true) {
    echo "Das Feld wurde ausgefüllt";
  } else {
    echo "Das Feld ist leer";
  }
?>     

Jetzt bist du gefragt!

Hast du Anregungen, Ergänzungen, einen Fehler gefunden oder ist dieser Beitrag nicht mehr aktuell? Dann freuen wir uns auf deinen Kommentar.

Du kannst diesen Beitrag natürlich auch weiterempfehlen. Wir sind dir für jede Unterstützung dankbar!

Unterstützung bei WordPress-Projekten

Unsere WordPress Agentur ist auf die Entwicklung maßgeschneiderter WordPress-Themes und -Websites spezialisiert. Wenn du Unterstützung bei der Planung, Gestaltung und Entwicklung eines Projekts benötigst, helfen wir gerne weiter.
WordPress-Leistungsangebot →

Das könnte dich auch interessieren

16 Kommentare

  1. Matthias Petri

    Verfasst am 18. August 2011 um 9:04 Uhr.

    Hallo Jonas,

    ja, das stimmt, benutzerdefinierte Felder sind wirklich sehr hilfreich. Wir nutzen sie auch in unseren Blogprojekten. Hier mal ein Beispielartikel, indem gleich zwei benutzerdefinierte Felder aktiv sind – 1. die Zuordnung der passenden DVD-Empfehlung und 2. die Quizfrage: http://www.photoshoptutorials.de/2011/08/10/erstellung-einer-portfolio-webseite-im-grunge-stil-mit-photoshop/

  2. Clemens Plainer

    Verfasst am 18. August 2011 um 9:17 Uhr.

    Hallo,
    Ich würde die „Leer-Abfrage“ anders lösen. Für so etwas existiert ja die Funktion empty().

    if ( !empty($beliebige_variable) ) {

    echo $beliebige_variable; }

    Ist schöner, sauberer und schneller ;-)
    Lg Clemens

    • Jonas Hellwig

      Verfasst am 18. August 2011 um 10:21 Uhr.

      @Clemens: Vielen dank für den Hinweis! Es ist in der Tat schöner so :)

    • Jonas Hellwig

      Verfasst am 19. August 2011 um 8:19 Uhr.

      @Clemens: Ich muss mich doch leicht korrigieren. Der Nachteil ist natürlich, dass die Variable vorher schon definiert werden muss. Will ich Code vor dem eigentlichen Benutzerdefinierten Feld eingeben, ist es weniger praktisch.

      Ich hatte gerade vereinfacht abgebildet ein solches Konstrukt:

      Datum | Komma (soll aber nur ausgegeben werden wenn Ort ausgefüllt ist) | Ort

  3. Micha

    Verfasst am 19. Oktober 2011 um 20:02 Uhr.

    Toller Artikel. Danke dafür! Frage: Wenn ich die „Abfrage ob ein Feld leer ist“ noch etwas erweitern möchte, nämlich mit Else. Wie mache ich das am einfachsten. Also er soll nicht nur keinen HTML-Code erzeugen wenn das Feld leer ist, sondern Alternativ Code-X anzeigen!?

    • Jonas Hellwig

      Verfasst am 20. Oktober 2011 um 8:28 Uhr.

      @Micha: Meinst du so eine Lösung?

      <?php $isbn = get_post_meta($post->ID, 'ISBN', true); ?>
      <?php if(get_post_meta($post->ID, 'ISBN', true) != '') { ?>

      <a href="http://www.url-des-shops.com/products/<?php echo $isbn; ?>/details/" target="_blank" class="button">Artikel kaufen</a>

      <?php }
      else { ?>

      Dieses Produkt ist im Shop leider nicht vorhanden.

      <?php } ?>

  4. André

    Verfasst am 5. April 2013 um 4:20 Uhr.

    Hallo Jonas,

    vielen Dank für den Beitrag – ist ja schon eine Weile her.
    Eine Frage zum Verständnis dazu: Wieso diese Dopplung der get_post_meta Funktion? Tatsächlich funktioniert es nur so..

    Danke und Gruß
    André

  5. Peter

    Verfasst am 1. Juni 2013 um 9:51 Uhr.

    Hallo,
    ich nutze für die Erstellung Magic Field, was auch super funktioniert. da ich kein PHP-Experte bin, bräuchte ich dazu etwas Hilfe…
    Die einfache Ausgabe erfolgt hier so:

    was auch super funktioniert.
    Ich möchte aber, dass wenn das Feld ausgefüllt wurde, im Frontend folgendes angezeigt wird:
    Manufacturer: „Inhalt des Ben. Feldes“
    Wurde nichts angegeben, soll an dieser Stelle auch nichts angezeigt und der nächste Punkt einer ellenlangen Aufzählung abgefragt werden u.s.w.
    Probiere nun schon seit Tagen herum und finde die Lösung nicht.
    Wäre für Hilfe und Denkanstöße sehr dankbar
    Gruß

  6. Sven Budak

    Verfasst am 11. September 2014 um 9:56 Uhr.

    Ich würde gerne wissen ob man bei den Benutzerdefinierten Feldern nicht auch den Name quasi als Title in einem tag ausgeben lassen kann und den wert quasi als Beschreibungstext in einem tag. Da man auf einfache weise den Title anpassen können möchte, sollte man jedoch nicht den namen des benutzerdefinierten feldes nutzen müssen… Da dieser ja die Überschrift vom Text ist und wenn man diesen Ändert nichts mehr gefunden wird was ausgegeben werden kann. ;) Kann man das nicht auch per ID oder sowas ausgeben lassen? Habe auch keine möglichkeit gefunden den „Namen“ ausgeben zu lassen…

  7. mike

    Verfasst am 4. Mai 2016 um 12:56 Uhr.

    Hallo !
    Danke für den Beitrag ….
    Besteht eigentlich die Möglichkeit ein Benutzerdefiniertes Feld von vorne rein jedem Beitrag an zu hängen ?
    Also das wenn ich einen Beitrag schreibe ich nicht jedes mal dort den Namen des Feldes angeben muss sondern der Name des Feldes bereits dort steht? Da das Textfeld immer den gleichen namen hat bei mir und ich mir somit eventuelle Fehler verhindern könnte.
    Danke im voraus
    Mike

  8. Mike Zin

    Verfasst am 2. Dezember 2016 um 22:10 Uhr.

    Hallo,

    weiß jemand wie man bei Custom Fields die Role bestimmen (Autor, Redakteuer).
    Beim Role User plugin werden diese Felder nicht angezeigt.

    Gruß Mike

  9. Ricardo

    Verfasst am 13. Januar 2017 um 22:42 Uhr.

    Hallo,
    gibt es eine Möglichkeit, zwei Custom Fields über eine Bedingung zu verknüpfen?

    Wie z.B. in Feld 1 soll es möglich sein ein Header/Hero Image zu erstellen.

    In Feld 2 soll es möglich sein Header-Slider zu erstellen wenn in Feld 1 kein Image hinterlegt wird.

Kommentar verfassen

Dieser Blog lebt vom Feedback der Besucher! Also los, mach mit!
Bitte habe Verständnis dafür, dass Kommentare die mit dem Inhalt dieses Beitrags nichts zu tun haben, gelöscht werden.