Intereting Posts
Использование короткого кода в заголовке сообщения Все запланированные должности WordPress публикуются немедленно Лучшее действие для создания пользовательского сообщения и присвоение ему таксономических условий при активации плагина? Как связать ссылки wp_links в цикле? Перепишите пулю для CPT WooCommerce – Крюк после изменения загрузки в Admin Редактировать страницу? В какой части ядра WordPress таблицы пользователей и usermeta объединяются? Как предотвратить использование персонализированного типа сообщений с использованием шаблона archive.php? Как отобразить имя пользователя, роль и имя сайта с помощью тегов HTML внутри уведомления панели мониторинга? Веб-сайт, не указанный в разделе Сайты (в сетевой среде) Как перечислить комментаторы и дни с момента последнего комментария register_activation_hook в oop-подходе Имеет ли WordPress код «по умолчанию» для анти-SQL, который отвечает ошибкой 404? Редактирование программы Backend Uploader Как вы получаете количество сообщений на странице архива?

Ajax и автозаполнение

У меня есть набор мета-полей в настраиваемом типе сообщений. Два из них – это простые поля ввода / текстового типа, которые должны иметь автозаполненный вход:

  • A) Другой пользовательский тип сообщения
  • B) Пользователи

Теперь у меня есть проблема, что мне нужно как-то вызвать событие автозаполнения. Пока у меня это довольно простое определение:

jQuery( document ).ready( function ($) { $( '#some_id' ).autocomplete( { minLength: 2 ,source: "<?php print 'SOME_STRING'; ?>" } ); } ); 

который дает мне следующий ответ в консоли, когда я вхожу в «zz»:

GET http: // localhost / wordpress / wp-admin / SOME_STRING? Term = zz 404 (не найдено)

Точка в том, что мне нужно запустить запрос (как вы можете видеть выше), и вам нужно как-то root запросить source параметр / аргумент от автозаполнения до обратного вызова php .

Надеюсь, кто-то может объяснить мне, как я обойду это. Спасибо (и веселого Рождества, если вы читаете это :)!

Solutions Collecting From Web of "Ajax и автозаполнение"

Используйте jQuerys getJSON в исходном методе автозаполнения и используйте admin-ajax.php WordPress для обработки запроса, чтобы избежать необходимости находить wp-load.php (который, возможно, был перемещен), и будет загружать WordPress по каждому запросу.

Прежде всего: получите URL-адрес ajax вашего блога WordPress:

Это просто:

 admin_url( 'admin-ajax.php' ) 

Но мы хотим, чтобы это было доступно в вашем файле javascript, поэтому используйте wp_localize_script

 wp_enqueue_script( 'myajax_jsfile_handle', get_stylesheet_directory."/rest/of/path/to/file.js", array( 'jquery', 'jquery-form', 'json2' ), false, true ); ); wp_localize_script( 'myajax_jsfile_handle', 'MyAjax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'myajax_nonce' => wp_create_nonce( 'myajax_nonce_val' ), 'action' => 'myajax-submit' ) ); 

Где myajax_jsfile_handle – это дескриптор вашего зарегистрированного файла javascript. Вызовите это, когда вы ставите в очередь ваш файл javascript.

Метод источника автозаполнения

Для вашего источника в опции автозаполнения пользовательского интерфейса JQuery …

 source: function( request, response ) { jQuery.getJSON( MyAjax_object.ajaxurl + "?callback=?&action=myajax-submit", request, function( data ) { response( jQuery.map( data, function( item ) { jQuery.each( item, function( i, val ) { val.label = val.whatever; // build result for autocomplete from suggestion array data } ); return item; } ) ); } ); }, 
  • request – это то, что набирается.
  • Действие – это то, что интерпретирует WordPress (см. Ниже). В них добавлен URL-адрес, который автозаполнение использует для возврата предложений.

То, что было сделано выше, берет каждый элемент (возвращенные строки JSONrd) и дает им метку, которую автозаполнение использует для отображения предложений. (В приведенном выше примере метка представляет собой содержимое столбца «столбец»)

Скажите WordPress, как справиться с запросом

Таким образом, вышеуказанное отправляет WordPress запрос ajax с действием «myajax-submit».

Когда WordPress получает это, он запускает действия wp_ajax_myajax-submit (если пользователь входит в систему) или wp_ajax_nopriv_myajax-submit если они не являются. Вы можете подключить свою функцию к одному или обоим этим крючкам, в зависимости от того, на кого вы собираетесь разрешить этот запрос AJAX. Наша функция будет выполнять любые необходимые запросы и JSON результат (предложения) и эхо их.

  // Callback function get_my_suggestions() { // This function should query the database and get results as an array of rows: // GET the recieved data: 'term' (what has been typed by the user) $term = $_GET['term'] $suggestions_array = array(); // echo JSON to page and exit. $response = $_GET["callback"]."(". json_encode($suggestions_array) .")"; echo $response; exit; } add_action( 'wp_ajax_myajax-submit', 'get_my_suggestions' ); //For non-logged in users add_action( 'wp_ajax_nopriv_myajax-submit', 'get_my_suggestions' ); 

Отказ: пример возвращает пустой массив в любом случае.

В исходном файле автозаполнения (вы можете поместить файл autocomplete.php в свою тему), поставьте include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php' ); в верхней части вашего скрипта. Затем вы можете использовать $ wpdb для запроса того, что вы хотите.

Он не использует API WordPress AJAX, но он работает. Надеюсь это поможет.