У меня есть пользовательский тип сообщения, к которому я хочу получить доступ через jQuery - предпочтительно с использованием JSON.
Итак обо всем по порядку. Создать функцию, которая возвращает / echos json, довольно легко, но как бы я получил к ней доступ через jquery.
как пишет в этом вопросе Майк , он, насколько я понимаю, помещает его в корень WordPress. что сделало бы его доступным с помощью имени файла php - но рекомендуется ли это? Я бы предпочел положить его в папку плагинов.
Я пытался прочитать кодекс WordPress, но способ обработки вызовов ajax просто смущает меня, поскольку вы публикуете каждый вызов ajax в admin-ajax.php, даже если это не страница администратора?
Может кто-нибудь, пожалуйста, исправьте мои проблемы?
/Гроза
редактировать
У меня была проблема с пониманием того, как должны выполняться вызовы ajax в WordPress, а также с тем, где разместить код php и js для выполнения / обработки вызовов.
В другом вопросе, на который я ссылался, вы создали функцию, помещающую файл в корень wp - я не хочу этого делать. Но теперь я научился использовать wp_ajax_ (nopriv_) [action] и могу эффективно получить доступ к json, который я создаю. Проблема остается в том, где я должен разместить JS, чтобы сделать звонок. Я хочу поместить его в js-файл плагинов, но так как это должно быть представлено на странице, а не на сайте администратора, ajaxurl не определен, поэтому я должен повторить, используя php.
echo admin_url('admin-ajax.php');
Таким образом, возникает вопрос, как мне объединить этот php с javascript и как мне затем поставить его в очередь, видя, что это не файл или скрипт.
Ответы:
Ajax Handler
Это действительно немного сбивает с толку, что обработчик Ajax находится в
wp-admin/
каталоге, но да, вы можете и должны использовать его также для запросов без прав администратора. Затем вы регистрируете обработчик дляwp_ajax_nopriv_[action]
ловушки вместо обычногоwp_ajax_[action]
. В этом случае вам нужно только следовать первым строкамadmin-ajax.php
, поскольку запрос, выполненный пользователем, который не вошел в систему, уже покинет страницу около строки 50.Поэтому зарегистрируйте функцию для ловушки
wp_ajax_nopriv_get_custom_post_data
, и она будет вызвана, если вы запроситеadmin-ajax.php
сaction
параметром, установленным вget_custom_post_data
. Обязательно позвонитеdie()
в конце вашего обработчика самостоятельно, в противном случаеdie(-1)
будет возвращено значение по умолчанию . А также зарегистрируйте зарегистрированную версиюwp_ajax_get_custom_post_data
(с той же функцией-обработчиком, без проблем), поскольку, если вы вошли на свой сайт, вы не попадете наnopriv
крючок.Конфигурация на стороне сервера для Javascript
Хитрость в отправке данных конфигурации на стороне сервера (например,
admin-ajax.php
URL)wp_localize_script()
. Вы передаете ему массив ключей и значений, которые будут включены в верхнюю часть страницы. Вероятно, изначально он был создан только для локализуемых строк, но вы также можете использовать его для передачи данных конфигурации.storm_json_config
это имя дескриптора (если вы хотите удалить его из очереди позже),storm_config
это имя объекта Javascript, который будет содержать ваши данные. Таким образом, ваш статический файл Javascript может содержать строку вродеjQuery.post(storm_config.ajaxurl, ...)
.Смотрите также ответ Бюльтге на аналогичный вопрос .
Статический Javascript из плагина dir
Чтобы загрузить статический файл Javascript из собственного каталога плагинов, вы используете
wp_enqueue_script()
. Это будет выглядеть примерно так:Где
storm_json
снова имя дескриптора, затем вы даете ссылку на файл, затем зависимости (могут бытьnull
), а затем номер версии, который будет добавлен после запроса об обновлении кэша браузера.источник
wp_localize_script()
, который вы можете использовать для отправки данных конфигурации со стороны сервера в браузер. (Небольшой совет: если вы добавите@
имя пользователя, этот человек получит уведомление о вашем ответе. Поэтому@Mike: I updated the title
убедитесь, что он видит ваш комментарий)