Лучший способ подключения wp-config.php в плагине WordPress

28 авг. 2014 г., 00:33:43
Просмотры: 13.8K
Голосов: -6

Я задумался, какой способ подключения wp-config.php в плагине является наилучшим. Я читал, что относительные пути могут не работать, если файлы плагина расположены в другом месте.

3
Комментарии

Вы говорите именно о плагине для WordPress или пытаетесь загрузить WordPress из внешнего файла?

Andrew Bartel Andrew Bartel
28 авг. 2014 г. 01:08:23

Если вы измените свой вопрос, сделав его более конкретным относительно вашей реальной проблемы, то, возможно, получите более точные ответы.

Otto Otto
28 авг. 2014 г. 01:09:34

У меня были проблемы с использованием $wpdb в моем плагине, я видел пример, где использовался include wp-config. Попробую снова с $wpdb

stijn.aerts stijn.aerts
28 авг. 2014 г. 01:14:24
Все ответы на вопрос 3
2

Лучший способ — не делать этого. Нет необходимости, чтобы файл плагина когда-либо подключал wp-config.php.

Вы делаете это наоборот. WordPress загружает плагины. Плагины не загружают WordPress.

28 авг. 2014 г. 00:50:38
Комментарии

Есть веские причины включать wp-config.php. Например, для плагинов, которые получают уведомления от API, файл обратного вызова может включать конфигурационный файл для доступа к базе данных. В этом случае загрузка файла обратного вызова через WordPress — это ужасная практика.

ethmz ethmz
25 июн. 2018 г. 14:34:23

Вы ошибаетесь. Этот ответ может быть верен, если вы пишете какой-то недоделанный hello-world плагин вроде 'создания красивого текстового поля на фронтенде'. Но что если вы действительно разрабатываете большое программное обеспечение и вам нужны автоматические Unit-тесты? Моя оболочка загружает UnitTest внутри моего плагина без ядра WordPress или его функционала. Варианты варьируются от симлинков, абсолютных путей включения до пространств имен в стиле Symfony, но вам придется модифицировать core-файл.

clockw0rk clockw0rk
9 июл. 2021 г. 01:59:55
0

Файл wp-config.php должен быть уже загружен, и его не нужно подключать дополнительно.

В большинстве случаев лучший способ убедиться, что переменная $wpdb доступна в функциях вашего плагина или темы — это разместить файлы плагина или темы в правильном месте и убедиться, что они активны.

Если переменная global $wpdb еще не определена, это означает, что ваша функция выполняется слишком рано. В таком случае её следует поместить в один из хуков, например muplugins_loaded, plugins_loaded, after_setup_theme, init или wp_loaded.

Если у вас есть отдельный файл, например, для AJAX-запросов, лучше использовать стандартные хуки WordPress для AJAX, а не подключать файлы вручную.

Единственный допустимый случай, когда может потребоваться подключение wp-config.php, — это расширение стандартной проверки if ( ! defined( 'ABSPATH' ) ) exit;, чтобы перенаправлять пользователей на главную страницу при попытке прямого доступа к файлам или директориям темы или плагина.

<?php
/**
 * Тишина — золото, но я хочу, чтобы люди видели сайт.
 */
if ( ! defined( 'ABSPATH' ) ) {
    // Вызываем dirname() 4 раза, так как этот файл находится в '/wp-contents/plugins/plugin-dir/', а wp-config.php — в корне '/'
    require_once dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) . '/wp-config.php';
    // Постоянное перенаправление на главную.
    wp_safe_redirect( home_url(), 301 );
    die;
}
24 нояб. 2017 г. 07:35:28
2
-4

Если вам нужен доступ только к файлу wp-config.php без остальных функций WordPress.

Выполните следующие шаги:

  1. Создайте пустой файл wp-settings.php в директории вашего плагина

  2. Добавьте этот код в ваш PHP файл

    define( 'ABSPATH', $_SERVER['DOCUMENT_ROOT'] . '/wp-content/plugins/YOUR_PLUGIN_DIR/' ); 
    require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-config.php' );
    

Это отлично работает для WordPress 4.2.4 и выше, я тестировал это в нашем собственном плагине mywebapplets.

13 авг. 2015 г. 13:37:14
Комментарии

Как сказал @Otto, так делать не следует.

Nicolai Grossherr Nicolai Grossherr
13 авг. 2015 г. 13:45:44

Вообще неплохое начало, но это не будет работать с WordPress, установленным в подкаталоге.

xjlin0 xjlin0
25 июл. 2021 г. 18:56:01