Домой Wp-Recall WP-Recall: Проблемы и решения Поиск по значению произвольного поля.
25ответ(ов) в теме
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
1
14:28

Делаю фильтр под магазин, есть дополнительное поле shop_sells , в котором есть параметры, первый пустой, остальные Акция, Распродажа, Скидка, поле в админке осуществляется в виде выпадющего списка.

Вопрос в том, что нужно дописать к обработчику:

'meta_key' => $_GET['meta_key'],

Думал приписывать в фильтр meta_key по value, но он не работает.

код хтмл

<p><label>Сортировка по</label><br />
<select name="meta_key">
<option value="shop_sells">Вид акции</option>
</select>
</p>

<select name="shop_sells">
<option value="akcia">Акция</option>
<option value="byprice">Распродажа</option>
<option value="selldown">Скидка</option>
</select>

Я дописал в кастомный поиск:

array(  
            'key' => 'shop_sells',  
            'value' => '', 
            'value' => 'akcia', 
            'value' => 'byprice',
            'value' => 'selldown', 
            'compare' => 'NOT LIKE' 
        )

Видимо в форме чтото не так. если убрать сортировку по meta_key, тоже не фильтрует.

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

не верно формируете массив на основе переданных данных с формы.
Пример из статьи:

'meta_query' => array(  
        array(  
            'key' => 'price-products',  //meta_key произвольного поля
            'value' => array( $_GET['min-price'], $_GET['max-price'] ), //значение произвольного поля
            'type' => 'numeric',
            'compare' => 'BETWEEN' 
        )
    ) 

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
3
15:33

Андрей Plechev сказал(а)

не верно формируете массив на основе переданных данных с формы.
Пример из статьи:

'meta_query' => array(  
        array(  
            'key' => 'price-products',  //meta_key произвольного поля
            'value' => array( $_GET['min-price'], $_GET['max-price'] ), //значение произвольного поля
            'type' => 'numeric',
            'compare' => 'BETWEEN' 
        )
    ) 

Так, тогда у меня получается с хтмл проблемы, можно сформировать option value в кирилице? такого типа:
sw_sell у меня доп.поле, выпадающий список тип поля, поля списка на русском, не могу понять элементарного, как его выдернуть правильно...

<p><label>По спецпредложениям</label><br />
<select name="sw_sell">
<option value="Акция" >дате добавления</option>
<option value="Распродажа">заголовку</option>
<option value="Скидка">цене</option>
<option value="Заканчивается">цене</option>
</select>
</p>

и функция будет тогда дополнительно

'meta_query' => array(
array(
'key' => 'sw_sell', //meta_key произвольного поля
'value' => array( $_GET['Акция'], $_GET['Распродажа'], $_GET['Скидка'] ,$_GET['Заканчивается']) //значение произвольного поля
'type' => 'text',
'compare' => '='
)
)

или все таки правильнее сделать так:

<select name="sw_sell">
<option value="akcia">Акция</option>
<option value="byprice">Распродажа</option>
</select>

и указать :

'value' => array( $_GET['akcia'], $_GET['byprice'] ),

Так получится то wp сам присваивает и находит значение? Те option присваивает параметр 1,2,3 и тд, а то как кириллически это называется, значения не имеет?

0
Андрей CS
не в сети 12 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
4
15:38

Во-первых, GET передает параметр name со значением value
т.е. из вашей формы будет передаваться $_GET['sw_sell']
Во-вторых, массиве meta_query значение value может быть любым, но в него массив передается только в случае compare=BETWEEN, в вашем же случае надо передавать просто $_GET['sw_sell'], что будет внутри, по тому и будет производится поиск

'meta_query' => array(
array(
'key' => 'sw_sell',
'value' => $_GET['sw_sell']
'type' => 'text',
'compare' => '='
)
)

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
5
16:33

Андрей Plechev сказал(а)

Во-первых, GET передает параметр name со значением value
т.е. из вашей формы будет передаваться $_GET['sw_sell']
Во-вторых, массиве meta_query значение value может быть любым, но в него массив передается только в случае compare=BETWEEN, в вашем же случае надо передавать просто $_GET['sw_sell'], что будет внутри, по тому и будет производится поиск

'meta_query' => array(
array(
'key' => 'sw_sell',
'value' => $_GET['sw_sell']
'type' => 'text',
'compare' => '='
)
)

Параметр передает, но к сожалению пос не выводит...

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

значит пост не найден, вы передаете не полные данные и не уверен, что точные, чтобы можно было сказать где у вас ошибка.

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
7
17:29

Андрей Plechev сказал(а)

значит пост не найден, вы передаете не полные данные и не уверен, что точные, чтобы можно было сказать где у вас ошибка.

Я выбираю к примеру "заканчивается", print_r мне выводит small_quant , форма поиска передает sw_sell=small_quant&num=-1&meta_key=price-products . С какой стороны не посмотри, все должно работать...Может просто я не в том месте формы вывожу код выбора вида акции? Он в форме у меня идет после : "сортировка по"

