你应该使用WordPressAJAX-API 用于这些目的,而不是自定义脚本。您的问题是,脚本中没有加载所有WordPress API对象。
Here is an answer 它描述了AJAX-API在非常相似的情况下的用法。在那里,将在wpse_126886_ajax_handler()
作用同样,您也可以运行任何其他需要的查询。
根据评论中的新信息进行编辑:
您可能已经提到了»Jeditable«是jQuery的一个插件,并且有相关文档。
无论如何documentation jQuery插件的(»参数引用«)部分介绍了一种方法,您可以将更多参数传递给脚本。但首先,让我解释一下,如何将脚本排队以及如何传递数据(例如nonce
slug)到它:
/**
* enqueue jquery, jquery-jeditable and custom script
* and pass some data to
*
* @wp-hook wp_enqueue_scripts
* @return void
*/
function wpse_135219_enqueue_scripts() {
wp_register_script(
\'jquery-jeditable\',
plugin_dir_url( __FILE__ ) . \'js/jquery-jeditable.js\',
array( \'jquery\' ),
\'1.7.1\',
TRUE
);
wp_register_script(
\'wpse-135219\',
plugin_dir_url( __FILE__ ) . \'js/wpse-135219.js\',
array( \'jquery-jeditable\' ),
\'1.7.1\',
TRUE
);
$script_settings = array(
\'ajaxUrl\' => home_url( \'/wp-admin/admin-ajax.php\' ),
\'nonce\' => wp_create_nonce( \'wpse_135219\' ),
\'action\' => \'wpse_135219\'
);
wp_localize_script(
\'wpse-135219\',
\'wpSE135219\',
$script_settings
);
wp_enqueue_script( \'wpse-135219\' );
}
add_action( \'wp_enqueue_scripts\', \'wpse_135219_enqueue_scripts\' );
这些函数位于名为
wpse-135221.php
. 插件文件结构如下所示:
- wpse-135219-plugin/
--- js/
----- jquery-jeditable.js
----- wpse-135219.js
--- wpse-135219.php
使用
wp_localize_script()
初始化名为
wpSE135219
您可以在这里找到您的nonce甚至ajax URL。
下面是一个如何将其用于Jeditable的示例(wpse-135219.js
):
( function( $ ) {
\'use strict\';
$( document ).ready( function() {
var settings = wpSE135219,
params = {
wp_nonce : settings.nonce,
action : settings.action
};
$( \'.edit\' ).editable( settings.ajaxURL, {
submitdata : params
} );
} );
} )( jQuery );
现在您有了以下请求参数:
action "wpse_135219"
id "your_html_id"
value "your_value"
wp_nonce "3bd42174ec" // a wp nonce string
如上面提到的答案所示,必须在其上附加ajax处理程序的操作必须是
admin_ajax_wpse_135219
:
add_action( \'admin_ajax_your_form_action\', \'wpse_135219_ajax_handler\' );
function wpse_135219_ajax_handler() {
// your query stuff goes here
// don\'t forget to check $_POST[ \'wp_nonce\' ]
}
使用nonce use验证请求
wp_verify_nonce()