Pielāgota cilpa / vaicājums, pamatojoties uz pielāgotajiem laukiem CSS-triki

Anonim
Pēdējo reizi atjaunināja Jason Witt.

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_Queryklasi query_posts()vai get_posts(). Kopš query_posts()un get_posts()ir WP_Queryklases 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 $argsir 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_keyArguments 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_keyir 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_valueArguments vaicājumi ziņu, kas ir vērtība, ko noteikt. meta_valueArguments 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_valuearguments ir virknes vērtības, tas meta_value_numir 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_compareArguments 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_querykas tiks izmantoti vaicājuma definēšanai.

atslēga, vērtība un salīdzinājums

Argumentus key, valuestrādā tieši tāpat kā meta-key, meta-valuekā aprakstīts iepriekš. Komplekss compareir līdzīgs iepriekšminētajam vienkāršajam compare, taču tam ir nepieciešams cits salīdzinājumu saraksts. Kompleksā comparetiek lietoti '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'STARB ”,“ NAV BETWEEN ”,“ EXISTS ”vai“ NOT EXISTS ”. valuevar 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 valuearguments.

Š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 relationizmantots, ja vēlaties vaicāt pielāgotus metadatus, izmantojot loģiskas attiecības. Jūs varat izmantot ANDvai OR. Piemēram, jūs izmantosiet, ANDlai salīdzinātu, vai data1 un data2 atbilst kritērijiem, un jūs izmantojat, ORja 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 relationuz “OR”. Tad tas vaicātu jebkurus ziņojumus, ja lauka1 vērtība ir “data1” vai ja lauka2 vērtība ir “data2”.

tips

typeArguments ļ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_queryargumentu, jo mēs vēlamies izmantot typeargumentu, 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 valueir 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_QueryKlase 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_Querykodeksa lapu.