Якщо ви розробляєте або розробляєте теми або плагіни WordPress, є велика ймовірність, що коли-небудь вам потрібно буде зробити запит на власні метаполя. Це ці повністю власні пари ключ / значення, які ви можете долучити до будь-якого допису, сторінки чи власного типу публікації. WordPress має базовий інтерфейс для них за замовчуванням, або ви можете використовувати щось на зразок розширених спеціальних полів, щоб пофантазувати з ними. Але під капотом ACF використовуються звичайні старі користувацькі поля.
Ця дуже фрагментарна сторінка, яку ви переглядаєте зараз, була написана в 1999 році. Тоді для того, щоб запитувати дописи з певними спеціальними полями, вам потрібно було б використовувати глобальну змінну `$ wpdb`. Це може бути використано для створення запитів MySQL, які клас WordPress WP_Query () не підтримує. На щастя, сьогодні у WordPress є аргументи, які підтримують запити до власних метаполів.
Тут ми розглянемо різні способи, якими ви можете надсилати запити та обмінювати повідомлення з певними спеціальними полями (та їх значеннями). Ви зможете використовувати цю інформацію незалежно від того, використовуєте ви WP_Query
клас,, query_posts()
або get_posts()
. Оскільки query_posts()
і get_posts()
є обгортками для WP_Query
класу. Усі вони приймають однакові аргументи.
Аргументи запиту
Ось базовий приклад запиту WordPress, взятий із кодексу WordPress.
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
Аргумент використовується для строкових значень. Цей приклад запитає будь-які публікації зі спеціальним мета полем, яке має значення “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_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'.
Якщо ви використовуєте "ІСНУЄ" або "НЕ ІСНУЄ" 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
для порівняння, якщо дані1 та дані2 відповідають критеріям, і ви використовуєте, OR
якщо дані1 або дані2 відповідають критеріям.
Цей аргумент є самостійним. Це означає, що він не відображається в окремих спеціальних параметрах метаполя. Давайте розглянемо приклад. Цей приклад буде запитувати лише повідомлення, які мають “field1” зі значенням “data1” і “field2” зі значенням “data2”.
$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', or 'UNSIGNED'.
Тип «ДАТА» може використовуватися з compare
«МІЖ», лише якщо формат дати - «РРРРРММДД».
Цей приклад запитає будь-яку публікацію, де значення “field1” є числовим.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Приклад із реального світу
Поки що я наводив лише приклади з довільними даними та полями. Тепер я хотів би показати вам реальний приклад запитів користувацьких метаполів.
Сценарій
Ви створили спеціальний тип публікації подій. Тип публікації подій має спеціальне поле дати з ідентифікатором 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
кодексу.