致命错误:调用非成员函数get_results()(插件和WordPress的jQuery)
我试图在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?
谢谢。
编写插件时,最好将数据处理保存在插件的主文件中(即不要将其发送到单独的文件),并激活相应的函数来处理它。基本上,您可以将表单的动作设置为指向插件的文件或包含表单的页面。
我们假设您正在使用的这种形式显示在网站的前端和侧边栏上。为了处理数据从当用户点击“提交”该表单来的,你可以创造我们的插件的文件中的函数,例如:
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()来验证。
你在哪里运行这段代码?这听起来像你正在运行它之前$ wpdb实例创建(或超出范围)。
你是如何载入你的csf_form_handler.php文件的?你是否在Wordpress中包含脚本的一部分,还是你自己的插件?如果是后者,记住你需要先激活它,所以WP可以将它包含在加载顺序中(我假设它已经被激活,但JIC)
要查看$ wpdb对象是否已经创建,您可以运行<?php print_r($wpdb);?>
来打印出对象的内容。
让我知道更多,并希望我能够帮助你。
Hi @Vidal Quevedo,谢谢你的留言。我试图制作我自己的插件。我将表单的动作设置为csf_form_handler.php。我的插件已激活。当我运行print_r($ wpdb)时,“我得到了通知:未定义的变量:wpdb”。我想这是因为处理程序是通过表单的action =“my handler”加载的,所以它无法访问WP函数。如果您有任何建议,我很乐意听到他们。谢谢。 – Laxmidi
我碰到了同样的问题,但我得到了它由包括来自WordPress的文件夹的根目录下的文件wp-config.php
这样解决:
require_once('../../../wp-config.php');
global $wpdb;
我希望这有助于。
require_once('../../../ wp-config.php');确切地说。 – mailo
工作很好。谢谢! –
Hi @Vidal Quevedo,非常感谢您的帮助。我学到了一些新东西。 – Laxmidi