Ja izstrādājat vai izstrādājat WordPress tēmas vai spraudņus, pastāv lielas izredzes, ka kādreiz jums būs jāizveido vaicājums par pielāgotajiem meta laukiem. Tie ir pilnīgi pielāgoti atslēgu / vērtību pāri, kurus varat pievienot jebkuram ierakstam, lapai vai pielāgotam ziņu veidam. WordPress viņiem pēc noklusējuma ir pamata lietotāja interfeiss, vai arī varat izmantot kaut ko līdzīgu Advanced Custom Fields, lai ar tiem saistītos. Bet zem pārsega ACF izmanto parastos pielāgotos laukus.
Šī fragmenta lapa, kuru pašlaik skatāties, tika uzrakstīta 1999. gadā. Tajā laikā, lai vaicātu ziņas, kurās ir īpaši pielāgoti lauki, jums jāizmanto globālais mainīgais $ $ wpdb. To var izmantot, lai izveidotu MySQL vaicājumus, kurus klase WordPress WP_Query () neatbalsta. Par laimi šodien programmā WordPress ir argumenti, kas atbalsta vaicājumus pielāgotajiem meta laukiem.
Šeit mēs aplūkosim dažādus veidus, kā jūs varat pieprasīt ziņas un apkopot ziņojumus ar noteiktiem pielāgotajiem laukiem (un to vērtībām). Šo informāciju varēsiet izmantot neatkarīgi no tā, vai izmantojat WP_Query
klasi query_posts()
vai get_posts()
. Kopš query_posts()
un get_posts()
ir WP_Query
klases iesaiņotāji . Viņi visi pieņem vienus un tos pašus argumentus.
Vaicājuma argumenti
Šeit ir WordPress vaicājuma pamata piemērs, kas ņemts no WordPress kodeksa.
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();
Tas $args
ir svarīgais gabals tur. Mēs pieņemsim dažādus argumentus, lai padarītu šo darbu vēlamo.
Vaicājot par pielāgotu meta, jūs varat izmantot divas argumentu “grupas”. Viena grupa ir paredzēta vienkāršam pielāgota meta lauka vaicājumam, bet otra grupa - sarežģītākiem pielāgotu meta lauku vaicājumiem. Sāksim ar vienkāršo grupu.
meta_key
meta_key
Arguments griezīsies jebkuru ziņu, kas ir pielāgoto lauku meta ID saglabāts datu bāzē, vai ir vai nav vērtība saglabātas laukā. Tas meta_key
ir ID, ko piešķirat saviem meta laukiem. Kā šis:


