Домой WordPress WordPress: Вопросы и ответы Поиск по произвольному полю из формы фильтра
6ответ(ов) в теме
Tesessssss
не в сети 4 года
На сайте с 05.05.2014
Участник
Тем 5
Сообщения 12
1
17:29

Всем привет.

Данные брал из статьи

Вы не можете просматривать опубликованные ссылки

Помогите, как правильно сделать массив из двух 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 в один аргумент? И как правильно вывести в поиске записи, содержащие цифирные параметры?

Редакции сообщения
07.10.2017 17:30TesessssssПричина: не указано
07.10.2017 18:00Андрей CSПричина: не указано
0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
2
19:13

данные массива для сортировки по произвольному полю price:

$args['orderby'] => 'meta_value_num',
$args['meta_key'] => 'price'

0
Tesessssss
не в сети 4 года
На сайте с 05.05.2014
Участник
Тем 5
Сообщения 12
3
20:42

Андрей CS сказал(а)
данные массива для сортировки по произвольному полю price:

$args['orderby'] => 'meta_value_num',
$args['meta_key'] => 'price'

спасибо за ответ, это сложнее для меня) я думал как то попроще можно сделать.

ну допустим, если поменять местами meta_key с первым $args, в поиске все равно не отобразится по этому ключу сортировка. А тут как сделать, чтоб сработали условия? В пути указывается ключ price, но результата нет.

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
4
20:57

Tesessssss сказал(а)
я думал как то попроще можно сделать

а что тут сложного, надо просто верно сформировать массив на выборку данных, пока тот код, который вы привели вообще неверный, я вам и указал как именно надо задавать сортировку по произвольному полю. Если что то не поняли, то задавайте конкретные вопросы и приведите свой код

0
Tesessssss
не в сети 4 года
На сайте с 05.05.2014
Участник
Тем 5
Сообщения 12
5
21:54

Андрей 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'

0
Андрей CS
не в сети 14 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16861
6
10:12

Я сомневаюсь, что вы вообще контролируете ситуацию в своем коде. То вы сообщаете, что необходимо сделать сортировку по '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);

0
Вы не имеете права на публикацию сообщений в этой теме