Я пытаюсь перепроектировать плагин: http://wordpress.org/extend/plugins/wordpress-social-login/
В его части есть такая строка:
(Мне сложно понять первый, остальные просто доступны для справки, если им есть что-то делать).
require_once( dirname( dirname( dirname( dirname( __FILE__ )))) . '/wp-load.php' ); define( 'WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL', plugins_url() . '/' . basename( dirname( __FILE__ ) ) ); define( 'WORDPRESS_SOCIAL_LOGIN_HYBRIDAUTH_ENDPOINT_URL', WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL . '/hybridauth/' );
Мой вопрос: что именно находится в этом файле wp-load.php
который требуется для этого кода? Понимая это, я понимаю, что он загружает важные ключевые слова для WordPress для правильной работы сайта ( functions.php
, wp-settings.php
, wp-config.php
т. Д.)
Разве тот факт, что плагин уже запущен, означает, wp-load.php
загружается wp-load.php
?
Кроме того, это полная трата ресурсов, так как она включает в себя так много файлов, которые могут включать в себя и другие файлы, и это похоже на бесконечный цикл требуемых файлов, каждый в другом, которые загружаются дважды. (Или даже больше, если другие плагины используют это вид метода тоже)
Так что же он делает?
PS; Все, что я нашел в Google-Google, это КАК включить его правильно (поскольку пути изменяются), но это не моя проблема / вопрос.
Мой вопрос: что именно находится в этом файле
wp-load.php
который требуется для этого кода?
Все основные функции WordPress. Сюда входят файлы темы, все файлы активных плагинов и т. Д. НО загрузка WordPress таким образом не анализирует запрошенный URL-адрес и не запускает запрос WordPress (путем инициализации объекта WP, а также объектов WP_Query).
Понимая это, я понимаю, что он загружает важные ключевые слова для WordPress для правильной работы сайта (
functions.php
,wp-settings.php
,wp-config.php
т. Д.)
Да, вы поняли правильно.
Разве тот факт, что плагин уже запущен, означает, что загружается wp-load.php?
Если код плагина был вызван WordPress (например, чтобы отобразить страницу администратора или он был включен в первоначально загруженном файле плагина), то да, это означает, что wp-load.php
уже загружен.
Иногда, хотя плагины направляют запросы к одиночным файлам (например, http://example.com/wp-content/plugins/my-plugin/sample.php
), а не к какой-либо странице на WordPress (например, http://example.com/?my_plugin_action=sample
или http://example.com/wp-admin/admin-ajax.php
).
Посмотрите, как первый URL ссылается на конкретный файл в каталоге плагина my-plugin
а второй – на домашнюю страницу сайта с добавленным конкретным аргументом запроса или третьим примером, где указанным файлом является admin-ajax.php
в каталоге wp-admin
– это специальный файл, который упрощает для плагинов делать запрос AJAX (этот файл также загружает ядро WordPress и запускает некоторые действия).
В случае первой ссылки, если плагин хочет использовать некоторые функции WordPress (для ссылки на базу данных, манипулирования сообщениями и т. Д.), wp-load.php
необходимо загрузить основные файлы WordPress, включив wp-load.php
.
Кроме того, это полная трата ресурсов, так как она включает в себя так много файлов, которые могут включать в себя и другие файлы, и это похоже на бесконечный цикл требуемых файлов, каждый в другом, которые загружаются дважды. (Или даже больше, если другие плагины используют это вид метода тоже)
Обратите внимание на часть _once
в require_once(...
– это говорит PHP о включении файла только в том случае, если он уже не был включен. Поэтому конфликтов не будет, и PHP не будет использовать слишком много памяти. Хотя – если вы в контексте, когда WordPress уже запущен, вы не должны вызывать функцию require
.
Таким образом, в основном автор плагина ожидает, что некоторые запросы будут сделаны в файл плагина, в котором вы нашли этот код. Поскольку автор хочет использовать функциональность WordPress в этом файле, он вызывает файл wp-load.php
для загрузки основных функций.
Я предполагаю, что это делается для того, чтобы уменьшить нагрузку на сервер, хотя с несколькими крючками, которые запускаются на plugins_loaded
и настраиваемый параметр $_GET
добавленный к домашнему URL-адресу, результат все равно должен быть довольно близким.
Я лично предпочитаю второй вариант, но, как я уже сказал, в том числе wp-load.php
будет препятствовать wp-load.php
, чтобы WordPress запускал некоторые сложные вещи (разбор URL-адресов и запросы к базе данных).
Если еще есть что-то, что вы не совсем понимаете по этому поводу – опубликуйте здесь комментарий, и я попытаюсь объяснить дальше.
Из того, что я читал, они обычно включают wp-load в плагинах, когда требуется использование базы данных, но это плохой выбор, так как он вызывает много проблем. Вы можете увидеть некоторые соответствующие статьи здесь: http://ottodestruct.com/blog/2010/dont-include-wp-load-please/ (если эта ссылка когда-либо удалена, см. Эту страницу здесь )
wp-load.php
отвечает за загрузку среды WordPress, которая делает плагин способным использовать родную функцию WordPress Core.
Теперь о
Разве тот факт, что плагин уже запущен, означает, что загружается wp-load.php?
Не за что!
Если вы напрямую подключаетесь к файлу плагина, это не означает, что у вас есть вся среда WordPress, и вы не можете использовать собственные основные функции, если не включить wp-load.php
.
wp-load.php
является одним из способов загрузки WP из внешних скриптов, что позволяет использовать функции WP среди других функций.
Но, как вы говорите, это не обязательно, поскольку это плагин. Тем не менее, вы не объясните, где вы нашли код в своем вопросе, потому что wp-load.php
действительно необходим для интерфейсных страниц или скриптов, расположенных в каталоге, отличном от каталога таблицы стилей, например, даже если они являются частью плагина.
Страницы плагинов в области администрирования не должны перезагружать WP, потому что они уже загружены, но передним страницам приходится загружать их.
Короче говоря, есть несколько причин включить wp-load.php
для доступа к функциям и переменным WP.
Вероятно, двойная проверка.
require_once () означает, что если он уже был загружен, он не будет загружаться снова.
Это будет включать wp-load.php, если он еще не загружен, если файл находится где угодно, независимо от уровня, в каталоге wp-content.
if(!defined(ABSPATH)){ $pagePath = explode('/wp-content/', dirname(__FILE__)); include_once(str_replace('wp-content/' , '', $pagePath[0] . '/wp-load.php')); }