Mastering WordPress Meta Data berichten en gebruikers opvragen met behulp van metagegevens

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.

WP_Query gebruiken voor query's met de metageldwaarde

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 '
    '; while ($ the_query-> have_posts ()) $ the_query-> the_post (); echo '
  • '. get_the_title (). '
  • '; echo '
'; / * Oorspronkelijke berichtgegevens herstellen * / wp_reset_postdata ();

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.

Andere vergelijkingen

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.

Meta-velden weergeven in WP_Query

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 '
    '; 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 '
'; / * Oorspronkelijke berichtgegevens herstellen * / wp_reset_postdata ();

WP_User_Query gebruiken

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_Queryhet 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 '
    '; foreach ($ user_query-> resultaten als $ gebruiker) echo '
  • '. $ user-> weergavenaam. '
  • '; 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 '
    '; foreach ($ user_query-> resultaten als $ gebruiker) echo '
  • '. $ user-> weergavenaam. '
  • '; echo '
';

Afsluiten

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.