WordPress, как сделать заполнение поля по данным из базы?
Добрый день!
проект на wordpress
Тип поста - записи
Поле ввода - текст на кастомном поле
Как к 1му этому полюподключить возможность автодобавления данных из предложенных.
логика: человек вводит несколько символов, система выдает результат из базы.
полей всего 30, но должно работать только с 1 полем.
Кто может знает готовые решения по этому вопросу?
Дополнительно:
Ответы:
datalist - элемент html
при необходимости к нему можно приделать аякс
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если нужно автодополнение только для одного кастомного поля, есть два нормальных варианта. Первый — простой
datalist, если список значений небольшой. Второй — Ajax-поиск по базе, если значений много и их нельзя грузить все сразу.Для маленького списка можно вывести поле так:
<input type="text" name="my_custom_field" list="field-suggestions"> <datalist id="field-suggestions"> <option value="Москва"> <option value="Санкт-Петербург"> <option value="Казань"> </datalist>
Но если значения берутся из базы и их много, лучше сделать Ajax. В WordPress добавляете обработчик:
add_action('wp_ajax_my_field_suggest', 'my_field_suggest'); add_action('wp_ajax_nopriv_my_field_suggest', 'my_field_suggest'); function my_field_suggest() { global $wpdb; $term = sanitize_text_field($_GET['term'] ?? ''); if (mb_strlen($term) < 2) { wp_send_json([]); } $rows = $wpdb->get_col($wpdb->prepare( "SELECT DISTINCT meta_value FROM {$wpdb->postmeta} WHERE meta_key = %s AND meta_value LIKE %s LIMIT 20", 'my_custom_field', '%' . $wpdb->esc_like($term) . '%' )); wp_send_json($rows); }
На фронте подключаете JS только для нужного поля. Можно использовать jQuery UI Autocomplete, Select2 или свой небольшой fetch-запрос. Главное — не делать автодополнение для всех 30 полей, если оно нужно только одному: назначьте этому полю отдельный CSS-класс или ID.
Если поле находится в админке, обработчик тот же, но скрипт подключайте через
admin_enqueue_scripts. Если на фронте — черезwp_enqueue_scripts. И обязательно ограничьте запросы: минимум 2-3 символа до поиска,LIMITв SQL и очистка входных данных. Тогда автодобавление будет работать быстро и не будет грузить базу.