Потребителски цикъл / заявка въз основа на персонализирани полета - CSS-трикове

Anonim
Последно актуализирано от Джейсън Уит.

Ако проектирате или разработите теми или приставки на WordPress, има голяма вероятност някой ден да се наложи да направите заявка за персонализирани мета полета. Това са онези напълно персонализирани двойки ключ / стойност, които можете да прикачите към всяка публикация, страница или персонализиран тип публикация. WordPress има основен потребителски интерфейс за тях по подразбиране или можете да използвате нещо като Разширени персонализирани полета, за да им харесате. Но под капака ACF използва редовни персонализирани полета.

Тази страница с много фрагменти, която разглеждате в момента, е написана през 1999 г. По това време, за да направите заявка за публикации с конкретни персонализирани полета, ще трябва да използвате глобалната променлива `$ wpdb`. Това може да се използва за създаване на MySQL заявки, които класът WordPress WP_Query () не поддържа. За щастие днес WordPress има аргументи, които поддържат заявки за персонализирани мета полета.

Тук ще разгледаме различните начини, по които можете да заявявате и прехвърляте публикации с конкретни персонализирани полета (и техните стойности). Ще можете да използвате тази информация, независимо дали използвате WP_Queryкласа query_posts(), или get_posts(). Тъй като query_posts()и get_posts()са обвивки за WP_Queryкласа. Всички те приемат едни и същи аргументи.

Аргументите на заявката

Ето един основен пример за заявка за WordPress, взета от 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();

Това $argsе най-важният бит там. Ще предаваме различни аргументи, за да направим тази работа така, както искаме.

Когато правите заявки за персонализирана мета, можете да използвате две „групи“ аргументи. Едната група е за обикновена заявка за персонализирано мета поле, а другата група за по-сложни заявки за мета полета по избор. Нека започнем с простата група.

meta_key

На meta_keyаргумента, ще разгледате някой пост, който има мета идентификационния номер на персонализирания поле запазва в базата данни, независимо дали има или няма стойност, запазена за областта. Това meta_keyе идентификаторът, който давате на вашите мета полета. Като този:

Този пример ще поиска всяка публикация, която има персонализирано мета поле с идентификатора "field1".

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

meta_value

На meta_valueаргумента заявки пост, които имат стойността, която се дефинира. В meta_valueаргумент се използва за низови стойности. Този пример ще поиска всички публикации с персонализирано мета поле, което има стойността "data1".

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

Можете също така да комбинирате двете. Този пример ще заявява само публикации, които имат персонализирано мета поле с идентификатора „field1“, което има стойността на „data1“.

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

meta_value_num

Аргументът meta_value_num е подобен на аргумента `meta_value`. Когато meta_valueаргументът е мен за низови стойности, той meta_value_numе предназначен за числови стойности.

Този пример показва как да се направи заявка за персонализираното мета поле „field1“, ако то има стойност „10“.

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

meta_compare

На meta_compareаргумента, прави точно това, което звучи като. Това ще ви позволи да използвате сравнителни елементи с аргументите `meta_value` и` meta_value_num`. Сравнителите, които можете да използвате, са '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , „МЕЖДУ„, „НЕ МЕЖДУ“, „НЕ СЪЩЕСТВУВА“, „REGEXP“, „НЕ REGEXP“ или „RLIKE“. Ето пример, който показва как да запитвате всички публикации, които нямат стойността на "data1".

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

Още сложни заявки

meta_query

Основният аргумент, който ще използвате за сложни заявки, е meta_query. Този самостоятелен аргумент не прави нищо. Той просто казва на WordPress, че искате да направите заявка за персонализирани мета полета. Ще добавите допълнителни аргументи, meta_queryкоито ще бъдат използвани за дефиниране на заявката.

ключ, стойност и сравнение

Аргументите key, valueработа точно по същия начин, както и meta-key, meta-valueкакто е описано по-горе. Комплексът compareе подобен на простия compareпо-горе, но е необходим различен списък на сравнителните устройства. Комплексът compareизползва '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN "," НЕ МЕЖДУ "," СЪЩЕСТВУВА "или" НЕ СЪЩЕСТВУВА ". valueможе да бъде масив, но само когато сравнението използва „IN“, „NOT IN“, „BETWEEN“ или „NOT BETWEEN“.

Ако използвате „EXISTS“ или „NOT EXISTS“ с compare, не е необходимо да указвате valueаргумент.

Ето пример, който ще заявява публикации, ако има „field1“ със стойността „data1“ и „field2“ със стойността, която не е „data2“.

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

отношение

Използва relationсе, когато искате да поискате персонализирани мета данни, използвайки логическа връзка. Можете да използвате ANDили OR. Например ще използвате, за ANDда сравните дали data1 и data2 отговарят на критериите и използвате ORдали data1 или data2 отговарят на критериите.

Този аргумент е самостоятелен. Това означава, че не се появява в отделни параметри на персонализирано мета поле. Нека разгледаме един пример. Този пример ще поиска само публикации, които имат „поле1“ със стойността на „данни1“ и „поле2“ със стойността на „данни2“.

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

Ако сте променили relationна „ИЛИ“. Тогава ще поиска всички публикации, ако „field1“ има стойността на „data1“ или ако „field2“ има стойността на „data2“.

Тип

На typeаргумента ви позволява да изберете типа на данните за запитване. Можете да използвате „NUMERIC“, „BINARY“, „CHAR“, „DATE“, „DATETIME“, „DECIMAL“, „SIGNED“, „TIME“ или „UNSIGNED“.

Типът „ДАТА” може да се използва с compare„МЕЖДУ” само ако форматът на датата е „ГГГГГММДД”.

Този пример ще поиска всяка публикация, където стойността на “field1” е числова.

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

Пример от реалния свят

Досега съм давал само примери с произволни данни и полета. Сега бих искал да ви покажа пример от реалния свят за заявки за персонализирани мета полета.

Сценарият

Създали сте персонализиран тип публикация за събития. Типът публикация за събития има персонализирано поле за дата с ID на event_date. Искате да създадете заявка, която да показва всички събития, които започват на текущата дата през следващите 30 дни.

Ще използваме meta_queryаргумента, тъй като искаме да използваме typeаргумента, за да дефинираме полето „event_date“ като тип данни „DATE“.

Това е заявката:

$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страницата на кодекса.