WordPress: Benutzerdefinierte Felder (Custom Fields) nur dann ausgeben wenn Werte eingetragen wurden
Mit einer simplen PHP-Abfrage, könnt ihr ein Custom Field nur dann ausgeben, wenn auch ein Wert eingetragen wurde.
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.
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="https://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";
}
?>
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.
Am einfachsten wirst du es mit ACF hinbekommen.
Hallo,
weiß jemand wie man bei Custom Fields die Role bestimmen (Autor, Redakteuer).
Beim Role User plugin werden diese Felder nicht angezeigt.
Gruß Mike
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
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.
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…
Hallo Sven, hilft dir dieser Beitrag weiter? How to get all custom fields (name + value)?
[…] 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 […]
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ß
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é
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!?
@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 } ?>
@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
@Clemens: Vielen dank für den Hinweis! Es ist in der Tat schöner so :)
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/