Как в WordPress сделать фильтрацию произвольных записей по нескольким произвольным полям одновременно?
Приветствую.
Есть произвольный тип записей автомобили, в которых есть 4 параметра заданных в произвольных полях через ACF (марка, модель, тип, категория).
Нужно в режиме реального времени, фильтровать показ записей по всем заполненным полям.
Вот этот код только по одному одновременно фильтрацию делает, например, если я ввожу в первое поле Toyota, во второе начинаю вводить RAV, мне сначала выходит:
А если ввожу Toyota RAV4, то уже выводит правильно:
т.е. если заполнено поле Марка и модель, то он ищет только по модели. С остальными полями также.
Помогите пожалуйста разобраться с запросом.
Есть произвольный тип записей автомобили, в которых есть 4 параметра заданных в произвольных полях через ACF (марка, модель, тип, категория).
Нужно в режиме реального времени, фильтровать показ записей по всем заполненным полям.
Вот этот код только по одному одновременно фильтрацию делает, например, если я ввожу в первое поле Toyota, во второе начинаю вводить RAV, мне сначала выходит:
Марка ТС: VOLKSWAGEN
Модель ТС: 7HC (Transporter, Caravelle, Multivan)
А если ввожу Toyota RAV4, то уже выводит правильно:
Марка ТС: TOYOTA
Модель ТС: A2 - RAV4 (ACA20L-AZMNKW, ACA20L-AZPNKW, ACA21L-AWMNKW, ACA21L-AWPNKW)
т.е. если заполнено поле Марка и модель, то он ищет только по модели. С остальными полями также.
Помогите пожалуйста разобраться с запросом.
function my_scripts() { wp_enqueue_script('jquery-ui-autocomplete');}add_action('wp_enqueue_scripts', 'my_scripts');function my_autocomplete() {?><script> var data = { 'input_marka': '', 'input_model': '', 'input_tip': '','input_kat': '' }; jQuery(document).ready(function($) { jQuery('#input_marka').autocomplete({source: function (request, response) { var data = { input_marka: request.term};if (data.input_marka === '') { response([]); return;}jQuery.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', dataType: 'json', dаta: {action: 'my_autocomplete',dаta: data }, beforeSend: function() {jQuery('#results').html('<div class="loading">Идет обновление данных...</div>');jQuery('#results').addClass('loading'); }, success: function(data) {show_results(data); }});} }); jQuery('#input_model').autocomplete({ source: function(request, response) { var data = { input_model: request.term};if (data.input_model === '') { response([]); return;}jQuery.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', dataType: 'json', dаta: {action: 'my_autocomplete',dаta: data }, beforeSend: function() {jQuery('#results').html('<div class="loading">Идет обновление данных...</div>');jQuery('#results').addClass('loading'); }, success: function(data) {show_results(data); }}); } }); jQuery('#input_tip').autocomplete({ source: function(request, response) {var data = { input_tip: request.term};if (data.input_tip === '') { response([]); return;}jQuery.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', dataType: 'json', dаta: {action: 'my_autocomplete',dаta: data }, beforeSend: function() {jQuery('#results').html('<div class="loading">Идет обновление данных...</div>');jQuery('#results').addClass('loading'); }, success: function(data) {show_results(data); }}); } }); jQuery('#input_kat').autocomplete({ source: function(request, response) {var data = { input_kat: request.term};if (data.input_kat === '') { response([]); return;}jQuery.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', dataType: 'json', dаta: {action: 'my_autocomplete',dаta: data }, beforeSend: function() {jQuery('#results').html('<div class="loading">Идет обновление данных...</div>');jQuery('#results').addClass('loading'); }, success: function(data) {show_results(data); }}); } }); }); function show_results(data) { jQuery('#results').removeClass('loading'); if (data.length > 0) { var html = '<ul>'; jQuery.each(data, function(index, item) { html += '<li><a href="https://qna.habr.com' + item.url + '">' + item.label + '</a></li>'; }); html += '</ul>'; jQuery('#results').html(html); } else { jQuery('#results').html('<div class="no-results">Нет результатов</div>'); } } </script> <?php}add_action('wp_footer', 'my_autocomplete');function my_autocomplete_callback() { $args = array( 'post_type' => 'us_portfolio', 'posts_per_page' => -1, 'meta_query' => array('relation' => 'AND') ); $data = $_GET['data']; if ($data['input_marka'] !== '') { $args['meta_query'][] = array( 'key' => 'marka_ts', 'value' => $data['input_marka'], 'compare' => 'LIKE' ); } if ($data['input_model'] !== '') { $args['meta_query'][] = array( 'key' => 'model_ts', 'value' => $data['input_model'], 'compare' => 'LIKE' ); } if ($data['input_tip'] !== '') { $args['meta_query'][] = array( 'key' => 'tip_ts', 'value' => $data['input_tip'], 'compare' => 'LIKE' ); } if ($data['input_kat'] !== '') { $args['meta_query'][] = array( 'key' => 'kategoriya_ts', 'value' => $data['input_kat'], 'compare' => 'LIKE' ); } $posts = get_posts($args); $data = array(); $posts = get_posts($args);$data = array(); foreach ($posts as $post) { $marka = get_field('marka_ts', $post->ID); $model = get_field('model_ts', $post->ID); $tip = get_field('tip_ts', $post->ID); $kat = get_field('kategoriya_ts', $post->ID); $title = $post->post_title; $url = get_permalink($post->ID); $label = $title; $label = $title . '<br>Марка ТС: ' . $marka . '<br>Модель ТС: ' . $model . '<br>Тип ТС: ' . $tip . '<br> Категория ТС: ' . $kat; $data[] = array( 'label' => $label, 'value' => $title, 'url' => $url ); } wp_send_json($data);}add_action('wp_ajax_my_autocomplete', 'my_autocomplete_callback');add_action('wp_ajax_nopriv_my_autocomplete', 'my_autocomplete_callback');
Смотрите также:
Kylshop 5.3 + Юmoney и Юkassa KEYGEN
С помощью плагина Kylshop, вы можете создать полноценный интернет магазин для продажи физических товаров, цифровых товаров и продажи ключей разных программ или игр.
В комментариях запрещаются спам, а также реклама любых товаров и услуг, иных ресурсов.