Автоматический поиск/Автозаполнение с помощью Мета-ключей
В настоящее время я застрял в поиске недвижимости.
То, что я пытаюсь сделать, звучит довольно просто: У меня есть одно поле в форме поиска. Я хочу, чтобы это поле могло генерировать автоматические предложения/ автозаполнение /автоматическое предсказание при вводе, например:
Человек ищет хороший лофт в Берлине Шарлоттенбург, поэтому он выбирает свои варианты, а затем вводит "Символ". На входе будут показаны варианты, которые включают это имя, например "Шарлоттенбург" (часть) или "Шарлоттенбург-Вильмерсдорф" (округ).
Я нашел несколько способов создания прогноза в wordpress, но в настоящее время я просматриваю все сообщения данного пользовательского типа и просто выделяю один, включая ввод ЗАГОЛОВКА.
Я хочу, чтобы предсказание искало мета-значение трех мета-ключей и просто показывало значение мета-значений, которые включают поисковый запрос.
Tl;др: Текущее состояние:
Ввод: Символ Название предсказания: Чистый лофт в Берлине, Очень милый уютный дом, Дом в центре города
Разыскиваемое государство:
Ввод: Символ МЕТА_ЗНАЧЕНИЕ прогноза: СимволЛоттенбург, Символлоттенбург-Вильмерсдорф
--
Вот мой текущий код:
Functions.php :
<?php
/**
* Enqueue scripts and styles.
*
* @since 1.0.0
*/
function ja_global_enqueues() {
wp_enqueue_style(
'jquery-auto-complete',
'https://cdnjs.cloudflare.com/ajax/libs/jquery-autocomplete/1.0.7/jquery.auto-complete.css',
array(),
'1.0.7'
);
wp_enqueue_script(
'jquery-auto-complete',
'https://cdnjs.cloudflare.com/ajax/libs/jquery-autocomplete/1.0.7/jquery.auto-complete.min.js',
array( 'jquery' ),
'1.0.7',
true
);
wp_enqueue_script(
'global',
get_template_directory_uri() . '/js/prediction.js',
array( 'jquery' ),
'1.0.0',
true
);
wp_localize_script(
'global',
'global',
array(
'ajax' => admin_url( 'admin-ajax.php' ),
)
);
}
add_action( 'wp_enqueue_scripts', 'ja_global_enqueues' );
/**
* Live autocomplete search feature.
*
* @since 1.0.0
*/
function ja_ajax_search() {
$results = new WP_Query( array(
'post_type' => array( 'immomakler_object' ),
'nopaging' => true,
'posts_per_page'=> 100,
'meta_query' => array (
'relation' => 'AND',
array(
'relation' => 'AND',
array(
'key' => 'verkaufstatus',
'value' => 'VERKAUFT',
'compare' => '!='
)
)
)
) );
$items = array();
if ( !empty( $results->posts ) ) {
foreach ( $results->posts as $result ) {
$items[] = $result->post_title;
}
}
wp_send_json_success( $items );
}
add_action( 'wp_ajax_search_site', 'ja_ajax_search' );
add_action( 'wp_ajax_nopriv_search_site', 'ja_ajax_search' );
?>
.js
jQuery(function($){
var searchRequest;
$('.prediction').autoComplete({
minChars: 3,
source: function(term, suggest){
try { searchRequest.abort(); } catch(e){}
searchRequest = $.post(global.ajax, { search: term, action: 'search_site' }, function(res) {
suggest(res.data);
});
}
});
});
Мой пользовательский тип записи: immomakler_object Мои пользовательские метаключи, по которым я хочу, чтобы значения для поиска были следующими: PLZ, орт, регионал_зузац
1 answers
Если вы хотите отобразить пользовательские значения полей, вы не можете использовать WP_Query для выбора записей.
Мне кажется, что единственный доступный способ - написать sql-запрос и выполнить его в $wpdb
.
global $wpdb;
if ( isset($_POST['search']) == false || empty($_POST['search']) )
wp_send_json_success( $array() );
$s = $_POST['search'];
$meta_keys = ['PLZ', 'ort', 'regionaler_zusatz'];
$limit = 100;
$sql = "SELECT meta_value FROM $wpdb->postmeta pm "
. " WHERE pm.meta_key IN ('PLZ', 'ort', 'regionaler_zusatz') "
. " AND pm.meta_value LIKE %s LIMIT 0, %d ";
$args = ['%'.$s.'%', $limit];
$sql = $wpdb->prepare($sql, $args);
$res = $wpdb->get_results($sql, ARRAY_A);
$data = [];
if ( is_array($res) && !empty($res) ) {
foreach( $res as $row )
$data[] = $row['meta_value'];
// -- or --
//$data = array_reduce($res, function($carry, $item) {
// $carry[] = $item['meta_value'];
// return $carry;
//}, []);
}
wp_send_json_success( $data );
Если вы не сохраняете данные в пользовательских полях (PLZ
, ort
, regionaler_zusatz
) одно значение, возможно, вам потребуется выбрать соответствующий элемент из массива.