Создать акаунт
Всё для вебмастера » Вопросы и ответы » CMS » WordPress » Как в WordPress сделать фильтрацию произвольных записей по нескольким произвольным полям одновременно?

Как в WordPress сделать фильтрацию произвольных записей по нескольким произвольным полям одновременно?

17 апр 2023, 23:02
WordPress
117
0
Приветствую.

Есть произвольный тип записей автомобили, в которых есть 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');

Внимание! Как в WordPress сделать фильтрацию произвольных записей по нескольким произвольным полям одновременно? предоставлен пользователями сайта исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.

Смотрите также:

Комментарии к Как в WordPress сделать фильтрацию произвольных записей по нескольким произвольным полям одновременно?
Добавить Комментарий
В комментариях запрещаются спам, а также реклама любых товаров и услуг, иных ресурсов.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.