0
Андрей CS
не в сети 12 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
8
17:41

вообще не понятно к чему тут это meta_key=price-products
по какому типу постов производится поиск? если тип записей не post, то его надо обязательно указывать в массиве аргументов к query_posts

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
9
17:55

Андрей Plechev сказал(а)

вообще не понятно к чему тут это meta_key=price-products
по какому типу постов производится поиск? если тип записей не post, то его надо обязательно указывать в массиве аргументов к query_posts

Это я, дурак, с примера скопировал и не удалилв конце формы данные с примером. Сейчас убрал и все равно таже история, пост не выводится...Ищу по продуктам, как по умолчанию в recall, в query все аргументы стоят как в примере.

попытался поставить:

query_posts('post_type=products');

выводит просто все продукты в ряд.

Вот, теперь понял почему ничего не фильтрует, когда добавил второй массив в meta_query перестал работать поиск полностью, если его удалить то сам поиск отдельно работает как обычно.


  $args = array(  
        'post_type' => 'products',
        's' => $_GET['word'],
        'meta_key' => $_GET['meta_key'],
        'posts_per_page' => $_GET['num'], 
        'paged' => get_query_var( 'paged' ),
        'order' => $_GET['order'], 
        'orderby' => $_GET['orderby'],
        'tax_query' => array(  
            array(  
                'taxonomy' => 'prodcat',  
                'field' => 'id',  
                'terms' => array($_GET['prodcat'])  
            )  
        ),
        'meta_query' => array(  
            array(  
                'key' => 'price-products',  
                'value' => array( (int)$_GET['min-price'], (int)$_GET['max-price'] ),
                'type' => 'numeric',
                'compare' => 'BETWEEN' 
            ),
         array(
                'key' => 'sw_sell',
                'value' => $_GET['sw_sell'],
                'type' => 'text',
                'compare' => '='
                )
           
        )  
    );

    query_posts( $args ); ?>
 

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

Вы если не понимаете как это вообще работает, но не надо сразу брать готовый пример и пытаться его изменить, лучше сделайте сначала сами небольшую форму с одним-двумя полями работайте с ней.
Я не понимаю, если массив формируется полностью как из примера с добавлением поиска по доп. произвольному полю, то как выглядит форма?

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
11
18:34

Андрей Plechev сказал(а)

Вы если не понимаете как это вообще работает, но не надо сразу брать готовый пример и пытаться его изменить, лучше сделайте сначала сами небольшую форму с одним-двумя полями работайте с ней.
Я не понимаю, если массив формируется полностью как из примера с добавлением поиска по доп. произвольному полю, то как выглядит форма?

Принцип я понял, мне нужно было все основное и формы + сделать поиск по акциям и скидкам из одного произвольного поля, код формы:

			<!-- Фильтр -->
			<div id="customsearch">
				<form action="/customsearch/" method="get">
<!-- //выборка по отдельному слову -->
<p><label>Поисковый запрос</label><br />
<input type="text" name="word" value=""></p>
<!-- //выборка по терминам определенной таксономии, в нашем случае prodcat -->
<p><label>Укажите товарную категорию:</label><br />
<select name="prodcat">
<option value="">--------</option>
<option value="4">Первая категория</option>
<option value="6">Вторая категория</option>
</select>
</p>
<!-- //Выборка по значениям цены, которые указаны произвольными полями -->
<p><label>Диапазон цены</label><br />
от <input type="text" name="min-price" size="3" value="">
до <input type="text" name="max-price" size="3" value=""></p>
<!-- //Указание сортировки результатов выборки -->
<!-- //Тут мы можем отсортировать и по значению цены, заданного -->
<!-- //произвольным полем -->
<p><label>Сортировка по</label><br />
<select name="orderby">
<option value="date">дате добавления</option>
<option value="title">заголовку</option>
<option value="meta_value_num">цене</option>
</select>
</p>

<p><label>По спецпредложениям</label><br />
<select name="this_sale">
<option value="">--------</option>
<option value="akcia">Акция</option>
<option value="sell_prod">Распродажа</option>
<option value="perce_prod">Скидка</option>
<option value="small_quant">Заканчивается</option>
</select>
</p>


<!-- //Указание направление результатов сортировки -->
<p><label>Направление сортировки:</label><br />
<input type="radio" name="order" value="DESC"> по убыванию<br />
<input type="radio" name="order" value="ASC"> по возрастанию </p>
<!-- //Указание количества записей на одну страницу -->
<p><label>Получить:</label><br />
<select name="num">
<option value="-1">Все товары</option>
<option value="2">2 товара</option>
<option value="4">4 товара</option>
<option value="6">6 товаров</option>
</select>
</p>
<p><input type="submit" value="Получить товары"></p>

</form>
</div>

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

выведите массив $args через print_r после отправки данных с формы и скиньте сюда результат

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
13
19:02

