Прилагођена петља / упит заснован на прилагођеним пољима - ЦСС-трикови

Anonim
Последњи пут ажурирао Јасон Витт.

Ако дизајнирате или развијате ВордПресс теме или додатке, постоји велика шанса да ћете једног дана морати да упутите упит за прилагођена мета поља. То су они потпуно прилагођени парови кључ / вредност које можете приложити било којем посту, страници или прилагођеном типу поста. ВордПресс за њих подразумевано има основни кориснички интерфејс или можете да користите нешто попут напредних прилагођених поља да бисте их обожавали. Али испод хаубе АЦФ користи редовна стара прилагођена поља.

Ова врло исечена страница коју тренутно гледате написана је 1999. Тада, да бисте могли да тражите постове са одређеним прилагођеним пољима, морали бисте да користите глобалну променљиву `$ впдб`. То се може користити за креирање МиСКЛ упита које класа ВордПресс ВП_Куери () не подржава. Срећом данас, ВордПресс има аргументе који подржавају упите за прилагођена мета поља.

Овде ћемо покрити различите начине на које можете захтевати и пребацивати постове са одређеним прилагођеним пољима (и њиховим вредностима). Ове податке ћете моћи да користите било да користите WP_Queryкласу query_posts(), или get_posts(). Пошто су query_posts()и get_posts()омоти за WP_Queryчас. Сви они прихватају исте аргументе.

Аргументи упита

Ево основног примера ВордПресс упита преузетог из ВордПресс Цодек-а.

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();

$argsЈе важан део. Послаћемо различите аргументе да би ово функционисало како желимо.

Приликом упита за прилагођену мета постоје две „групе“ аргумената које можете користити. Једна група је за једноставни упит прилагођеног мета поља, а друга група за сложеније упите прилагођених мета поља. Почнимо са једноставном групом.

мета_кеи

meta_keyАргумент ће упит сваку поруку која има обичај на терену мета ИД сачувани у бази података, без обзира да ли постоји вредност сачуван за област. То meta_keyје ИД који дајете својим мета пољима. Овако:

Овај пример ће поставити упит било којој пошти која има прилагођено мета поље са ИД-ом „поље1“.

$args = array( 'meta_key' => 'field1' );

мета_валуе

meta_valueАргумент упита пост који има вредност коју дефинишете. meta_valueАргумент користи за вредности стринг. Овај пример ће упитати све постове са прилагођеним мета пољем које има вредност „дата1“.

$args = array( 'meta_value' => 'data1' );

Такође можете комбиновати то двоје. Овај пример ће тражити само постове који имају прилагођено мета поље са ИД-ом „поље1“ које има вредност „подаци1“.

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );

мета_валуе_нум

Аргумент мета_валуе_нум је сличан аргументу `мета_валуе`. Тамо где је meta_valueаргумент мент за стринг вредности, он meta_value_numје намењен нумеричким вредностима.

Овај пример показује како да извршите упит за прилагођено мета поље „фиелд1“ ако има вредност „10“.

$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );

мета_цомпаре

meta_compareАргумент ради управо оно што звучи. Омогућиће вам употребу упоређивача са аргументима `мета_валуе` и` мета_валуе_нум`. Компаратори које можете користити су '=', '! =', '>', '> =', '<', '<=', 'ЛИКЕ', 'НОТ ЛИКЕ', 'ИН', 'НОТ ИН' , „ИЗМЕЂУ“, „НЕ ИЗМЕЂУ“, „НЕ ПОСТОЈИ“, „РЕГЕКСП“, „НИЈЕ РЕГЕКСП“ или „РЛИКЕ“. Ево примера који показује како да упитате било који пост који нема вредност „дата1“.

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );

Сложенији упити

мета_куери

Главни аргумент који ћете користити за сложене упите је meta_query. Овај аргумент сам по себи не чини ништа. То ВордПресс-у само говори да желите да направите упит за прилагођена мета поља. Унутар њих ћете додати додатне аргументе meta_queryкоји ће се користити за дефинисање упита.

кључ, вредност и упореди

Аргументи key, valueрад потпуно исти начин као што је meta-key, meta-valueкако је горе описано. Комплекс compareје сличан оном compareгоре наведеном, али узима другачију листу упоређивача. Комплекс compareкористи '=', '! =', '>', '> =', '<', '<=', 'ЛИКЕ', 'НОТ ЛИКЕ', 'ИН', 'НОТ ИН', 'ИЗМЕЂУ ',' НЕ ИЗМЕЂУ ',' ПОСТОЈИ 'или' НЕ ПОСТОЈИ '. valueможе бити низ, али само када упоређивање користи „ИН“, „НОТ ИН“, „БЕТВЕЕН“ или „НОТ БЕТВЕЕН“.

Ако користите „ПОСТОЈИ“ или „НЕ ПОСТОЈИ“ са compare, не морате да наведете valueаргумент.

Ево примера који ће постављати упите за постове ако има „поље1“ са вредношћу „подаци1“ и „поље2“ са вредношћу која није „податак2“.

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );

однос

relationСе користи када желите да упит прилагођену мета података помоћу логичан однос. Можете користити ANDили OR. На пример, ANDупоређиваћете да ли подаци1 и подаци2 испуњавају критеријуме, а користите ORако подаци1 или подаци2 испуњавају критеријуме.

Овај аргумент је самосталан. Значи да се не појављује у појединачним прилагођеним параметрима мета поља. Погледајмо пример. Овај пример ће тражити само постове који имају „фиелд1“ са вредношћу „дата1“ и „фиелд2“ са вредношћу „дата2“.

$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );

Ако сте променили relationу „ИЛИ“. Тада би се поставило питање било којим постовима ако „поље1“ има вредност „подаци1“ или ако „поље2“ има вредност „подаци2“.

тип

typeАргумент вам омогућава да одаберете врсту података на упит. Можете да користите „НУМЕРИЦ“, „БИНАРИ“, „ЦХАР“, „ДАТЕ“, „ДАТЕТИМЕ“, „ДЕЦИМАЛ“, „ПОТПИСАНО“, „ТИМЕ“ или „УНСИГНЕД“.

Тип „ДАТУМ“ се може користити са compare„ИЗМЕЂУ“ само ако је формат датума „ГГГГММДД“.

Овај пример ће поставити упит било којој пошти где је вредност „поље1“ нумеричка.

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );

Пример из стварног света

До сада сам давао само примере са произвољним подацима и пољима. Сада бих желео да вам покажем пример стварног света за постављање упита према прилагођеним мета пољима.

Сценарио

Направили сте прилагођени тип објаве догађаја. Тип објаве догађаја садржи прилагођено поље за датум са ИД-ом event_date. Желите да направите упит који ће приказивати све догађаје који ће започети на тренутни датум у наредних 30 дана.

meta_queryАргумент ћемо користити као што желимо да користимо typeаргумент да дефинишемо поље „датум_датума“ као тип података „ДАТУМ“.

Ово је упит:

$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 );

То valueје низ текућег датума - 1 дан и 31 дан од тренутног датума. Будући да користимо компаратор „ИЗМЕЂУ“, тражит ће се само постови између поља вриједности, па их желимо надокнадити за један дан.

Помоћу овог упита приказаћете било који догађај који се догоди у наредних 30 дана.

Закључак

WP_QueryКласа је веома флексибилан класа која ће вам омогућити да креирате мноштво прилагођених упита. Ако желите да сазнате више о различитим аргументима које можете користити за упите, препоручујем да погледате WP_Queryстраницу кодекса.