Как включить $ wpdb в плагин WordPress?

#php #wordpress #plugins

#php #wordpress ( wordpress) #Плагины #wordpress

Вопрос:

Я некоторое время разрабатывал на plugin в wordpress , но одна проблема продолжает беспокоить меня. Я хочу экспортировать таблицу базы данных в виде файла Excel, и для этого мне нужен доступ к глобальной $wpdb->variable из файла в каталоге моего плагина.

Я нашел запись в блоге, которая объясняет, какие классы я должен включить, но это не работает (ссылка ниже). Как вы можете видеть, я делаю var_dump , но он никогда не достигает этой точки. Если я оставлю includes of wp-config и wp-load out из кода, произойдет дамп returns NULL , поэтому я предполагаю, что есть проблема с импортом.

В любом случае, я надеялся, что кто-нибудь сможет помочь мне с этой проблемой. Мне не обязательно нужно исправление для моего подхода, мне просто нужен способ экспортировать массив данных (извлеченный из моей базы данных) в Excel в wordpress. Буду признателен за любую помощь. Заранее спасибо.

http://www.notesbit.com/index.php/web-mysql/web-scripts/standalone-access-the-wordpress-database-using-wpdb/

 include_once('../../../wp-config.php');
include_once('../../../wp-load.php');
include_once('../../../wp-includes/wp-db.php');

var_dump($wpdb);
$filter = get_where_clause();
$order = get_order_by_clause();

$data = $wpdb->get_results("SELECT * FROM " . $table_prefix . "team_data" . $filter . $order, ARRAY_A);

$result = array();
  

Редактировать:
Я не могу включить wp-config , это выдает постоянные ошибки. Я знаю, где происходит ошибка, мне просто нужно найти обходной путь. просматривая wp-settings страницу (которая включена в wp-config), вы найдете эту строку кода:

 foreach ( wp_get_active_and_valid_plugins() as $plugin )
    include_once( $plugin );
unset( $plugin );
  

вот тут-то и кроется ошибка. Я просто не знаю, как мне обойти эту ошибку.

ПРАВКА 2: Проблема решена. При включении файла я включил wp-config более одного раза (хотя я заявил, что он должен быть включен только один раз). Я решил проблему, используя следующий код.

 global $wpdb, $table_prefix;

if(!isset($wpdb))
{
    require_once('../../../../wp-config.php');
    require_once('../../../../wp-includes/wp-db.php');
}
  

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

1. Какую версию WordPress вы используете? У меня есть только эта строка: require_once(ABSPATH . 'wp-settings.php');

2. ‘require_once(ABSPATH . ‘wp-settings.php ‘);’ находится в файле wp-config. вы должны искать исправленные строки в wp-settings.php 🙂 (и я использую последнюю версию WordPress, кстати).

3. Какие именно сообщения об ошибках вы получаете?

4. нет, страница просто перестает отображаться и возвращается пустой. Я обнаружил, что ошибка была там, просто выполнив функцию var_dump () и посмотрев, до какого момента она продолжала отображаться на экране. И после этой строки страница перестала отображаться.

5. Я обновил свой пост. Проверьте, можете ли вы получить вывод с ошибкой при включении функций отладки.

Ответ №1:

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

Если вы хотите экспортировать свою таблицу, почему бы вам не создать для нее функцию / класс и не передать $wpdb ему (если вам это нужно). Вы также можете использовать обычный MySQLi-class (из PHP) для доступа к вашей базе данных MySQL.


Если вы просто хотите получить доступ к базе данных MySQL с сохраненными значениями входа, которые используются WordPress, вы можете включить wp_config -файл из корневого каталога WordPress. В нем есть несколько (самоописывающихся) глобальных полей, которые вы могли бы использовать для подключения к вашей базе данных:

 include "WP-ROOT-PATH/wp-config.php";
$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
// Test the connection:
if (mysqli_connect_errno()){
    // Connection Error
    exit("Couldn't connect to the database: ".mysqli_connect_error());
}
  

После этого у вас есть экземпляр MySQLi-класса (как упоминалось выше), который вы можете использовать для доступа к своей базе данных.

Однако я не уверен, что это идеальный способ, но он, безусловно, работает.


Для отладки WordPress (если что-то не работает и нет сообщения об ошибке) вы должны активировать отладку в wp-config.php -файле:

 /**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 */
define('WP_DEBUG', true);
  

Кроме того, если вы тестируете свои PHP-скрипты на локальном сервере, вам следует включить display_error to on в вашем php.ini файле:

 ; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development, but
; it could be very dangerous in production environments.
display_errors = On
  

Однако это должно быть сделано только на вашем локальном тестовом сервере, а не в производительном сценарии.

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

1. Я должен включить их вручную, потому что, если я хочу запустить загрузку Excel, я не могу сделать это из admin.php wordpress (информация заголовка не может быть передана, не спрашивайте меня почему). Итак, я вызываю php-файл из моего каталога плагинов, но это не может получить доступ к переменной $ wpdb или любой другой переменной, которая мне понадобилась бы для доступа к базе данных WordPress, если уж на то пошло.

2. Информация заголовка не может быть отправлена, потому что вы меняете заголовок после того, как что-то уже было напечатано. Вы должны (как я уже сказал) создать новый класс в новом файле и передать ему $wpdb -Object.

3. И как я должен передать $ wpdb-переменную этому классу? потому что способ, которым я вызываю файл сейчас, — перенаправление на другую php-страницу. (html показан ниже). <a href=»../wp-content/plugins/myplugin/to_excel.php?filter=<?php echo($filter_name) ?>» class=»button-primary»> Сохранить как excel</a>

4. Извините, это было недоразумение с моей стороны. Я обновил свой пост, взгляните на него.

5. Спасибо за ответ, я немного приблизился к решению проблемы. Я обновил свой первоначальный пост с некоторыми дополнительными объяснениями.

Ответ №2:

избегайте жестких решений! и просто используйте :

 define( 'SHORTINIT', true );
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );