Mastering WordPress Metadata Fråga inlägg och användare av Meta Data

Hittills i denna serie har du lärt dig hur du får tillgång till WordPress-metadata och arbetar med de arrayer där de returneras. Vi lägger inte bara till anpassade fält till WordPress-inlägg så vi kan visa den här informationen, men det kan vi också sortera efter.

Nu när du vet hur man hämtar och visar metadata är det dags att lära sig att anpassa WordPress-loopen för att bara returnera inlägg med specifika metavärden.

Använda WP_Query för att söka efter Meta Field Value

För att anpassa vilka inlägg som WordPress returnerar baserat på metafält, måste vi använda WP_Query och ange a meta_query. Om vi ​​till exempel hade en anpassad posttyp kallad "filmer" som hade ett anpassat fält som heter "regissör" kunde vi fråga efter filmer vars regissör var en regissör för en av de tre Stjärnornas krig filmer.

Ta en titt på koden nedan och se om du kan använda din behärskning av arrays som du fått i den sista delen för att förstå vad som händer med meta_query, som jag kommer att bryta ner vad som händer under koden.

 $ sw_args = array ('post_type' => 'filmer', 'meta_query' => array (array ('key' => 'regissör', 'value' => array ('George Lucas', 'Richard Marquand' Irvin Kershner '),' jämför '=>' IN ',)))); $ query = nya WP_Query ($ sw_args); om ($ the_query-> have_posts ()) echo '

Filmer av Star Wards Directors

'; eko "
    '; medan ($ the_query-> have_posts ()) $ the_query-> the_post (); eko "
  • '. get_the_title (). '
  • '; eko
'; / * Återställ ursprungliga postdata * / wp_reset_postdata ();

Som ni kan se har vi en rad regissörsnamn inbäddat inuti tre andra arrays. Låt oss ta det ifrån varandra, bit för bit.

Först börjar vi en matris för vår WP_Query args. Efter vårt första argument "post_type" börjar vi en array för att hysa vår meta_query argument.

Inne i det anger vi vilken nyckel att leta efter - i fallet "regissören". Vi tillhandahåller också en mängd värden att söka efter i den nyckeln.

Det sista argumentet är hur man jämför dessa värden, i det här fallet anger vi "IN" för att hämta några inlägg med dessa värden i nyckeldirektören.

Andra jämförelser

Vad händer om vi ville ha filmer som där regisserade av en Star Wars-film, men skulle inte utesluta Star Wars Prequels? Vi kan bara lägga till en annan grupp av argument till vår meta_query, men denna gång för värde använder du en uppsättning av dessa filmtitlar för nyckeln film_title och för jämförelse, använd "INTE LIKA" för att utesluta post som har dessa värden i film_title fält.

 $ sw_args = array ('post_type' => 'filmer', 'meta_query' => array (array ('key' => 'regissör', 'value' => array ('George Lucas', 'Richard Marquand' Irvin Kershner '),' jämför '=>' IN ',), array (' key '=>' film_title ',' value '=>' Phantom Menace ',' Attack of the Clones ',' Revenge of the Sith ' ), 'jämför' => 'INTE LIKA')))); $ query = nya WP_Query ($ sw_args);

Nu kommer WordPress leta efter filmer av dessa tre regissörer, vars titel inte är en av de tre prequelsna.

Visar metafält i WP_Query

Hittills har jag visat dig hur du använder WP_Query för att hitta inlägg som har specifika värden för ett anpassat fält, men inte hur man visar de här fälten.

Att visa dessa fält är ungefär samma som tidigare men istället för att använda get_the_ID () att ange ID för get_post_meta () Vi specificerar det i en objektkontext. Så i vår slinga, som du kan se nedan, hämtas ID-en lite annorlunda med $ Query-> post-> ID.

 $ sw_args = array ('post_type' => 'filmer', 'meta_query' => array (array ('key' => 'regissör', 'value' => array ('George Lucas', 'Richard Marquand' Irvin Kershner '),' jämför '=>' IN ',), array (' key '=>' film_title ',' value '=>' Phantom Menace ',' Attack of the Clones ',' Revenge of the Sith ' ), 'jämför' => 'INTE LIKA')))); $ query = nya WP_Query ($ sw_args); om ($ the_query-> have_posts ()) echo '

Filmer av Star Wards Directors

'; eko "
    '; medan ($ the_query-> have_posts ()) $ the_query-> the_post (); eko "
    • '; eko "
    • '. get_the_title (). '
    • '; eko "
    • '. get_post_meta ($ query-> post-> ID, 'director', true). '
    • '; eko "
  • " eko"
'; / * Återställ ursprungliga postdata * / wp_reset_postdata ();

Användar WP_User_Query

Precis som i den sista delen när vi använde WP_Query för att hitta inlägg med vissa värden för olika anpassade fält kan vi använda WP_Querys användarbord motsvarande WP_User_Query.

Om vi ​​till exempel hade ett anpassat fält som heter subscriber_level och ville bara hitta de användare som hade abonnentnivån av extra_special eller super_special vi kunde, på samma sätt som vi sökte efter filmer regisserade av de tre regissörerna i Star Wars-filmerna:

 $ args = array ('meta_query' => array (array ('key' => 'abonnent_level', 'värde' => array ('extra_special', 'super_special'); 'jämför' => '=') ; $ user_query = nya WP_User_Query ($ args); om (! tomt ($ user_query-> resultat)) echo '

Extra och Super speciella användare

'; eko "
    '; foreach ($ user_query-> resultat som $ användare) echo '
  • '. $ user-> display_name. '
  • '; eko
';

Precis som med WP_Query, Vi kan kombinera olika jämförelser för att ytterligare kontrollera vilka användare vår fråga returnerar. I nästa exempel kombineras den senaste frågan med en en fråga, den här tiden för wp_users bord själv för alla användare vars namn är Luke, Han eller Leia.

 $ args = array ('meta_query' => array (array ('key' => 'abonnent_level', 'värde' => array ('extra_special', 'super_special'); 'jämför' => '=') 'search' => array ('Luke', 'Han', 'Leia'), 'search_columns' => array ('user_nicename', 'display_name')); $ user_query = nya WP_User_Query ($ args); om (! tomt ($ user_query-> resultat)) echo '

Extra och Super Special Users Namngiven Luke, Han eller Leia

'; eko "
    '; foreach ($ user_query-> resultat som $ användare) echo '
  • '. $ user-> display_name. '
  • '; eko
';

Avslutar

I denna serie har du introducerats till WordPress metadata och lärt dig några lektioner om grundläggande PHP-begrepp under vägen.

Du har lärt dig hur man får värdena från fälten som lagrar inlägg och användardetaljdata och hur man konstruerar frågor för inlägg och användare baserat på metavärden. Med denna kunskap kan du vara beredd att arbeta med några anpassade fält och på väg till att använda WordPress som ett komplext innehållshanteringssystem.