КОНТЕКСТ
Чтобы реализовать автозаполнение (с раскрывающимися предложениями возможных совпадений) в WordPress, я использую следующий код для возврата ряда переменных из моей таблицы SQL:
//DISBLE UPDATE NOTIFICATIONS add_action('wp_enqueue_scripts', 'se_wp_enqueue_scripts'); function se_wp_enqueue_scripts() { wp_enqueue_script('suggest'); } add_action('wp_head', 'se_wp_head'); function se_wp_head() { ?> <script type="text/javascript"> var se_ajax_url = '<?php echo admin_url('admin-ajax.php'); ?>'; jQuery(document).ready(function() { jQuery('#se_search_element_id').suggest(se_ajax_url + '?action=se_lookup'); }); </script> <?php } add_action('wp_ajax_se_lookup', 'se_lookup'); add_action('wp_ajax_nopriv_se_lookup', 'se_lookup'); function se_lookup() { global $wpdb; $search = like_escape($_REQUEST['q']); $query = 'SELECT DISTINCT meta_value FROM wp_usermeta WHERE meta_key="company" AND meta_value LIKE \'%' . $search . '%\''; foreach ($wpdb->get_results($query) as $row) { $meta_value = $row->meta_value; echo $meta_value. "\n"; } die(); }
ПРОБЛЕМА
Хотя это возвращает правильные значения (я использую расширение Chrome для просмотра результатов вызова Ajax в инструментах dev), ничто не отображается под полем формы. Поле формы HTML выглядит следующим образом:
<input type="text" id="se_search_element_id" name="fname">
Я не уверен, является ли проблема форматом, возвращаемым вызовом Ajax, или есть что-то, что мне не хватает, что должно привести к выпадающему списку.
Первым аргументом функции suggest должен быть массив. Вы кормите его URL-адресом. Таким образом, вам не нужно использовать ajax. Просто делайте все в голове: запрос базы данных (все компании), результаты json_encode и эхо в javascript. Если вы хотите сделать это с помощью ajax, посмотрите на jQuery autocomplete https://www.devbridge.com/sourcery/components/jquery-autocomplete/