Ако проектирате или разработите теми или приставки на 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
страницата на кодекса.