У меня есть плагин, который вызывает автономный скрипт php (myAjax.php) через скрипт jQuery.ajax () внутри плагина.
Мне нужно поместить следующий код в файл myAjax.php:
require_once('../../../wp-load.php');
if (!is_user_logged_in()){
die("You Must Be Logged In to Access This");
}
if( ! current_user_can('edit_files')) {
die("Sorry you are not authorized to access this file");
}
Однако я бы хотел более пуленепробиваемый метод указания пути к wp-load.php в случае, если фактический относительный путь отличается от моего примера.
plugin-development
N2Mystic
источник
источник
Ответы:
Вы можете использовать
__DIR__
константу. Поскольку файл находится либо внутри плагина, либо в папке темы, которые всегда находятся внутриwp-content
папки. Вы можете просто получить путь к файлу и обрезать все, начинаяwp-content
с него:Если вам нужно убедиться, что wp не находится в какой-либо папке wp-content (кто знает? Что-то случится) - используйте отрицательный взгляд:
(поскольку легче убедиться, что ваш собственный плагин, который вы разрабатываете, не находится внутри какой-либо другой папки wp-content)
Ааа .. твой
wp-load
там естьНо!
Как уже упоминалось, для AJAX вы можете использовать нативную технику WP-s ajax .
Конечно, бывают случаи, когда родной техники AJAX в WP недостаточно.
источник
wp-content
может отсутствовать или находиться в совершенно другом каталоге, чем WP.Я знаю, что это старый вопрос, но хотел добавить свой собственный ответ, который, я думаю, мог бы помочь некоторым пользователям, пытающимся достичь того же самого.
Да, всегда лучше (и проще) использовать собственный API Ajax WP, но он может стать очень медленным, поскольку загружает весь экземпляр WP.
Мое решение: довольно просто, и должно работать, чтобы получить
root
установку WordPress. В каком бы скрипте вы ни выполняли пользовательский вызов AJAX, просто убедитесь, что вы сначала зарегистрировали скриптwp_register_script()
(пока не ставьте его в очередь). Затем используйтеwp_localize_script()
и проанализируйтеABSPATH
(это константа, которая определена внутриwp-load.php
и будет содержать корневой путь). Теперь вы можете получить это внутри вашего скрипта и проанализировать его вместе с вызовом AJAX. И, наконец, конечно, убедитесь, что сценарий действительно поставлен в очередьwp_enqueue_script()
.Пример:
Приведенный ниже фрагмент PHP ставит в очередь ваш
script.js
файл и позволяет вам получить каталогroot
путем вызоваpluginslug_scriptname_i18n.wp_root
. В основномwp_localize_script()
это используется для выполнения переводов, но это также удобно для анализа данных в ваших сценариях, которые вы получили на стороне сервера.Вы
script.js
могли бы выглядеть так:Теперь внутри вашего
ajax-handler.php
вы можете получитьwp_content_dir
и загрузить егоwp-load.php
так:Пожалуйста, имейте в виду, что
wp_root
клиент может быть изменен.Как примечание стороны:
Еще одна хитрость, о которой некоторые из вас могут не знать, это то, что перед включением
wp-load.php
вы можете определить константу с именемSHORTINIT
(булево). Это скажет WordPress просто загрузить основы (то есть вы потеряете много функций ядра WP), но это ускорит время загрузки, поскольку не будет включать все необходимые файлы для обычного экземпляра WP. ОнSHORTINIT
определен внутриwp-settings.php
(просто откройте файл и поищитеSHORTINIT
. У вас будет лучшее понимание того, что происходит под капотом. Этот изящный прием ускорит время загрузки еще больше (до 75% в моих тестах, которые я делал). Некоторое время назад.) Но это будет зависеть от версии WP. Также имейте в виду, чтоwp-load.php
изменения часто происходят с новыми выпусками версий WP, поэтому, если вы используетеSHORTINIT
будьте уверены, что ваш скрипт всегда будет работать даже в будущих версиях WordPress, а также с более низкой версией WordPress. Короче говоря, если вы делаете сложные вещи, основанные на большом количестве кодекса WordPress, убедитесь, что НЕ установленоSHORTINIT
значение true .источник
Вы можете использовать приведенный ниже код, чтобы использовать wp-load.php для включения wp-load из любого места
источник