Приветствую.
Есть произвольный тип записей автомобили, в которых есть 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',
data: {
action: 'my_autocomplete',
data: 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',
data: {
action: 'my_autocomplete',
data: 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',
data: {
action: 'my_autocomplete',
data: 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',
data: {
action: 'my_autocomplete',
data: 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="' + 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');