Šis piemērs vaicās jebkurai ziņai, kurai ir pielāgots meta lauks ar ID “field1”.
$args = array( 'meta_key' => 'field1' );
meta_value
meta_value
Arguments vaicājumi ziņu, kas ir vērtība, ko noteikt. meta_value
Arguments tiek izmantots stīgu vērtībām. Šis piemērs vaicās visām ziņām ar pielāgotu meta lauku, kura vērtība ir “data1”.
$args = array( 'meta_value' => 'data1' );
Jūs varat arī apvienot abus. Šis piemērs vaicās tikai tām ziņām, kurām ir pielāgots meta lauks ar ID “field1”, kura vērtība ir “data1”.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Arguments meta_value_num ir līdzīgs argumentam `meta_value`. Ja meta_value
arguments ir virknes vērtības, tas meta_value_num
ir domāts skaitliskām vērtībām.
Šis piemērs parāda, kā vaicāt “field1” pielāgoto meta lauku, ja tā vērtība ir “10”.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_salīdzināt
meta_compare
Arguments dara tieši to, ko tas izklausās. Tas ļaus jums izmantot salīdzinātājus ar argumentiem "meta_value" un "meta_value_num". Izmantojamie salīdzinātāji ir '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN'. , “BETWEEN”, “NOT BETWEEN”, “NOT EXISTS”, “REGEXP”, “NOT REGEXP” vai “PATĪK”. Šis piemērs parāda, kā vaicāt jebkurām ziņām, kurām nav vērtības “data1”.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Sarežģītāki vaicājumi
meta_query
Galvenais arguments, kuru izmantosiet sarežģītiem vaicājumiem, ir meta_query
. Šis arguments pats par sevi neko nedara. Tas tikai norāda WordPress, ka vēlaties izveidot vaicājumu pielāgotajiem meta laukiem. Jūs pievienosiet papildu argumentus, meta_query
kas tiks izmantoti vaicājuma definēšanai.
atslēga, vērtība un salīdzinājums
Argumentus key
, value
strādā tieši tāpat kā meta-key
, meta-value
kā aprakstīts iepriekš. Komplekss compare
ir līdzīgs iepriekšminētajam vienkāršajam compare
, taču tam ir nepieciešams cits salīdzinājumu saraksts. Kompleksā compare
tiek lietoti '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'STARB ”,“ NAV BETWEEN ”,“ EXISTS ”vai“ NOT EXISTS ”. value
var būt masīvs, bet tikai tad, ja salīdzinājumā tiek izmantoti “IN”, “NOT IN”, “BETWEEN” vai “NOT BETWEEN”.
Ja izmantojat opciju “EXISTS” vai “NOT EXISTS” compare
, jums nav jānorāda value
arguments.
Šis ir piemērs, kas vaicās ziņojumus, ja tam ir “field1” ar vērtību “data1” un “field2” ar vērtību, kas nav “data2”.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
saistība
Tiek relation
izmantots, ja vēlaties vaicāt pielāgotus metadatus, izmantojot loģiskas attiecības. Jūs varat izmantot AND
vai OR
. Piemēram, jūs izmantosiet, AND
lai salīdzinātu, vai data1 un data2 atbilst kritērijiem, un jūs izmantojat, OR
ja data1 vai data2 atbilst kritērijiem.
Šis arguments ir atsevišķs. Tas nozīmē, ka tas neparādās atsevišķos pielāgotos meta lauka parametros. Apskatīsim piemēru. Šis piemērs vaicās tikai tām ziņām, kurām ir “field1” ar vērtību “data1” un “field2” ar vērtību “data2”.
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Ja mainījāt relation
uz “OR”. Tad tas vaicātu jebkurus ziņojumus, ja lauka1 vērtība ir “data1” vai ja lauka2 vērtība ir “data2”.
tips
type
Arguments ļauj jums izvēlēties datu veidu uz vaicājumu. Varat izmantot “NUMERIC”, “BINARY”, “CHAR”, “DATE”, “DATETIME”, “DECIMAL”, “SIGNED”, “TIME” vai “UNSIGNED”.
“DATE” veidu var izmantot kopā ar compare
“BETWEEN” tikai tad, ja datuma formāts ir “GGGGMMDD”.
Šis piemērs vaicās jebkurai ziņai, kuras lauka1 vērtība ir skaitliska.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Reālās pasaules piemērs
Līdz šim es minēju tikai piemērus ar patvaļīgiem datiem un laukiem. Tagad es vēlētos jums parādīt piemēru, kā vaicāt pielāgotos meta laukus.
Scenārijs
Jūs esat izveidojis notikumu pielāgotu ziņu veidu. Notikumu ziņas tipam ir datuma pielāgots lauks ar ID event_date
. Jūs vēlaties izveidot vaicājumu, kas parādīs visus notikumus, kas sāksies pašreizējā datumā nākamo 30 dienu laikā.
Mēs izmantosim meta_query
argumentu, jo mēs vēlamies izmantot type
argumentu, lai lauku “event_date” definētu kā “DATE” datu tipu.
Šis ir vaicājums:
$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 );
Tas value
ir pašreizējā datuma masīvs - 1 diena un 31 diena no pašreizējā datuma. Tā kā mēs izmantojam salīdzinājumu “BETWEEN”, tiks vaicātas tikai ziņas starp vērtību masīvu, tāpēc mēs vēlamies tos kompensēt par vienu dienu.
Izmantojot šo vaicājumu, jūs parādīsit jebkuru notikumu, kas notiek nākamo 30 dienu laikā.
Secinājums
WP_Query
Klase ir ļoti elastīga klase, kas ļaus jums izveidot daudzus pasūtījuma vaicājumiem. Ja vēlaties uzzināt vairāk par dažādiem argumentiem, kurus varat izmantot vaicājumiem, iesaku pārlūkot WP_Query
kodeksa lapu.