Wie man native benutzerdefinierte Felder in WordPress verwendet (und 5 nützliche Beispiele)

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

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

Die Benutzeroberfläche für benutzerdefinierte Felder in WordPress sieht so aus

Showing that Custom Fields in WordPress appear below the content area of the block editor in the admin user interface.

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.

Showing the option to enable Custom Fields in WordPresss in the Block Editor Preferences settings. It is at the first toggle beneath the Additional settings.
Die Benutzeroberfläche zwingt Sie, die Seite beim Ein- und Ausschalten dieser Funktion zu aktualisieren.

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**.

Showing a Custom Field in WordPress with a name of favorite_food and a value of burrito. There a button below the name input to add the custom field.

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

Showing a Custom Field in WordPress with a name of favorite_food and a value of burrito. There are two buttons below the name to delete or update the custom field.

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

Showing the dropdown menu that opens when clocking on the Name field of a custom field in WordPress, allowing you to select an existing custom field.

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.

A side-by-side showing a published post on the left with the running time of a video circled in red, and the WordPress admin on the right with the running time custom field circled in the block editor showing the exact same information that is published in the post.
Beachten Sie hier andere verwendete benutzerdefinierte Felder, wie das Feld youtube, das wir haben, damit wir ausgeben können, wo das

2. 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

A side by side showing the the main pull quote custom field in WordPress circled in red, and the category archive on the right with a red arrow pointing to the corresponding pull-quote that displays on the page.

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.

Side by side showing the rss videos template in code on the left with the custom field part circled in red, and the RSS feed open in the browser on the right with an arrow pointing to where the corresponding code renders as the video enclosure.
Der Speicherort des Videos und die Dauer werden beide in benutzerdefinierten Feldern gespeichert

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.

Side by side showing the settings for custom fields in the Advanced Custom Fields plugin on the left, and those custom fields displayed on the right in the  WordPress Block Editor of a new post.

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

Wofür verwendest du sie?

Verwendest du benutzerdefinierte Felder in WordPress? Ich bin besonders neugierig auf die Verwendung von nativen benutzerdefinierten Feldern.