2011-09-22 23 views
3

我試圖在Wordpress插件中使用jQuery的表格插件。我正在關注這個example。我已經排隊了我的腳本並構建了我的表單。在csf_form_handler.php中,相當於例子的json-echo.php,我可以訪問在我的表單中選擇的項目(我有一個單選按鈕組)。致命錯誤:調用非成員函數get_results()(插件和WordPress的jQuery)

我的目標是使用SELECT語句中的表單中選擇的值從自定義的wordpress數據庫表中返回數據。

$csf_selected_sport = $_POST['csf_radiobutton_group_sport']; 

global $wpdb; 

$csf_db_table = $wpdb->prefix . "activity"; 


$csf_data = $wpdb->get_results($wpdb->prepare(" 
      SELECT * 
      FROM " .$csf_db_table. " 
      WHERE " . $csf_selected_sport ." ")); 

不幸的是,我越來越:

Notice: Trying to get property of non-object (on the $wpdb->prefix line)

Fatal error: Call to a member function get_results() on a non-object (on the $csf_data line)

上面的代碼中csf_form_handler.php不是一個功能。我不知道這是否有所作爲。

如何更改代碼以便我可以使用$ wpdb?

謝謝。

回答

5

編寫插件時,最好將數據處理保存在插件的主文件中(即不要將其發送到單獨的文件),並激活相應的函數來處理它。基本上,您可以將表單的動作設置爲指向插件的文件或包含表單的頁面。

我們假設您正在使用的這種形式顯示在網站的前端和側邊欄上。爲了處理數據從當用戶點擊「提交」該表單來的,你可以創造我們的插件的文件中的函數,例如:

function $csf_get_data(){ 

global $wpdb; //since your this function is in your plugin’s file, $wpdb should be available, so no errors here! =) 

$csf_selected_sport = $_POST['csf_radiobutton_group_sport']; 

$csf_db_table = $wpdb->prefix . "activity"; 

$csf_data = $wpdb->get_results($wpdb->prepare(" 
      SELECT * 
      FROM " .$csf_db_table. " 
      WHERE " . $csf_selected_sport ." ")); 

    //do your stuff with $csf_data 
} 

//now run it everytime the plugin is run 
if(isset($_POST[‘submit’])){ 
    $csf_get_data(); 
} 

現在,你可以設置你的表單動作的屬性來發送數據到相同的頁面,這將能夠使用上面的功能來處理它。你可以使用兩種:

action=」」 

action="<?php the_permalink()?>" 

請注意:確保數據從您的網站來(尤其是公共表格),記得用wp_nonce_field()來創建一個隨機數場http://codex.wordpress.org/Function_Reference/wp_nonce_field

希望幫助,

VQ:可以BYT WordPress的通過wp_nonce()來驗證。

+0

Hi @Vidal Quevedo,非常感謝您的幫助。我學到了一些新東西。 – Laxmidi

2

你在哪裏運行這段代碼?這聽起來像你正在運行它之前$ wpdb實例創建(或超出範圍)。

你是如何載入你的csf_form_handler.php文件的?你是否在Wordpress中包含腳本的一部分,還是你自己的插件?如果是後者,記住你需要先激活它,所以WP可以將它包含在加載順序中(我假設它已經被激活,但JIC)

要查看$ wpdb對象是否已經創建,您可以運行<?php print_r($wpdb);?>來打印出對象的內容。

讓我知道更多,並希望我能夠幫助你。

+0

Hi @Vidal Quevedo,謝謝你的留言。我試圖製作我自己的插件。我將表單的動作設置爲csf_form_handler.php。我的插件已激活。當我運行print_r($ wpdb)時,「我得到了通知:未定義的變量:wpdb」。我想這是因爲處理程序是通過表單的action =「my handler」加載的,所以它無法訪問WP函數。如果您有任何建議,我很樂意聽到他們。謝謝。 – Laxmidi

9

我碰到了同樣的問題,但我得到了它由包括來自WordPress的文件夾的根目錄下的文件wp-config.php這樣解決:

require_once('../../../wp-config.php'); 
global $wpdb; 

我希望這有助於。

+4

require_once('../../../ wp-config.php');確切地說。 – mailo

+0

工作很好。謝謝! –

相關問題