如何在wordpress插件中包含$ wpdb?

时间:2011-06-02 16:06:47

标签: php wordpress plugins

我已经在plugin wordpress开发了一段时间,但有一个问题一直困扰着我。我想将数据库表导出为ex​​cel文件,因此我需要从我的插件目录中的文件访问全局$wpdb->variable

我找到了一个博客条目,解释了我应该包含哪些类,但这不起作用(链接如下)。正如你所看到的,我做了var_dump,但它从未达到过这一点。如果我从代码中删除wp-configwp-load的包含,转储returns NULL,那么我猜测导入存在问题。

无论如何,我希望有人可以帮我解决这个问题。我不一定需要修复我的方法,我只需要一种方法将数据数组(从我的数据库获取)导出到wordpress中的excel。任何帮助,将不胜感激。提前谢谢。

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,它会给出不断的错误。我知道bug发生在哪里,我只需找到解决方法。当查看wp-settings页面(wp-config包含)时,您会发现以下代码行:

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

这是一个有bug的地方。我只是不知道我应该如何处理这个错误。

编辑2: 问题解决了。当包含文件时,我不止一次地包括wp-config(尽管我声明它应该只被包含一次)。我使用以下代码解决了这个问题。

global $wpdb, $table_prefix;

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

2 个答案:

答案 0 :(得分:11)

如果您正在创建WordPress插件,则无需手动包含这些文件。

如果要导出表格,为什么不为它创建函数/类并将$wpdb传递给它(如果需要)。您也可以使用普通的MySQLi - 类(来自PHP)来访问您的MySQL数据库。


如果您只想使用WordPress使用的存储登录值访问MySQL数据库,则可以包含WordPress根目录中的wp_config - 文件。它有一些(自我解释的)全局字段,您可以使用它们连接到您的数据库:

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-Scripts,则应将display_error转换为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 :(得分:1)

远离硬解!只需使用:

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