Beherrschen von WordPress-Metadaten Abfragen von Beiträgen und Benutzern nach Metadaten

In dieser Serie haben Sie bisher gelernt, auf WordPress-Metadaten zuzugreifen und mit den Arrays zu arbeiten, in denen sie zurückgegeben werden. Wir fügen WordPress-Posts nicht nur benutzerdefinierte Felder hinzu, damit wir diese Informationen anzeigen können, sondern auch, damit wir nach ihnen sortieren können.

Nun, da Sie wissen, wie Metadaten abgerufen und angezeigt werden, ist es an der Zeit, zu lernen, wie Sie die WordPress-Schleife anpassen, um nur Beiträge mit bestimmten Meta-Werten zurückzugeben.

Verwenden von WP_Query zum Abfragen nach Metafeldwert

Um anpassen zu können, welche Beiträge von WordPress basierend auf Metafeldern zurückgegeben werden, müssen wir dies verwenden WP_Query und spezifizieren Sie ein meta_query. Wenn wir beispielsweise einen benutzerdefinierten Post-Typ namens "Filme" mit einem benutzerdefinierten Feld namens "Regisseur" hatten, könnten wir nach Filmen suchen, deren Regisseur Regisseur eines der drei Filme war Krieg der Sterne Filme.

Sehen Sie sich den untenstehenden Code an und prüfen Sie, ob Sie die im letzten Teil gewonnenen Arrays beherrschen können, um zu verstehen, was mit dem meta_query, was ich unterbrechen werde, was unter dem Code vorgeht.

 $ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', ' Irvin Kershner '),' compare '=>' IN ',))); $ query = new WP_Query ($ sw_args); if ($ the_query-> have_posts ()) echo '

Filme von Star Wards Regisseuren

'; Echo '
    '; while ($ the_query-> have_posts ()) $ the_query-> the_post (); Echo '
  • '. get_the_title (). '
  • '; Echo '
'; / * Originalpostdaten wiederherstellen * / wp_reset_postdata ();

Wie Sie sehen, haben wir eine Reihe von Namen von Regisseuren in drei anderen Arrays eingebettet. Lassen Sie uns es Stück für Stück auseinander nehmen.

Zuerst starten wir ein Array für unser WP_Query args. Nach unserem ersten Argument 'post_type' beginnen wir mit einem Array, in dem unser untergebracht werden soll meta_query Argumente.

Darin legen wir fest, nach welchem ​​Schlüssel gesucht werden soll - im Fall des Direktors. Wir stellen auch eine Reihe von Werten zur Verfügung, nach denen in diesem Schlüssel gesucht werden soll.

Das letzte Argument ist, wie diese Werte verglichen werden sollen. In diesem Fall geben wir "IN" an, um Beiträge mit diesen Werten im Key Director abzurufen.

Andere Vergleiche

Was wäre, wenn wir Filme haben wollten, die von einem Regisseur eines Star Wars-Films geleitet wurden, die Star Wars-Prequels jedoch nicht ausschließen würden? Wir können einfach ein weiteres Array von Argumenten hinzufügen meta_query, Verwenden Sie jedoch dieses Mal für den Wert eine Reihe von Filmtiteln für den Schlüssel Filmtitel und zum Vergleich verwenden Sie 'NOT LIKE', um Beiträge auszuschließen, die diese Werte in enthalten Filmtitel Feld.

 $ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', ' Irvin Kershner '),' compare '=>' IN ',), array (' key '=>' film_title ',' value '=>' Phantom Menace ',' Angriff der Klone ',' Rache der Sith ' ), 'compare' => 'NOT LIKE'),)); $ query = new WP_Query ($ sw_args);

Nun sucht WordPress nach Filmen dieser drei Regisseure, deren Titel nicht einer der drei Prequels ist.

Anzeigen von Metafeldern in WP_Query

