Всем привет.
Данные брал из статьи
Помогите, как правильно сделать массив из двух 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);