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.
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 '
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.
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.
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 '
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_Query
Nutzertabelle 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 '
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 '
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.