Вивчення WP_Meta_Query і WP_Date_Query

298

Від автора: у цьому уроці ми розглянемо два споріднених класу WP_Meta_Query і WP_Date_Query в WordPress. Менше слів, перейдемо відразу до справи!

Робота з усіма типами мета даних в класі WP_Meta_Query

Клас WP_Meta_Query – клас хелпер, допомагає класу WP_Query створювати запити за даними мета. Як вам відомо, в базі даних WordPress зберігається три типи мета даних: мета дані постів, користувальницькі мета дані і дані коментарів. У попередніх уроках ми переконалися в тому, що всередині запитів в класах WP_Query, WP_User_Query і WP_Comment_Query можна створювати мета запити (за допомогою параметра ‘meta_query’). Насправді клас WP_Meta_Query як раз і відбувається, коли ми виконуємо ці запити.

Виходить, з допомогою WP_Meta_Query можна отримати SQL-запити. У даний клас не повертається результат виконання запитів, він готує SQL команди, які ви можете використовувати в інших місцях.

Приклади використання WP_Meta_Query

Без прикладів цю статтю не можна назвати уроком, адже так? На простому прикладі нижче я покажу, як використовувати клас WP_Meta_Query в реальних ситуаціях. (Отримання SQL запиту з мета запиту дуже специфічна річ, але я постараюся підібрати зрозумілий приклад).

Скажімо, ви хочете створити плагін «схожі пости» на своєму сайті. Плагін буде відображати список постів з однаковими мета даними по певному ключу. І замість мета створення запиту в об’єкті WP_Query, ви витягаєте SQL запит, щоб потім динамічно його використовувати в окремих шматках коду. Нижче показано, як це зробити:

‘OR’,
array(
‘meta_value’ => ‘Some_Value’,
‘compare’ => ‘=’
),
array(
‘meta_key’ => ‘Some_Other_Key’,
‘meta_value’ => ‘Some_Other_Value’,
‘compare’ => ‘=’
)
);
$my_meta_query = new WP_Meta_Query;
$my_meta_query->parse_query_vars( $my_meta_query_args );
$my_meta_query_sql = $my_meta_query->get_sql( ‘post’, $wpdb->posts, ‘ID’ );
?>

От і все, в змінній $my_meta_sql зберігається наш SQL запит, який можна тепер використовувати де завгодно.

date запити і клас WP_Date_Query

Як і WP_Meta_Query, клас WP_Date_Query є хелпером для WP_Query, WP_User_Query і WP_Comment_Query. Цей клас вперше з’явився в WordPress v.3.7. На той момент цей клас не підтримував WP_User_Query. І тільки починаючи з версії 4.1 стало можливим створювати запити всередині користувальницьких таблиць (поле user_registered).

Подібно класу WP_Meta_Query і його здатності запитувати ключі і значення, з допомогою класу WP_Date_Query можна отримати дані з посади, коментаря і таблиці користувачів. І також, як і з WP_Meta_Query, даний клас дозволяє підготувати SQL-запит.

Приклад використання WP_Date_Query

Щоб повністю зрозуміти принципу роботи даного класу, розберемо приклад. Приклад буде досить специфічним, але без нього не обійтися. Уявімо, що з якоїсь причини нам необхідно витягти всі коментарі за минулий місяць, додані до 12 дня. Нижче показаний код цього дивного запиту:

date( ‘n’ ),
),
array(
‘before’ => ‘noon’
),
‘relation’ => ‘AND’
);
$my_date_query = new WP_Date_Query( $my_date_query_args, ‘comment_date’ );
$my_date_query_sql = $my_date_query->get_sql();
?>

Не забувайте, що можна використовувати відносний формат дати у PHP, дуже корисна річ. Порада: у Christian Bruckner написана чудова стаття про принцип роботи WP_Date_Query на сайті great on post MarketPress.com. Вона трохи застаріла (написана до виходу WordPress 4.1), але вона написана зрозумілою мовою і легко читається.

Висновок

Два наших класу хелперу завершують довгий подорож по класу WP_Query. Ця серія уроків була однією з найдовших на сайті Tuts+. Спасибі, що дійшли з нами до кінця! У наступній (і останньої) частини ви закріпимо пройдені навички. Бажаєте щось додати? Якщо так, не соромтеся залишати свої думки в коментарях. Якщо сподобалася стаття, не забудьте поділитися нею зі своїми друзями!