我有同样的问题。实际上,AJAX没有得到$ wpdb对象。你需要在那里设置你的路径,它会正常工作。
require_once( 'path/to/wordpress/wp-includes/wp-db.php' ); if ( file_exists( 'path/to/wordpress/wp-content/db.php' ) ) require_once( 'path/to/wordpress/wp-content/db.php' ); $wpdb = new wpdb( 'user', 'password', 'database', 'host' );
请阅读 这个帖子 仔细了解WordPress插件中的AJAX。
您需要将AJAX请求发送到特殊脚本,而不是直接发送到您的插件!然后使用操作处理请求。
但是你做了什么? - 您向脚本发送请求,因此它对WordPress :)一无所知。 WordPress必须包含您的插件,然后您的插件将可以访问本机函数和类。
的 更新。更详细的解释。 强>
AJAX只是从给定的链接调用您的脚本。当您直接调用脚本时(http://site.com/wp-content/plugins/myplugin/insert_tim.php),然后php开始执行它并且没有更多!它不会启动WordPress引擎。所以$ wpdb将是未定义的变量,它将在使用时抛出异常(如果你的php配置中禁用了异常显示,那么你只会看到“内部服务器错误500”)。当然,如果你删除$ wpdb用法 - 一切都会好的。
什么是WordPress的 ajaxurl(http://site.com/wp-admin/admin-ajax.php) 更改?如果你打开这个文件 - 你会看到,它包含WordPress引擎加载:
/** Load WordPress Bootstrap */ require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );
因此,如果你将ajaxurl传递给你的AJAX调用 - 那么这个脚本将加载WordPress引擎,然后使用动作 - 将调用你的函数,你的函数将看到$ wpdb类。
的 记住规则:不要直接使用AJAX调用插件的PHP脚本。使用本机WordPress行为。 强>