Benutzerdefinierte Felder in WordPress sind beliebige Datenteile, die Sie auf Beiträge, Seiten und benutzerdefinierte Beitragstypen in WordPress anwenden können. Metadaten, sozusagen, in Form von Schlüssel/Wert-Paaren. Zum Beispiel
- Schlüssel:
untertitel/ Wert:Sie sind besser als ihr Ruf - Schlüssel:
header_color_override/ Wert:#e52e05 - Schlüssel:
property_url/ Wert:https://example.com/123
WordPress hat seine eigene Dokumentation zu dieser Funktion, daher versuche ich nicht, diese zu duplizieren. Ich möchte Ihnen im Wesentlichen zeigen, was benutzerdefinierte Felder in WordPress sind, wie sie funktionieren, wie man sie benutzt und einige Anwendungsfälle aus meiner eigenen persönlichen Erfahrung.
Inhaltsverzeichnis
- So fügt man benutzerdefinierte Felder in WordPress hinzu/bearbeitet/entfernt
- Warum benutzerdefinierte Felder verwenden?
- Beispiele für Anwendungsfälle für benutzerdefinierte Felder in WordPress
- Die APIs zur Anzeige benutzerdefinierter Felder in WordPress
- Abfragen von benutzerdefinierten Feldern in WordPress
- Begrenzung benutzerdefinierter Felder in der Dropdown-Liste "Name"
- Andere Bedenken bezüglich des Block-Editors?
- Beziehung zu Advanced Custom Fields
- Hinweis für Plugin-Entwickler
- Weitere Beispiele für die Verwendung benutzerdefinierter Felder in WordPress
- Wofür verwendest du sie?
So fügt man benutzerdefinierte Felder in WordPress hinzu/bearbeitet/entfernt
Die Benutzeroberfläche für benutzerdefinierte Felder in WordPress sieht so aus

Wenn Sie sie nicht sehen, müssen Sie möglicherweise unter dem Drei-Punkte-Menü, Einstellungen, dann die Option für benutzerdefinierte Felder suchen und diese aktivieren.

Um ein benutzerdefiniertes Feld hinzuzufügen, geben Sie den Schlüssel (beschriftet mit "Name") und den Wert ein und klicken Sie dann auf **Benutzerdefiniertes Feld hinzufügen**.

Nachdem es hinzugefügt wurde, können Sie es über die Schaltflächen unter dem Schlüssel/Namen löschen oder aktualisieren

Nachdem Sie benutzerdefinierte Felder verwendet haben, werden die Schlüssel zu einem Dropdown-Menü zusammengefasst, um die Auswahl zu erleichtern.

Warum benutzerdefinierte Felder verwenden?
Benutzerdefinierte Felder machen zusammen mit benutzerdefinierten Post-Typen WordPress sofort zu einem CMS und beschränken es nicht auf eine einfache Blogging-Plattform.
Hier auf CSS-Tricks, ob Sie es glauben oder nicht, verwenden wir über 100 benutzerdefinierte Felder für verschiedene Dinge auf dieser Seite. Wir greifen meistens auf sie für relativ einfache Dinge zurück, und es ist schön, da es eine Kernfunktion von WordPress ist, die für immer ohne zu viele Kompatibilitätsprobleme oder unbeholfene technische Schulden weiter funktionieren wird.
Die große Idee ist, die Möglichkeiten der Vorlagengestaltung zu erweitern. Stellen Sie sich eine Seite mit Immobilienangeboten vor, die
- Adresse
- Angebotspreis
- Schlafzimmer
- Badezimmer
- usw.
Mit benutzerdefinierten Feldern haben Sie all diese Informationen als diskrete kleine Datenblöcke zur Verfügung, die Sie in eine Seitenvorlage ausgeben (d. h. anzeigen) können, wo immer Sie sie benötigen. Das ist viel flexibler, als all diese Daten im Beitrag selbst zu haben, selbst mit dem Block-Editor.
Beispiele für Anwendungsfälle für benutzerdefinierte Felder in WordPress
Benutzerdefinierte Felder in WordPress können für so viele verschiedene Dinge verwendet werden! Aber schauen wir uns fünf praktische Anwendungsfälle an, die wir hier auf CSS-Tricks implementiert haben.
1. Zusätzliche Informationen anzeigen
Sagen wir, Sie veröffentlichen ein Video und möchten die Laufzeit des Videos anzeigen lassen. Das ist so einfach wie das Speichern von laufzeit als benutzerdefiniertes Feld und das Anzeigen an der gewünschten Stelle.

