Tot nu toe hebt u in deze serie geleerd hoe u WordPress-metadata kunt openen en kunt werken met de arrays waarin ze worden geretourneerd. We voegen niet alleen aangepaste velden toe aan WordPress-berichten, maar we kunnen deze informatie ook weergeven, maar we kunnen ook sorteren.
Nu u weet hoe u metagegevens kunt ophalen en weergeven, is het tijd om te leren hoe u de WordPress-lus kunt aanpassen om alleen berichten met specifieke metawaarden te retourneren.
Om aan te passen welke berichten WordPress retourneert op basis van metavelden, moeten we gebruiken WP_Query
en geef een meta_query
. Als we bijvoorbeeld een aangepast berichttype hadden met de naam 'films' met een aangepast veld met de naam 'regisseur', dan konden we naar films zoeken waarvan de regisseur een van de directeuren was van een van de drie Star Wars films.
Bekijk de onderstaande code en kijk of je je beheersing van arrays die je in het laatste deel hebt verzameld, kunt gebruiken om te begrijpen wat er aan de hand is met de meta_query
, die ik zal opsplitsen wat er gebeurt onder de code.
$ 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 'Films door Star Wards-directeurs
'; echo '
Zoals u kunt zien, hebben we een reeks namen van regisseurs die zich in drie andere arrays bevinden. Laten we het stuk voor stuk uit elkaar halen.
Eerst beginnen we een array voor onze WP_Query
args. Na ons eerste argument 'post_type', beginnen we een array om ons te huisvesten meta_query
argumenten.
Daarin bepalen we welke sleutel we moeten zoeken - in het geval van 'regisseur'. We bieden ook een reeks waarden waarnaar in die sleutel moet worden gezocht.
Het laatste argument is hoe deze waarden te vergelijken, in dit geval specificeren we "IN" om berichten met deze waarden op te halen in de key director.
Wat als we films wilden die geregisseerd werden door een regisseur van een Star Wars-film, maar de Star Wars Prequels niet wilden uitsluiten? We kunnen gewoon een andere reeks argumenten aan onze toevoegen meta_query
, maar deze keer voor waarde gebruikt u een reeks van die filmtitels voor de sleutel film titel
en voor vergelijken, gebruik 'NIET LIKE' om berichten met deze waarden uit te sluiten in de film titel
veld-.
$ 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 ',' Attack of the Clones ',' Revenge of the Sith ' ), 'vergelijken' => 'NIET LIKEN'),)); $ query = new WP_Query ($ sw_args);
Nu zal WordPress films zoeken van deze drie regisseurs, waarvan de titel niet een van de drie prequels is.
Tot nu toe heb ik je laten zien hoe te gebruiken WP_Query
om berichten te vinden met specifieke waarden voor een aangepast veld, maar niet om deze velden weer te geven.
Het tonen van deze velden is vrijwel hetzelfde als voorheen, maar in plaats van gebruiken get_the_ID ()
ID opgeven voor get_post_meta ()
we specificeren het in een objectcontext. Dus in onze loop, die je hieronder kunt zien, wordt de ID een beetje anders opgehaald met behulp van $ 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 ',' Attack of the Clones ',' Revenge of the Sith ' ), 'vergelijken' => 'NIET LIKEN'),)); $ query = new WP_Query ($ sw_args); if ($ the_query-> have_posts ()) echo 'Films door Star Wards-directeurs
'; echo '
Net als in het laatste deel toen we het gebruikten WP_Query
om berichten met bepaalde waarden voor verschillende aangepaste velden te vinden, kunnen we gebruiken WP_Query
het equivalent van de gebruikerstabel WP_User_Query
.
Bijvoorbeeld als we een aangepast veld hadden genaamd subscriber_level
en wilde alleen die gebruikers vinden die het abonneepeil hadden van extra speciaal
of super_special
we zouden op dezelfde manier kunnen zoeken naar films die zijn geregisseerd door de drie regisseurs van de Star Wars-films:
$ args = array ('meta_query' => array (array ('key' => 'subscriber_level', 'value' => array ('extra_special', 'super_special'); 'compare' => '='))) ; $ user_query = nieuwe WP_User_Query ($ args); if (! empty ($ user_query-> results)) echo 'Extra en Super speciale gebruikers
'; echo '
Net zoals met WP_Query
, we kunnen verschillende vergelijkingen combineren om verder te bepalen welke gebruikers onze query retourneren. In dit volgende voorbeeld wordt de laatste query gecombineerd met een query, deze keer van de wp_users
tabel zelf voor elke gebruiker wiens naam Luke, Han of Leia is.
$ args = array ('meta_query' => array (array ('key' => 'subscriber_level', 'value' => array ('extra_special', 'super_special'); 'compare' => '=')), 'zoeken' => array ('Luke', 'Han', 'Leia'), 'search_columns' => array ('user_nicename', 'display_name'),); $ user_query = nieuwe WP_User_Query ($ args); if (! empty ($ user_query-> results)) echo 'Extra en Super Special Users genaamd Luke, Han of Leia
'; echo '
In deze serie heb je kennis gemaakt met WordPress-metadata en heb je onderweg enkele lessen geleerd over kern-PHP-concepten.
U hebt geleerd hoe u de waarden kunt ophalen uit de velden die post- en gebruikers-metadata opslaan en hoe u query's voor berichten en gebruikers kunt construeren op basis van metawaarden. Met deze kennis kunt u bereid zijn om te werken met een paar aangepaste velden en op weg naar het gebruik van WordPress als een complex contentbeheersysteem.