4

我正在尝试在 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->prefix 行上)

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

上面的代码 csf_form_handler.php不在函数中。我不知道这是否有区别。

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

谢谢你。

4

4 回答 4

17

我遇到了同样的问题,但我通过包含wp-config.phpWordPress 文件夹根目录中的文件来解决它,如下所示:

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

我希望这有帮助。

于 2012-11-21T18:28:36.323 回答
6

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

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

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。

于 2011-09-23T19:24:55.367 回答
2

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

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

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

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

于 2011-09-22T21:12:02.013 回答
1

我收到了这个致命错误,因为我忘了放

global $wpdb;

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

于 2019-01-27T00:41:30.340 回答