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.

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

Geschrieben von Jonas

Benutzerbild

Jonas ist Gründer der Agentur kulturbanause und des kulturbanause Blogs. Er arbeitet an der Schnittstelle zwischen UX/UI Design, Frontend und Redaktion und hat zahlreiche Fachbücher und Video-Trainings veröffentlicht. Jonas Hellwig ist regelmäßig als Sprecher auf Fachveranstaltungen anzutreffen und unterstützt mit Seminaren und Workshops Agenturen und Unternehmen bei der Planung, der Gestaltung und der technischen Umsetzung von Web-Projekten.

Jonas Hellwig bei Xing

Feedback & Ergänzungen – 15 Kommentare

  1. Ricardo
    schrieb am 13.01.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.

    Antworten
    • Jonas Hellwig
      schrieb am 16.01.2017 um 07:08 Uhr:

      Am einfachsten wirst du es mit ACF hinbekommen.

      Antworten
  2. Mike Zin
    schrieb am 02.12.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

    Antworten
  3. mike
    schrieb am 04.05.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

    Antworten
    • Jonas Hellwig
      schrieb am 04.05.2016 um 13:00 Uhr:

      Hallo Mike, ich würde in diesem Fall wahrscheinlich das Plugin Advanced Custom Fields einsetzen. Wenn du automatisch Werte in das Feld schreiben möchtest, hilft vielleicht dieser Beitrag hier.

      Antworten
  4. Sven Budak
    schrieb am 11.09.2014 um 09: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…

    Antworten
  5. Mit benutzerdefiniertem Feld das Änderungsdatum anzeigen › themenfreund
    schrieb am 01.06.2014 um 16:59 Uhr:

    […] bei meinen früheren Recherchen bin ich auf einen Artikel von Jonas gestoßen, in dem er erklärt, wie man die Benutzerdefinierten Felder dafür nutzt, um Inhalte in einem […]

    Antworten
  6. Peter
    schrieb am 01.06.2013 um 09: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ß

    Antworten
  7. André
    schrieb am 05.04.2013 um 04: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é

    Antworten
  8. Micha
    schrieb am 19.10.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!?

    Antworten
    • Jonas Hellwig
      schrieb am 20.10.2011 um 08: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 } ?>

      Antworten
  9. Jonas Hellwig
    schrieb am 19.08.2011 um 08: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

    Antworten
  10. Jonas Hellwig
    schrieb am 18.08.2011 um 10:21 Uhr:

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

    Antworten
  11. Matthias Petri
    schrieb am 18.08.2011 um 09: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/

    Antworten

Kommentar zu dieser Seite

Wir freuen uns über Anregungen, Ergänzungen oder Hinweise zu Fehlern. Wir lesen jeden Eintrag, veröffentlichen aber nur, was den Inhalt sinnvoll ergänzt.

WordPress-Projekte mit kulturbanause

Wir wissen wovon wir reden. Wir setzen WordPress seit über 10 Jahren erfolgreich ein und realisieren maßgeschneiderte Websites auf Basis dieses großartigen CMS.

WordPress-Leistungsangebot →

Schulungen von kulturbanause

Wir bieten Seminare und Workshops zu den Themen Konzept, Design und Development. Immer up-to-date, praxisnah, kurzweilig und mit dem notwendigen Blick über den Tellerrand.

Übersicht Schulungsthemen →