5ответ(ов) в теме
klop9982@mail.ru
не в сети 4 года
На сайте с 13.11.2018
Участник
Тем 17
Сообщения 42
1
12:09
Версия WP-Recall: 16.16.1
Версия дополнения: 1.3.1

Как можно вывести категории с вожностью фильтрации? ( намекаю на аналог другого Вашего продукта Freelance NextGen)

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

попробуйте поискать доступные плагины для организации поиска публикаций в репозитории WP или можно взять за основу функцию вывода поискового фильтра из дополнения Freelance NextGen и переделать ее для поиска услуг от дополнения Shop Service

0
klop9982@mail.ru
не в сети 4 года
На сайте с 13.11.2018
Участник
Тем 17
Сообщения 42
3
14:31

Андрей CS сказал(а)
попробуйте поискать доступные плагины для организации поиска публикаций в репозитории WP или можно взять за основу функцию вывода поискового фильтра из дополнения Freelance NextGen и переделать ее для поиска услуг от дополнения Shop Service

Здравствуйте!

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

взял за основу фриланс нехтген добавил в файл functions-action.php

add_action( 'pre_get_posts', 'sm_task_query_filter', 10); function sm_task_query_filter($query) { if ( ! is_admin() && $query->is_main_query() ) { if(!$query->is_post_type_archive('service')) return; $meta_query = array(); if(isset($_GET['sms'])){ $query->set('s', $_GET['sms']); } if($_GET['ssubject']){ $query->set('tax_query', array( array( 'taxonomy' => 'service-category', 'field' => 'id', 'terms' => $_GET['ssubject'] ) )); } if(isset($_GET['smprice'])){ $meta_query[] = array( array( 'key' => 'sm-price', 'value' => $_GET['smprice'], 'type' => 'numeric', 'compare' => 'BETWEEN' ) ); } if(isset($_GET['smdays'])){ $meta_query[] = array( array( 'key' => 'sm-service-days', 'value' => $_GET['smdays'], 'type' => 'numeric', 'compare' => 'BETWEEN' ) ); } if(isset($_GET['forderby'])){ $sort = $_GET['forderby']; if($sort == 'date'){ $query->set('orderby', $_GET['forderby']); } if($sort == 'price'){ $query->set('orderby', 'meta_value_num'); $query->set('meta_key', 'sm-price'); } if($sort == 'days'){ $query->set('orderby', 'meta_value_num'); $query->set('meta_key', 'sm-service-days'); } } if(isset($_GET['forder'])){ $query->set('order', $_GET['forder']); } if($meta_query) $query->set('meta_query', $meta_query); } }

и в файл shortcodes.php

add_shortcode('sm-search-form', 'sm_get_search_form'); function sm_get_search_form($atts = false){ global $wpdb; extract(shortcode_atts(array( 'type'=> 'vertical' ), $atts)); $maxPrice = $wpdb->get_var("SELECT MAX(cast(postmeta.meta_value as unsigned)) FROM $wpdb->postmeta AS postmeta " . "INNER JOIN $wpdb->posts AS posts ON postmeta.post_id=posts.ID " . "WHERE posts.post_type = 'service' " . "AND posts.post_status='publish' " . "AND postmeta.meta_key='fng-price'"); $terms = get_terms( array( 'taxonomy' => 'service-category', 'hide_empty' => false, 'parent' => 0 ) ); $category = array( '' => __('Все категории') ); foreach($terms as $term){ $category[$term->term_id] = $term->name; } $fields = array( array( 'type' => 'text', 'slug' => 'sms', 'default' => isset($_GET['sms'])? $_GET['sms']: '', 'title' => __('Поиск по слову'), 'placeholder' => __('Поиск...') ), array( 'type' => 'select', 'slug' => 'ssubject', 'title' => __('Категория'), 'default' => isset($_GET['ssubject'])? $_GET['ssubject']: '', 'values' => $category ), array( 'type' => 'range', 'slug' => 'smprice', 'title' => __('Стоимость'), 'value_max' => ($maxPrice && $maxPrice > 100000)? $maxPrice: 100000, 'value_step' => 100, 'default' => isset($_GET['smprice'])? $_GET['smprice']: '', ), array( 'type' => 'range', 'slug' => 'smdays', 'title' => __('Срок выполнения'), 'value_max' => ($maxDays && $maxDays > 365)? $maxDays: 365, 'value_step' => 1, 'default' => isset($_GET['smdays'])? $_GET['smdays']: '', ), array( 'type' => 'radio', 'slug' => 'forderby', 'title' => __('Сортировка по'), 'values' => array( 'price' => __('стоимости'), 'date' => __('дате'), 'days' => __('сроку') ), 'default' => isset($_GET['forderby'])? $_GET['forderby']: 'price', ), array( 'type' => 'radio', 'slug' => 'forder', 'title' => __('Вывод по'), 'values' => array( 'ASC' => __('возрастанию'), 'DESC' => __('убыванию') ), 'default' => isset($_GET['forder'])? $_GET['forder']: 'ASC', ), array( 'type' => 'hidden', 'slug' => 'post_type', 'value' => 'service' ) ); $fields = apply_filters('sm_search_fields', $fields); $content = '<div class="fng-search-form type-'.$type.'">'; $content .= rcl_get_form(array( 'fields' => $fields, 'method' => 'get', 'action' => get_post_type_archive_link('service'), 'submit' => __('Найти проект') )); $content .= '</div>'; return $content; }

Работает, но есть пара вопросов
1. Как сделать чтобы отображались также подкатегории?
2. Не смог понять как вычислить максимальные значения цены и сроков, поэтому прописал их фиксированно. Как сделать правильно?

Редакции сообщения
21.12.2018 14:32klop9982@mail.ruПричина: дополнено
0
Андрей CS
не в сети 10 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16996
4
14:45

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

0
klop9982@mail.ru
не в сети 4 года
На сайте с 13.11.2018
Участник
Тем 17
Сообщения 42
5
16:02

со вторым вопросом разобрался ) нужно было указать вместо AND postmeta.meta_key='fng-price' - AND postmeta.meta_key='sm-price'

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