Всем привет.
Данные брал из статьи
Помогите, как правильно сделать массив из двух meta_key.
Оба массива $args сортируют записи либо по комментариям, либо по цене.
$args = array ( 'post_type' => 'post', 's' => $_GET['s'], 'orderby' => $_GET['orderby'], 'meta_key' => 'comment_count', ); $args = array( 'meta_key' => 'price', 'orderby' => 'meta_value_num', ); query_posts($args);
Сортировка по комментария при поиске правильно работает, но вот при выборе по цене(числовому значению), данные в поиске не сортируются.
Вот форма, как выбираются параметры:
<select name="orderby"> <option value="comment_count">комментарии</option> <option value="price">цена</option> </select> также делал массив через 'meta_query' => array ( array ( 'key' => 'price', 'orderby' => 'meta_value_num', ), )
но в этом случае записи уже не сортируются правильно.
сделал на отдельной странице вывод записей по цене - 'meta_key' => 'price'
данные сортируются нормально, но когда начинаю выбирать из селекта price, то на странице поиска записи выводятся только по дате создания.
я так понимаю, что еще проблема в передачи из формы моего параметра, которая неправильная
Как правильно добавить 2 meta_key в один аргумент? И как правильно вывести в поиске записи, содержащие цифирные параметры?
Андрей CS сказал(а)
данные массива для сортировки по произвольному полю price:
$args['orderby'] => 'meta_value_num', $args['meta_key'] => 'price'
спасибо за ответ, это сложнее для меня) я думал как то попроще можно сделать.
ну допустим, если поменять местами meta_key с первым $args, в поиске все равно не отобразится по этому ключу сортировка. А тут как сделать, чтоб сработали условия? В пути указывается ключ price, но результата нет.
Tesessssss сказал(а)
я думал как то попроще можно сделать
а что тут сложного, надо просто верно сформировать массив на выборку данных, пока тот код, который вы привели вообще неверный, я вам и указал как именно надо задавать сортировку по произвольному полю. Если что то не поняли, то задавайте конкретные вопросы и приведите свой код
Андрей CS сказал(а)
Tesessssss сказал(а)
я думал как то попроще можно сделатьа что тут сложного, надо просто верно сформировать массив на выборку данных, пока тот код, который вы привели вообще неверный, я вам и указал как именно надо задавать сортировку по произвольному полю. Если что то не поняли, то задавайте конкретные вопросы и приведите свой код
вот моя форма, которую использую с Вашей статьи
<form action="/" method="get"> <p> <label>Поисковый запрос</label> <input type="text" name="word" value=""> </p> <p> <label>Сортировка по</label> <select name="orderby"> <option value="comment_count">комментариям</option> <option value="price">цена</option> </select> </p> <p> <label>Направление сортировки:</label> <input type="radio" name="order" value="DESC"> по убыванию <input type="radio" name="order" value="ASC"> по возрастанию </p> <p> <input type="submit" value="Искать"> </p> <input type="hidden" name="meta_key" value="price-products"> </form> <?php $args = array ( 'post_type'=> 'post', 's'=> $_GET['word'], 'order'=> $_GET['order'], 'meta_key'=> $_GET['meta_key'], 'orderby'=> $_GET['orderby'], ); query_posts($args); ?>
по комментариям фильтрует правильно, хоть и убрал из кода другие параметры.
Как и говорил, что даже если заменить данные из meta_key и orderby на price и meta_value_num в этом массиве, то не будет фильтрации, вот тут я и не понял, как нужно правильно вывести из этого массива записи после нажатии кнопки поиска по цене.
поэтому и не понял, как можно добавить в этот аргумент еще один meta_key, в котором уже есть он
$args = array( 'meta_key' => 'price', 'orderby' => 'meta_value_num', );
вот отсюда и вопрос, как можно их совместить и чтобы выводились записи еще и по 'meta_key' => 'price'
Я сомневаюсь, что вы вообще контролируете ситуацию в своем коде. То вы сообщаете, что необходимо сделать сортировку по 'price', то в самой форме болтается 'price-products', определитесь все-таки со значением ключа произвольного поля цены.
Допустим, что это 'price', тогда, что вам мешает формировать массив динамически с условиями, т.е. делаете проверку на соответствие переданных с формы данных определенным условиям и в зависимости от этого указываете значение массива?
Например:
$args = array ( 'post_type'=> 'post', 's'=> $_GET['word'], 'order'=> $_GET['order'] ); if($_GET['orderby'] == 'price'){ $args['orderby'] => 'meta_value_num', $args['meta_key'] => 'price' }else{ $args['orderby'] => $_GET['orderby'], } query_posts($args);