youtube, das wir haben, damit wir ausgeben können, wo das2. Unterschiedliche Inhalte/Funktionen ausblenden/anzeigen
Nehmen wir an, Sie möchten den Kommentarbereich auf verschiedenen Blogbeiträgen manchmal ausklappbar machen. Sie könnten ein benutzerdefiniertes Feld namens should_toggle_comments setzen und den Wert true zuweisen. Das machen wir hier auf CSS-Tricks. In unserer Vorlage comments.php geben wir eine <ol> aller Kommentare aus, aber wenn dieses benutzerdefinierte Feld vorhanden ist, umschließen wir das Ganze mit einem <details>-Element, das es standardmäßig einklappt.
<?php if (get_post_meta($post->ID, 'should_toggle_comments', true)) { ?>
<details class="open-all-comments">
<summary>Toggle All Comments (there are a lot!)</summary>
<?php } ?>
<ol class="commentlist" id="commentlist">
<?php wp_list_comments('type=comment&avatar_size=512&callback=csstricks_comment'); ?>
</ol>
<?php if (get_post_meta($post->ID, 'should_toggle_comments', true)) { ?>
</details>
<?php } ?>
3. Spezielle Zitate
Angenommen, Sie haben ein spezielles Kategoriearchiv, das eine Gruppe von Beiträgen mit derselben Kategorie anzeigt, und verwenden dann eine benutzerdefinierte Vorlage für diese Kategorie, wie z. B. category-fancypants.php. Vielleicht ziehen Sie ein benutzerdefiniertes Zitat aus jedem Artikel als benutzerdefiniertes Feld namens main-pullquote heraus.
<blockquote>
<?php
echo get_post_meta($post->ID, 'main-pullquote', true);
?>
</blockquote>
Das machen wir für unsere jährliche Jahresend-Serie

4. RSS-Feed anpassen
Wir erstellen hier auf CSS-Tricks ein paar komplett benutzerdefinierte RSS-Feeds, die sich von dem unterscheiden, was WordPress standardmäßig anbietet – einer für Videos und einer für Newsletter. Der Video-Feed stützt sich insbesondere auf einige benutzerdefinierte Felder in WordPress, um spezielle Daten auszugeben, die für die Funktion des Feeds als Feed für unseren Video-Podcast erforderlich sind.

