WordPress: benutzerdefinierte Felder außerhalb Loops

WordPress-Code

Benutzerdefinierte Felder gehören zum Funktionsumfang von WordPress, wenn ich es richtig in Erinnerung habe, seit mehr als zehn Jahren. Auf jeden Fall waren Sie für mich immer dabei. 🙂

Sie stellen eine sehr interessante Funktion dar, die in meinen Augen viel zu wenig beachtet wird. Ich hoffe, dass ich sie mit diesem Artikel noch ein bisschen mehr ins Rampenlicht bringen kann.

Mit benutzerdefinierten Feldern kann man nämlich zusätzliche Informationen zum eigentlichen Inhalt darstellen.

WordPress: benutzerdefiniertes Feld

Im Admin-Bereich findet man die Eingabemaske für benutzerdefinierte Felder unterhalb der Textbox wo man den Inhalt für Beiträge und Seiten eingibt. Ist diese Eingabemaske nicht sichtbar, dann muss man sie gegebenenfalls rechts oben unter “Optionen” sichtbar machen.

Im Theme, ich lasse mal jetzt die diversen Plugins außen vor, macht man die benutzerdefinierte Felder sichtbar mit dem folgendem Code:

<?php the_meta(); ?>

So weit, so gut. Leider funktioniert das ganze nur innerhalb des Loops oder besser gesagt im Inhaltsbereich, also nicht zum Beispiel im Footer, in der Kopfzeile oder in der Sidebar. Möchte man den Inhalt der benutzerdefinierten Felder auch außerhalb des Loops, dann muss man sich mit dem folgenden Code behelfen:

<?php
global $wp_query;
$postid = $wp_query->post->ID;
echo get_post_meta($postid, 'Zusatztitel', true);
wp_reset_query();
?>

Wen es nicht stört, dass bei Beiträgen und Seiten ohne Inhalte aus den benutzerdefinierten Feldern nichts erscheint, der kann diesen Code-Schnipsel nutzen. Wer aber nicht bei jedem Beitrag oder Seite benutzerdefinierte Felder einsetzt, aber an der entsprechenden Stelle doch einen Text haben möchte, der baut eine zusätzliche “Abfrage” in Form von einem ifelse-Statement auf:

<?php
global $wp_query; $postid = $wp_query->post->ID;
if (get_post_meta($postid, 'Zusatztitel', true)) {
    echo get_post_meta($postid, 'Zusatztitel', true);
    } else {
        echo "Ersatztext";
        }
wp_reset_query();
?>

Was macht das Code-Fragment? Ist ein bestimmtes benutzerdefiniertes Feld samt Inhalt vorhanden, dann wird dieses ausgegeben. Falls nicht, dann wird der Ersatztext eingeblendet.

Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienst­leistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.

Verwandte Beiträge:

8 Kommentare

  1. Ich kenne WordPress ja nun auch schon lange (ungefähr seit Version 1.5), aber mir hat sich nie ganz erschlossen, was man denn nun ganz konkret in diese benutzerdefinierten Felder packt. Wozu genau kann man das nutzen? Ich meine, dein Beispiel ist ja ganz nett – aber das könnte man rein theoretisch auch in das Exzerpt packen. Ich sehe also nicht wirklich, welchen praktischen Nutzen das Ganze hat…

    1. Excerpt ist halt ein Auszug des besagten Artikels, der in ein bis zwei Sätzen den Inhalt wiedergibt. Der je nach Einstellung des RSS-Reader im selbigen anstatt des gesamten Artikels angezeigt wird.

      Mit dem benutzerdefinierten Feld könnte man z. B. eine zusätzliche Überschrift oder Dachzeile umsetzen, die dann über, unter oder neben dem Inhalt auftaucht. Auch diverse Meta-Infos (wichtig z.B. bei Podcasting) werden in Form von benutzerdefinierten Feldern umgesetzt.

    2. Ehrlich gesagt wäre WordPress für mich sogar ohne “Benutzerdefinierte Felder (im folgenden CF = Custom Fields) nahezu nutzlos. Stell dir vor, du betreibst eine Website mit einer Team-Seite. So könntest du z.B. per CFs die jeweilige E-Mail Adresse des Teammitglieds oder/und dessen “Position/Aufgabe” erfassen und in deinem Template entsprechend ausgeben. Natürlich könnte man das Ganze auch im Editor “lösen”, z.B. per Shortcode… Allerdings musst dich dabei immer sehr manuell um den ausgegebenen “Code” kümmern. Das ist insbesondere bei Umsetzungen für Kunden ein wichtige Faktor. Oder wenn es um große Datensätze geht…

      Richtig Spaß machen CFs eigentlich auch erst mit Plugins wie z.B. “Advanced Custom Fields”, schau es dir mal an 🙂

      Viele Grüße

    3. Ich nutze die Felder um dem Leser weitere wichtige Informationen zur Verfügung zu stellen. Auf meinem Wanderblog stelle ich neben der Tourenbeschreibung auch noch weitere Daten zur Route und eine Karte zur Verfügung. Die Einstellungen dafür lassen sich einfach in den benutzerdefinierten Feldern des Posts machen.

      Hier kannst du es Dir anschauen: http://www.simsi.ch/le-touno-belle-epoque-3000-12/

      Ohne diese Felder wäre dies nur sehr umständlich möglich.

      Gruss Simon

    4. Hallo Me,
      hallo Vladimir,

      ja, die benutzerdefinierten Felder sind eine super Sache und werden erstaunlich wenig genutzt (außer von Plugin-Autoren).

      Mein Tipp an diejenigen, die sie noch nicht kennen: googelt einfach mal nach Tutorials, und experimentiert damit herum.

      Ich verlinke auch mal ein konkretes Beispiel (ich hoffe, ich darf das): http://www.boecherer-holzbau.de
      Diese Site anders als mit benutzerdefinierten Feldern zu realisieren, wäre unheimlich aufwändig gewesen.
      Das zu den Bildern und Teaser-Texten auf der Startseite bzw. in der Sidebar der weiteren Seiten gehörende benutzerdefinierte Feld befindet sich auf der jeweiligen durch das Bild verlinkten Seite.
      So muss das Feld nur einmal ausgefüllt werden und Bild und Teaser-Text erscheint automatisch überall, wo es soll.
      Dazu noch eine simple Abfrage, damit es nicht in der Sidebar der „eigenen“ Seite ausgegeben wird.

      Grüße
      Bernhard

  2. Wäre es nicht sinnvoll zu prüfen, ob überhaupt ein Objekt vorhanden ist, bevor man auf die ID zugreift? So ballert man sich vermutlich bei leeren Seiten nur die Logs voll.

  3. Ich liebe das ACF-PlugIN. Ist für die Entwicklung von komplexeren Funktionen noch komfortabler.

  4. Der Code funktioniert problemlos, jedoch wird nur das Custom Field des aktuell geöffneten Post ausgegeben. Natürlich kann durch das ändern der Post ID auch auf Felder anderer Posts zugegriffen werden aber wie gebe ich eine Liste eines Feldes ALLER Posts aus?

Kommentare sind geschlossen.