Я люблю admin-ajax.php. Но я ненавижу локализацию, чтобы указывать на нее сценарии внешнего интерфейса, и мне хотелось бы, чтобы для тем был эквивалентный, легкий для поиска файл. (Меня также беспокоит то, что запросы внешнего интерфейса проходят через «/ wp-admin /». Нет практической причины, просто выглядит ужасно IMO.)
Поэтому я просто скопировал admin-ajax.php в корневой каталог по адресу /ajax.php, отрегулировал пути включения и удалил определение константы WP_ADMIN. Кажется, работает как gangbusters (теперь я могу просто направить все свои запросы AJAX внешнего интерфейса в /ajax.php! И я все еще могу использовать обычные хуки wp_ajax в моих плагинах!).
Но безопасно ли это? Что может пойти не так? Поскольку это не встроено в ядро, я предполагаю, что есть веская причина, почему бы и нет. Но просматривая код, я не вижу никаких непосредственных проблем.
Ты умный - скажи мне, если этот подход сумасшедший. Или, если есть более простой метод, который я пропускаю.
Ответы:
Вы можете просто использовать RewriteRule для вашего .htaccess выше обычных правил перезаписи постоянных ссылок:
Теперь отправляйте ваши AJAX-запросы
example.com/ajax
и никогда не пропускайте основные изменения в этом файле после обновлений.источник
example.com/ajax
URL 404. Не могли бы вы уточнить, где именно в этом.htaccess
я должен добавить это. У меня есть это в настоящее время между# BEGIN WordPress <IfModule mod_rewrite.c>
и</IfModule> # END WordPress
Первое: стандартизация. Если вы планируете использовать плагины сообщества, скорее всего, они не будут заботиться о вашем
/ajax.php
файле в корне документа. Таким образом, они не будут использовать это.Если вы собираетесь свернуть все сами, это не проблема.
Второе: что если обновится ядро? Будете ли вы отслеживать и изменять свой AJAX-файл?
Третье : несмотря
admin-ajax.php
на тоwp-admin
, что оно находится в нем , оно не загружает какие-либо вещи из области администрирования (например, таблицы списков и т. Д.). Он также не проверяет подлинность и не выставляет что-либо, чувствительное к незарегистрированным пользователям. Другими словами, это как интерфейсный файл. Не о чем беспокоиться.В-четвертых: в связи с первой проблемой некоторые плагины проверяют перед слепой загрузкой функций, связанных с ajax. Пример ниже. Ваш измененный файл ajax.php, скорее всего, не приведет к загрузке.
И наконец: то, на что вы жалуетесь, полезно использовать локализацию для получения URL-адреса Ajax. Почему? Потому что Ваши JS-файлы не знают ничего о стороне сервера. Вы собираетесь использовать URL, который сломается, если / когда сайт переместится? Похоже, плохой выбор.
Если вы действительно не хотите локализовать каждый сценарий, использующий Ajax, просто подключитесь к нему
wp_head
очень рано и выложите админский URL-адрес администратора. Проблема решена (кстати, именно так и поступает админка).источник
Как и во многих вещах в WordPress, существует почти бесконечное количество способов скинуть кошку. Хотя все принятые методы работают, я обнаружил, что они менее «аккуратны», чем использование wp_localize_script для включения возможности ajax во внешнем интерфейсе.
Проверь это:
И затем в
se83650.js
файле вы бы ссылались на вашу переменную с помощьюse83650Ajax.ajaxurl
.Преимущество этого метода заключается в том, что, если у вас будет множество плагинов, которые пытаются дублировать эту функцию, они не будут включать или перезаписывать одну и ту же переменную.
ajaxurl
довольно общий для включения, он делает вас более замкнутым и лучше взаимодействует с другими разработчиками.источник