5. Autor ausblenden/anzeigen
Unsere gesponserten Beiträge hier auf CSS-Tricks sind manchmal so geschrieben, dass sie weitgehend wie eine Ankündigung eines Unternehmens klingen. Sie wurden absichtlich so geschrieben und wahrscheinlich von mehreren Personen verfasst, bis sie tatsächlich veröffentlicht wurden. Ein Beitrag wie dieser muss nicht wirklich "von" jemandem sein. Aber manchmal werden gesponserte Beiträge definitiv von einer bestimmten Person verfasst, sogar manchmal in der Ich-Form, was seltsam wäre, ohne eine Autorenschaft anzuzeigen. Deshalb verwenden wir ein benutzerdefiniertes Feld showSponsorAuthor, um diesen Autor anzuzeigen, wenn wir ihn brauchen.
<div class="sponsored-post-byline">
❥ Sponsored
<?php if (get_post_meta($post->ID, 'showSponsorAuthor', true)) { ?>
(Written by <?php the_author(); ?>)
<?php } ?>
</div>
Oben ist ein Teil einer Vorlage. Wir kennzeichnen einen gesponserten Beitrag immer als gesponsert in der Autorenschaft (Beispiel), aber nur optional zeigen wir den Autor visuell an (Beispiel), gesteuert durch ein benutzerdefiniertes Feld.
Die APIs zur Anzeige benutzerdefinierter Felder in WordPress
Am häufigsten möchten Sie den Wert eines einzelnen Feldes anzeigen
<?php echo get_post_meta($post->ID, 'mood', true); ?>
Das true am Ende bedeutet "gib mir einen einzelnen Wert", was bedeutet, dass Sie nur einen erhalten, auch wenn es mehrere benutzerdefinierte Felder mit demselben Namen gibt. Um mehrere mit demselben Namen zu erhalten, verwenden Sie false, wie z. B.
<?php $songs = get_post_meta($post->ID, 'songs', false); ?>
<h3>This post inspired by:</h3>
<ul>
<?php foreach($songs as $song) {
echo '<li>'.$song.'</li>';
} ?>
</ul>
Wenn Sie alles auf einmal ausgeben möchten (wahrscheinlich hauptsächlich zum Debuggen nützlich), können Sie das so tun
<?php the_meta(); ?>
Beachten Sie jedoch, dass dies benutzerdefinierte Felder überspringt, die mit einem Unterstrich (_) beginnen. Sie könnten also diesen Ansatz stattdessen in Betracht ziehen.
Abfragen von benutzerdefinierten Feldern in WordPress
Sagen wir, Sie möchten alle Beiträge abfragen, die ein bestimmtes benutzerdefiniertes Feld haben. Das ist möglich!
<?php
$the_query = new WP_Query(array(
'meta_key' => 'example_field_name'
'meta_value' => 'example_field_value' // as a string!
));
if ($the_query->have_posts()) {
while ($the_query->have_posts()) {
$the_query->the_post();
echo '<div>' . get_the_title() . '</div>';
}
}
wp_reset_postdata();
Das obige Beispiel führt eine Abfrage für Beiträge aus, die sowohl ein benutzerdefiniertes Feld mit dem Namen example_field_name haben als auch wo dieses Feld den Wert example_field_value hat. Sie könnten entweder das eine oder das andere tun.
Es gibt noch viel mehr, was Sie hier tun können. Sie können Vergleiche verwenden, Sie können die Werte als Zahlen abrufen und sogar mehrere Felder auf einmal abfragen. Das alles detaillieren wir in Benutzerdefinierte Schleife/Abfrage basierend auf benutzerdefinierten Feldern.
Begrenzung benutzerdefinierter Felder in der Dropdown-Liste "Name"
Die Benutzeroberfläche für vorhandene benutzerdefinierte Felder in WordPress ist auf etwa 30 Felder begrenzt. Wenn Sie also mehr als 100 verschiedene Schlüssel haben, sieht die Dropdown-Liste willkürlich abgeschnitten aus. Sie können diese Zahl mit einem Filter in functions.php oder einem Plugin erhöhen.
function customfield_limit_increase( $limit ) {
$limit = 150;
return $limit;
}
add_filter( 'postmeta_form_limit', 'customfield_limit_increase' );
Andere Bedenken bezüglich des Block-Editors?
Das Hauptproblem ist, wenn Sie die Benutzeroberfläche für benutzerdefinierte Felder überhaupt nicht sehen können. Wir haben abgedeckt, wie Sie sie wieder einschalten können (da sie standardmäßig deaktiviert sein kann), also überprüfen Sie das immer. Das Advanced Custom Fields Plugin deaktiviert sie ebenfalls. Wenn Sie dieses Plugin verwenden, beachten Sie, dass unten eine Zeile vorhanden ist, die Ihnen hilft, es wieder einzuschalten (falls Sie beide verwenden, wie wir).
Ich bin mir nicht sicher, ob es eine Standardmethode gibt, den Wert eines benutzerdefinierten Feldes innerhalb eines Blocks im Block-Editor anzuzeigen. Wenn Sie einen klaren Weg kennen, hinterlassen Sie einen Kommentar!
Beziehung zu Advanced Custom Fields
Die Benutzeroberfläche für native benutzerdefinierte Felder in WordPress ist ziemlich ... unterentwickelt. Sie ist nicht schick, hat Kanten (wir stellen fest, dass benutzerdefinierte Felder zum Beispiel eine seltsame Art haben, sich bei mehreren Beitragspeichervorgängen zu duplizieren). Es scheint nicht, dass benutzerdefinierte Felder, obwohl nativ, eine besonders erstklassige Funktion von WordPress sind.
Advanced Custom Fields (ACF) ändert das erheblich. Der Geist bleibt derselbe: Daten an Inhalte anhängen. Aber anstatt der einfachen, stringbasierten Schlüssel-Wert-Schnittstelle, die wir detailliert beschrieben haben, modellieren Sie die Daten im Wesentlichen mit verschiedenen Typen, und es erstellt eine wirklich schöne benutzerdefinierte Benutzeroberfläche, die Sie zur Eingabe dieser Daten verwenden können, und integriert sich sogar direkt in den Block-Editor.
Stellen Sie sich eine Podcast-Website vor, auf der jeder Beitrag eine einzelne Episode ist. Der Block-Editor mag gut für schriftliche Inhalte über die Episode sein, aber wahrscheinlich keine gute Idee für alle dazugehörigen Metadaten. Die Liste der Gäste, die Dauer, der Speicherort der MP3-Datei, der Sponsor, Sprunglinks usw. Benutzerdefinierte Felder sind dafür großartig, aber da es so viele gibt, sind Sie mit Advanced Custom Fields hier besser bedient, als mit nativen benutzerdefinierten Feldern in WordPress. Hier ist ein Einrichtungsbeispiel, was Sie erhalten, wie wir es auf dem ShopTalk Show Podcast tun.