Андрей Plechev сказал(а)

выведите массив $args через print_r после отправки данных с формы и скиньте сюда результат

Array Array ( [post_type] => products [s] => Слово [meta_key] => [posts_per_page] => -1 [paged] => 0 [order] => DESC [orderby] => title [tax_query] => Array ( [0] => Array ( [taxonomy] => prodcat [field] => id [terms] => Array ( [0] => 4 ) ) ) [meta_query] => Array ( [0] => Array ( [key] => price-products [value] => Array ( [0] => 1000 [1] => 5000 ) [type] => numeric [compare] => BETWEEN ) ) )

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

т.е. у вас есть товар находящийся в товарной категории - ID 4, имеющий в названии вхождение "Слово" и находящийся в диапазоне цен от 1000 до 5000?

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
15
19:28

Андрей Plechev сказал(а)

т.е. у вас есть товар находящийся в товарной категории - ID 4, имеющий в названии вхождение "Слово" и находящийся в диапазоне цен от 1000 до 5000?

Так точно, по нему и искал...ето без второго массива, а со вторым массивом(тот что по акциями ищет), код такой

Array ( [post_type] => products [s] => товар [meta_key] => [posts_per_page] => -1 [paged] => 0 [order] => DESC [orderby] => date [tax_query] => Array ( [0] => Array ( [taxonomy] => prodcat [field] => id [terms] => Array ( [0] => 4 ) ) ) [meta_query] => Array ( [0] => Array ( [key] => price-products [value] => Array ( [0] => 1000 [1] => 5000 ) [type] => numeric [compare] => BETWEEN ) [1] => Array ( [key] => this_sale [value] => small_quant [type] => text [compare] => = ) ) )

Название дополнительного поля поменял на this_sale и оформлено в виде чекбокса, работаю с ADVCustomFields.

0
Андрей CS
не в сети 12 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
16
19:41

вроде все верно.
Когда не ясна причина проблемы, лучше всего пока забыть про форму и попробовать сформировать массив с данными вручную, например, проверим получение товаров:

$args = array('post_type'=>'products');
query_posts($args);

Если товары получаем, то усложняем массив дополнив его выборкой по цене:
$args = array(
'post_type'=>'products',
'meta_query'=>array('key'=>'price-products','value'=>array(1000,5000),'type'=>'numeric')
);
query_posts($args);

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

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
17
20:06

Массив формируется нормально, если убрать второй массив аргументов для акций, а вот если его написать, то массив не работает с самого первого параметра...Дето именно во втором массиве, но догнать в чем именно, навыков пока не хватает...

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

т.е. ПОИСК работает без внедрения поиска по доп. произвольному полю?

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
19
20:32

Андрей Plechev сказал(а)

т.е. ПОИСК работает без внедрения поиска по доп. произвольному полю?

Сам по себе да, работает отлично, после того как дописали:

 array(
                'key' => 'this_sale',
                'value' => $_GET['this_sale'],
                'type' => 'text',
                'compare' => '='
                )
           
        )  

Работать перестает...

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

ну так надо было ранее написать об этом, я бы не запрашивал код формы и весь массив данных.
Есть уверенность, что произвольное поле с meta_key = this_sale принадлежит какому-либо товару?
Пробуйте передать данный массив вручную как я писал выше.

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
21
20:46

Андрей Plechev сказал(а)

ну так надо было ранее написать об этом, я бы не запрашивал код формы и весь массив данных.
Есть уверенность, что произвольное поле с meta_key = this_sale принадлежит какому-либо товару?
Пробуйте передать данный массив вручную как я писал выше.

Я в середине еще написал) думал не так важно, раз не заметили. Привязано поле к типу записи = products 100%

0
Андрей CS
не в сети 12 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
22
20:48

Пробуйте передать данный массив вручную как я писал выше.

$args = array(
'post_type'=>'products',
'meta_query'=>array('key'=>'this_sale','value'=>'small_quant')
);
query_posts($args);

что получается?

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
23
14:27

Андрей Plechev сказал(а)

Пробуйте передать данный массив вручную как я писал выше.

$args = array(
'post_type'=>'products',
'meta_query'=>array('key'=>'this_sale','value'=>'small_quant')
);
query_posts($args);

что получается?

Таже беда, совсем не работает. Кстати если не отправлены значения мин и макс цены, тогда тоже отсев не идет, если к примеру выбрана только одна категория и все. Еще пытался сделать отсев по возрастанию и убыванию поля price-product , выдает ошибку..

0
Андрей CS
не в сети 12 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
24
15:35

Если даже такой массив не работает, значит где то у вас косяк, либо metakey либо value произвольного поля не верное.

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
25
16:03

Андрей Plechev сказал(а)

Если даже такой массив не работает, значит где то у вас косяк, либо metakey либо value произвольного поля не верное.

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

0
Тема закрыта. Публикация новых сообщений запрещена.