Иногда необходимо на страницах сайта сделать выборку из базы по каким либо параметрам. Например вы решили сделать фильтрацию по свойствам товаров (атрибутам Woocommerce).
Или просто нужно получить какие-то специфичные данные по GET запросу в браузере по ссылке или от какого-либо плагина.
Для подобных задач есть встроенный механизм WordPress – WP_Query
Приведём пример на примере задачи подбора аккумуляторов на вашем сайте.
Исходные данные:
1. Созданные и заполненые атрибуты Woocommerce — Полярность, ёмкость, размер
У каждого атрибута должны быть заполнены соответствующий набор значений.
2. В карточках товара присвоены созданные атрибуты.
Кстати заполнение атрибутов Woocommerce так же даёт возможность вам использовать на сайте фильтрацию — что очень удобно для потенциальных покупателей.
Представим что мы хотим получить данные из базы при помощи GET запроса на новой странице результатов.
— Для этого создадим отдельный шаблон для вашей темы.
— Присвоим только что созданный шаблон какой нибудь странице WordPress через админ панель
В коде шаблона странице поместим следующий обработчик
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
$polyarnost = ''; //Полярность $razmer = ''; //Размер $emkost = ''; //Емкость if (isset($_REQUEST['polyarnost'])) { $polyarnost = $_REQUEST['polyarnost']; } if (isset($_REQUEST['razmer'])) { $razmer = $_REQUEST['razmer']; } if (isset($_REQUEST['emkost'])) { $emkost = $_REQUEST['emkost']; } $args = array( 'post_type' => array('product', 'product_variation'), 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'pa_polyarnost', //Название таксономии - в WP идёт 'field' => 'name', //с приставкой pa_"слуг" заданный вами при заведении 'terms' => $polyarnost, //атрибута 'operator' => 'IN', ), array( 'taxonomy' => 'pa_razmer', 'field' => 'name', 'terms' => $razmer, 'operator' => 'IN', ), array( 'taxonomy' => 'pa_emkost', 'field' => 'name', 'terms' => $emkost, 'operator' => 'IN', ) ) ); if (!empty($polyarnost) || !empty($razmer) || !empty($emkost)) { $query = new WP_Query($args); //Запрос в БД сайта global $wp_query; $wp_query = $query;//Заменяем глобальный объект } //Далее идёт стандартный вывод, так как Wordpress берёт данные из объекта wp_query wc_get_template('archive-product.php'); //Подключение шаблона woo из папки \woocommerce\templates\ wp_reset_query();//Сброс глобального объекта |
Данный код делает запрос к базе таксономий через класс WP_Query. Результатом работы будет объект с нужными постами(товарами). Который можно поместить в глобальный объект WordPress “wp_query” — что бы не разрушать стандартную логику работы вывода информации на страницах WordPress.