2011-09-22 57 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

工作很好。谢谢! –

相关问题