Als u WordPress-thema's of plug-ins ontwerpt of ontwikkelt, is de kans groot dat u op een dag een query moet maken voor aangepaste metavelden. Dit zijn die volledig aangepaste sleutel / waarde-paren die u aan elk bericht, elke pagina of aangepast berichttype kunt toevoegen. WordPress heeft standaard een eenvoudige gebruikersinterface voor hen, of u kunt zoiets als geavanceerde aangepaste velden gebruiken om er zin in te krijgen. Maar onder de motorkap gebruikt ACF gewone oude aangepaste velden.
Deze pagina waar je nu naar kijkt, is geschreven in 1999. Op dat moment zou je de globale variabele `$ wpdb` moeten gebruiken om te zoeken naar berichten met bepaalde aangepaste velden. Dat kan worden gebruikt voor het maken van MySQL-query's die de WordPress WP_Query () - klasse niet ondersteunt. Gelukkig heeft WordPress tegenwoordig argumenten die zoekopdrachten voor aangepaste metavelden ondersteunen.
Hier bespreken we de verschillende manieren waarop u berichten kunt opvragen en doorlopen met bepaalde aangepaste velden (en hun waarden). U kunt deze informatie gebruiken, ongeacht of u de WP_Query
klas query_posts()
, of gebruikt get_posts()
. Sinds query_posts()
en get_posts()
zijn wikkels voor de WP_Query
klas. Ze aanvaarden allemaal dezelfde argumenten.
De vraagargumenten
Hier is een eenvoudig voorbeeld van een WordPress-query uit de WordPress Codex.
have_posts() ) ( echo '
'; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
- ' . get_the_title() . '
'; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();
Het $args
is daar het belangrijkste. We zullen verschillende argumenten aanvoeren om dit te laten werken zoals we willen.
Bij het zoeken naar aangepaste meta, zijn er twee "groepen" argumenten die u kunt gebruiken. De ene groep is voor een eenvoudige aangepaste metaveldquery en de andere groep voor complexere aangepaste metaveldenquery's. Laten we beginnen met de eenvoudige groep.
meta_key
Het meta_key
argument zal elk bericht opvragen waarvan de meta-ID van het aangepaste veld is opgeslagen in de database, ongeacht of er een waarde is opgeslagen voor het veld. Het meta_key
is de ID die u aan uw metavelden geeft. Zoals dit:
In dit voorbeeld wordt elk bericht met het aangepaste metaveld opgevraagd met de ID "field1".
$args = array( 'meta_key' => 'field1' );
meta_value
De meta_value
argumentquery's posten met de waarde die u definieert. Het meta_value
argument wordt gebruikt voor tekenreekswaarden. Dit voorbeeld zal alle berichten opvragen met een aangepast metaveld dat de waarde "data1" heeft.
$args = array( 'meta_value' => 'data1' );
Je kunt de twee ook combineren. In dit voorbeeld worden alleen berichten doorzocht die het aangepaste metaveld hebben met de ID van "field1" met de waarde "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Het meta_waarde_num argument is vergelijkbaar met het 'meta_value' argument. Waar het meta_value
argument is bedoeld voor tekenreekswaarden, meta_value_num
is het bedoeld voor numerieke waarden.
Dit voorbeeld laat zien hoe u het aangepaste metaveld "field1" kunt opvragen als dit de waarde "10" heeft.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
Het meta_compare
argument doet precies wat het klinkt. Het staat je toe om vergelijkers te gebruiken met de `meta_value` en` meta_value_num` argumenten. De vergelijkers die u kunt gebruiken zijn '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' of 'RLIKE'. Hier is een voorbeeld dat laat zien hoe je berichten kunt opvragen die niet de waarde "data1" hebben.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Meer complexe zoekopdrachten
meta_query
Het belangrijkste argument dat u voor complexe zoekopdrachten gebruikt, is meta_query
. Dit argument op zichzelf doet niets. Het vertelt WordPress gewoon dat u een query wilt maken voor aangepaste metavelden. U voegt extra argumenten toe meta_query
die worden gebruikt om de query te definiëren.
sleutel, waarde en vergelijk
De argumenten key
, value
werk op precies dezelfde manier als meta-key
, meta-value
zoals hierboven beschreven. Het complex compare
is vergelijkbaar met het simpele compare
hierboven, maar er is een andere lijst met vergelijkers voor nodig. Het complex compare
gebruikt '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'TUSSEN ',' NIET TUSSEN ',' BESTAAT 'of' BESTAAT NIET '. value
kan een array zijn, maar alleen wanneer vergelijken wordt gebruikt met 'IN', 'NOT IN', 'BETWEEN' of 'NOT BETWEEN'.
Als u 'EXISTS' of 'NOT EXISTS' gebruikt compare
, hoeft u geen value
argument op te geven .
Hier is een voorbeeld dat berichten zal opvragen als het "veld1" heeft met de waarde "data1" en "veld2" met de waarde die niet "data2" is.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
relatie
De relation
wordt gebruikt wanneer u aangepaste metagegevens wilt opvragen met behulp van een logische relatie. U kunt AND
of gebruiken OR
. U gebruikt bijvoorbeeld om AND
te vergelijken of data1 en data2 aan de criteria voldoen, en u gebruikt OR
als data1 of data2 aan de criteria voldoen.
Dit argument staat op zichzelf. Dit betekent dat het niet wordt weergegeven in individuele aangepaste metaveldparameters. Laten we naar een voorbeeld kijken. In dit voorbeeld worden alleen query's uitgevoerd op berichten met "field1" met de waarde "data1" en "field2" met de waarde "data2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Als u bent veranderd relation
in "OF". Vervolgens zou het alle berichten opvragen als "field1" de waarde "data1" heeft, of als "field2" de waarde "data2" heeft.
type
Met het type
argument kunt u het type gegevens kiezen dat u wilt opvragen. U kunt 'NUMERIC', 'BINAIR', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME' of 'UNSIGNED' gebruiken.
Het type "DATUM" kan alleen worden gebruikt met compare
"TUSSEN" als het datumnotatie "JJJJMMDD" is.
Dit voorbeeld zal elk bericht opvragen waar de waarde van "field1" numeriek is.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Voorbeeld uit de echte wereld
Tot nu toe heb ik alleen voorbeelden gegeven met willekeurige gegevens en velden. Nu wil ik u een voorbeeld uit de echte wereld laten zien van het opvragen van aangepaste metavelden.
Het scenario
Je hebt een aangepast berichttype voor evenementen gemaakt. Het posttype voor gebeurtenissen heeft een aangepast datumveld met de ID van event_date
. U wilt een query maken waarin alle gebeurtenissen worden weergegeven die op de huidige datum tot de komende 30 dagen beginnen.
We gaan het meta_query
argument gebruiken omdat we het argument willen gebruiken type
om het veld "event_date" te definiëren als het gegevenstype "DATE".
Dit is de vraag:
$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );
Het value
is een matrix van de huidige datum - 1 dag en 31 dagen vanaf de huidige datum. Omdat we de comparator "BETWEEN" gebruiken, worden alleen de berichten tussen de waardematrix opgevraagd, dus we willen ze met één dag compenseren.
Met deze zoekopdracht geeft u alle gebeurtenissen weer die in de komende 30 dagen plaatsvinden.
Gevolgtrekking
De WP_Query
klasse is een zeer flexibele klasse waarmee u een groot aantal aangepaste query's kunt maken. Als je meer wilt weten over de verschillende argumenten die je voor queries kunt gebruiken, raad ik je aan de WP_Query
codex-pagina te doorzoeken.