在非对象上调用成员函数get_results()WordPress)


Fatal error: Call to a member function get_results() on a non-object (jQuery From Plugin & WordPress)

我试图在Wordpress插件中使用jQuery的表单插件。我遵循这个例子。我已经对脚本进行了排队并构建了表单。在csf_form_handler.php(相当于示例的json-echo.php)中,我可以访问表单中选择的项(我有一个单选按钮组)。

我的目标是在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 ." ")); 

不幸的是,我得到了:

注意:试图获得非对象的属性(在$wpdb->前缀上)线)

致命错误:在非对象上调用成员函数get_results()(在$csf_data行)

上述csf_form_handler.php中的代码不在函数中。我不知道这有什么区别。

我如何改变代码,使我可以使用$wpdb?

谢谢。

我遇到了同样的问题,但我通过从WordPress文件夹的根目录包含wp-config.php文件来解决这个问题,像这样:

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

在编写插件时,最好将数据处理保存在插件的主文件中(即不将其发送到单独的文件中),并相应地激活函数来处理它。基本上,你可以将表单的动作设置为指向插件文件或包含表单的页面。

假设您正在处理的这个表单显示在站点的前端侧边栏上。当用户点击"提交"时,要处理来自表单的数据,你可以在插件文件中创建一个函数,如:

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()创建一个nonce字段,可以通过wp_nonce()由wordpress验证:http://codex.wordpress.org/Function_Reference/wp_nonce_field

希望有帮助,

Vq .

您在哪里运行此代码?这听起来像你正在运行它之前,$wpdb实例被创建(或超出范围)。

你如何加载你的csf_form_handler.php文件?你是把它作为Wordpress脚本的一部分,还是你自己的插件?如果是后者,请记住您需要首先激活它,以便WP可以将它包含在加载序列中(我假设它已经激活,但JIC)

要查看$wpdb对象是否已经创建,您可以运行<?php print_r($wpdb);?>来打印对象的内容。

让我知道更多,希望我能帮助你。

我得到了这个致命错误,因为我忘记输入

global $wpdb;

在我放置$wpdb->get_results()函数的文件内。