2011-06-02 132 views
6

我一直在pluginwordpress上開發了一段時間,但是有一個問題一直困擾着我。我想導出一個數據庫表作爲excel文件,因此我需要從我的插件目錄中的文件訪問全局$wpdb->variable

我發現了一個博客文章,解釋了我應該包括哪些類,但這不起作用(下面的鏈接)。正如你所看到的,我做了一個var_dump,但它從來沒有達到這一點。如果我將wp-configwp-load包括在代碼之外,轉儲returns NULL,所以我猜測導入存在問題。

無論如何,我希望有人能幫助我解決這個問題。我不一定需要修復我的方法,我只需要一種方法來導出一組數據(從我的數據庫中獲取)以在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-配置在內),你會發現這行代碼:

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'); 
} 
+1

您使用的是什麼版本的WordPress?我只有這一行:'require_once(ABSPATH。'wp-settings.php');' – 2011-06-02 20:49:58

+0

'require_once(ABSPATH。'wp-settings.php');'在wp-config文件中。你應該在wp-settings.php中尋找被竊聽的行:)(並且我正在使用最新版本的wordpress btw)。 – 2011-06-02 21:21:29

+0

你得到了什麼確切的錯誤信息? – 2011-06-02 22:54:15

回答

9

如果你正在創建一個WordPress插件,你不需要手動包含這些文件。

如果你想導出你的表格,你爲什麼不爲它創建一個函數/類並且通過$wpdb(如果你需要的話)。您也可以使用正常的MySQLi -class(來自PHP)來訪問您的MySQL數據庫。


如果你只是想用這是由WordPress使用存儲的登錄值來訪問MySQL數據庫,您可以包括從WordPress根目錄下的wp_config -file。它有一些(自我解釋)全球領域,你可以用它來連接到數據庫:

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 -file啓動調試:

/** 
* 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_erroronphp.ini -file:

; 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 

但是這個建議立即進行刪除d只能在本地測試服務器上完成,而不是在高效的情況下完成。

+1

我不得不手動包含它們,因爲如果我想觸發一個excel下載,我不能在wordpress的admin.php中做到這一點(標題信息無法傳遞,不要問我爲什麼)。所以我從我的插件目錄調用一個php文件,但是這不能訪問$ wpdb變量或任何其他變量,我需要訪問wordpress數據庫。 – 2011-06-02 17:17:46

+0

無法發送標題信息,因爲您在打印某些東西之後更改標題。你應該(就像我說的)在一個新文件中創建一個新類,並將'$ wpdb'-Object傳遞給它。 – 2011-06-02 17:38:07

+0

我應該如何將$ wpdb變量傳遞給該類?因爲我現在調用該文件的方式是通過重定向到另一個php頁面。 (html顯示如下)。 Save as excel 2011-06-02 17:43:12