Bisher habe ich Ihnen gezeigt, wie man es benutzt WP_Query um Beiträge zu finden, die bestimmte Werte für ein benutzerdefiniertes Feld haben, jedoch nicht, wie diese Felder angezeigt werden.

Das Anzeigen dieser Felder ist fast genauso wie zuvor, jedoch nicht zu verwenden get_the_ID () ID für angeben get_post_meta () Wir spezifizieren es in einem Objektkontext. In unserer Schleife, die Sie unten sehen können, wird also die ID etwas anders abgerufen $ query-> post-> ID.

 $ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', ' Irvin Kershner '),' compare '=>' IN ',), array (' key '=>' film_title ',' value '=>' Phantom Menace ',' Angriff der Klone ',' Rache der Sith ' ), 'compare' => 'NOT LIKE'),)); $ query = new WP_Query ($ sw_args); if ($ the_query-> have_posts ()) echo '

Filme von Star Wards Regisseuren

'; Echo '
    '; while ($ the_query-> have_posts ()) $ the_query-> the_post (); Echo '
    • '; Echo '
    • '. get_the_title (). '
    • '; Echo '
    • '. get_post_meta ($ query-> post-> ID, 'director', true). '
    • '; Echo '
  • " echo '
'; / * Originalpostdaten wiederherstellen * / wp_reset_postdata ();

Verwendung von WP_User_Query

Genau wie im letzten Teil, als wir es benutzt haben WP_Query Um Beiträge mit bestimmten Werten für verschiedene benutzerdefinierte Felder zu finden, können wir verwenden WP_QueryNutzertabelle entspricht WP_User_Query.

Wenn wir beispielsweise ein benutzerdefiniertes Feld aufgerufen haben subscriber_level und wollte nur die Benutzer finden, die das Abonnentenlevel hatten extra Spezial oder super_special Wir könnten, genauso wie wir nach Filmen der drei Regisseure der Star Wars-Filme gesucht haben:

 $ args = array ('meta_query' => array (array ('key' => 'subscriber_level', 'value' => array ('extra_special', 'super_special'); 'compare' => '='))) ; $ user_query = new WP_User_Query ($ args); if (! empty ($ user_query-> results)) echo '

Extra und Super Special User

'; Echo '
    '; foreach ($ user_query-> resultiert als $ user) echo '
  • '. $ user-> display_name. '
  • '; Echo '
';

Genau wie bei WP_Query, Wir können verschiedene Vergleiche kombinieren, um zu steuern, welche Benutzer unsere Abfrage zurückgeben. Dieses nächste Beispiel kombiniert die letzte Abfrage mit einer Abfrage, diesmal von wp_users Tabelle selbst für alle Benutzer, deren Namen Luke, Han oder Leia sind.

 $ args = array ('meta_query' => array (array ('key' => 'subscriber_level', 'value' => array ('extra_special', 'super_special'); 'compare' => '=')), 'search' => array ('Luke', 'Han', 'Leia'), 'search_columns' => array ('user_nicename', 'display_name'),); $ user_query = new WP_User_Query ($ args); if (! empty ($ user_query-> results)) echo '

Extra- und Super-Spezialbenutzer namens Luke, Han oder Leia

'; Echo '
    '; foreach ($ user_query-> resultiert als $ user) echo '
  • '. $ user-> display_name. '
  • '; Echo '
';

Einpacken

In dieser Serie wurden Sie mit WordPress-Metadaten vertraut gemacht und dabei einige Lektionen über die wichtigsten PHP-Konzepte gelernt.

Sie haben gelernt, wie Sie die Werte aus den Feldern abrufen, in denen Post- und Benutzer-Metadaten gespeichert sind, und wie Sie Abfragen für Posts und Benutzer auf der Grundlage von Meta-Werten erstellen. Mit diesem Wissen können Sie mit einigen benutzerdefinierten Feldern arbeiten und sind auf dem Weg, WordPress als komplexes Content-Management-System zu verwenden.