ACF, wahrscheinlich in einem Versuch, die direkte Nutzung zu fördern und die Leute nicht mit der nativen Benutzeroberfläche für benutzerdefinierte Felder zu verwirren, entfernt die native Benutzeroberfläche für benutzerdefinierte Felder. Wenn Sie wie wir sind und beide Arten von Feldern verwenden, müssen Sie die native Benutzeroberfläche für benutzerdefinierte Felder mit einem Filter, den ACF bereitstellt, zum Beitragseditor zurückbringen.
add_filter('acf/settings/remove_wp_meta_box', '__return_false');
Wenn Sie native benutzerdefinierte Felder in WordPress überhaupt verwenden, möchten Sie diese in Ihrer Datei functions.php oder einem Funktionalitäts-Plugin haben.
Hinweis für Plugin-Entwickler
Verwenden Sie die Technik zum Ausblenden mit Unterstrich.
Einige Plugins verwenden die Custom Fields API als Speicherort für beitragsbezogene Daten. Ich denke, das ist in Ordnung, aber ich möchte Plugin-Entwickler dringend bitten, immer unterstrich- und Plugin-präfixierte Namen für benutzerdefinierte Felder zu verwenden, wenn sie dies tun.
Wenn benutzerdefinierte Felder mit einem Unterstrich beginnen, werden sie in der Benutzeroberfläche nicht angezeigt. Das bedeutet, dass für diejenigen von uns, die die Benutzeroberfläche für benutzerdefinierte Felder direkt verwenden, diese nicht mit Feldern von anderen Plugins überladen wird. Die Ausnahme ist natürlich, wenn Sie beabsichtigen, dass Benutzer steuern können, was das Plugin mit den Werten der benutzerdefinierten Felder tut. In diesem Fall können Sie diese wenigen Felder ohne Unterstrich belassen.
_bobs_plugin_internal_value_1 // Hidden in UI
_bobs_plugin_internal_value_2 // Hidden in UI
bobs_plugin_config // Shows in UI
_adrians_plugin_internal_value_1 // Hidden in UI
_adrians_plugin_internal_value_2 // Hidden in UI
Weitere Beispiele für die Verwendung benutzerdefinierter Felder in WordPress
Benutzerdefinierte Felder verwenden
Alle benutzerdefinierten Felder ausgeben
Benutzerdefinierte Schleife/Abfrage basierend auf benutzerdefinierten Feldern
Begrenzung der Dropdown-Liste für benutzerdefinierte Felder erhöhen
SVG & benutzerdefinierte Felder in WordPress
#65: Fortgeschrittene Anwendungen für benutzerdefinierte Felder in WordPress
Wofür verwendest du sie?
Verwendest du benutzerdefinierte Felder in WordPress? Ich bin besonders neugierig auf die Verwendung von nativen benutzerdefinierten Feldern.
Das ist ein guter Artikel und ich bin froh, dass er existiert. Aber ich denke, er braucht eine Warnbox, um Leute davor zu warnen, Metadaten für relationale Daten zu verwenden. Anders ausgedrückt, verwenden Sie es nicht zum Abfragen, da dies in einigen Fällen zu langsamen Abfragen führen kann. Verwenden Sie stattdessen Taxonomien dafür.
Hallo.
Ich möchte einige Felder aus "Beiträge" ausschließen.
Ich möchte eine Feldgruppe auf EINE Art von Seite beschränken.
Wie mache ich das?
Alexander
Haben wir eine Möglichkeit gefunden, ein benutzerdefiniertes Feld in einem Block anzuzeigen? Zum Beispiel, um ein benutzerdefiniertes Feld innerhalb des Query-Blocks anzuzeigen.
Mit der Einführung von Full Site Editing verschwinden all diese PHP-Methoden aus dem Theme und ich bin mir nicht sicher, wie wir die gleiche Art von Sache mit Blöcken machen würden, wenn es keinen tatsächlichen "benutzerdefinierten Feld-Block" an sich gibt.
Tolles Tutorial! Alles ist OK, aber ich suche nach einer Möglichkeit, die zusätzlichen Materialien des Kommentarformulars nur auf einer bestimmten Seite anzuzeigen, anstatt auf allen Websites.
Hat jemand Ideen, wie das geschehen könnte?
Sehr guter Artikel, aber ich finde nicht, was ich brauche.
Ich möchte ein benutzerdefiniertes Feld als Teil des Textes im Editor einfügen.
Etwas, etwas (benutzerdefiniertes Feld) etwas etwas
Wow! Dieser Artikel ist genau das, wonach ich gesucht habe.
Ich habe versucht, eine Balance zwischen der Verwendung von ACF für Felder in benutzerdefinierten Post-Typen und den Standard-benutzerdefinierten Feldern für seiten-/beitragsspezifische Daten zu finden. Dieser Artikel hat mir geholfen zu verstehen, wie andere es verwenden.
Ich schätze den Tipp, wie man die Standard-Benutzeroberfläche für benutzerdefinierte Felder wieder aktiviert, wenn man ACF installiert hat.