【发布时间】:2018-02-23 14:39:56
【问题描述】:
我正在开发一个 WordPress 插件并尝试在其中使用 wp_ajax。
这是我的代码:
function register_role_category_access() {
wp_enqueue_script( 'role_category_access', plugin_dir_url( __FILE__ ) . 'js/category-restrict.js', array( 'jquery' ), '1.0.0', true );
wp_localize_script( 'role_category_access', 'category_access_ajax_url', array(
'url' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'role_access_nonce' )
) );
}
add_action( 'admin_enqueue_scripts', array( $this, 'register_role_category_access' ) );
function update_role_category_access() {
$user_role = isset( $_POST[ 'user_role' ] ) ? $_POST[ 'user_role' ] : 'Not defined';
$selected_cats = isset( $_POST[ 'selected_cats' ] ) ? $_POST[ 'selected_cats' ] : 'None selected';
echo "Chosen role: " . $user_role . ' and categories are ' . $selected_cats;
die();
}
add_action( 'wp_ajax_category_access', array( $this, 'update_role_category_access' ) );
由于上述操作只能从管理面板完成,我没有使用wp_ajax_nopriv_* 钩子。
JavaScript 文件内容 (category-restrict.js):
function updateAccess( obj ) {
var selectedCatIds = "";
var accessBox = jQuery( obj ).closest( '.access-box' );
var roleSlug = jQuery( accessBox ).find(".hidden_role").attr("value");
var catList = jQuery( obj ).closest( '.access-box' ).find( '.category-list' );
jQuery( catList ).children().each( function() {
if( jQuery(this).is(":checked") ) {
selectedCatIds += jQuery(this).val() + ",";
}
});
var idLen = selectedCatIds.length;
if( idLen > 0 ) {
selectedCatIds = selectedCatIds.substring(0, idLen - 1);
}
jQuery.ajax({
type: 'POST',
url: category_access_ajax_url, //wp_localize_script: 844
data: {
action: 'category_access', //wp_ajax_category_access: 71
user_role: roleSlug,
selected_cats: selectedCatIds,
},
success: function( result ) {
alert( result );
}
});
}
但是当我调用脚本时,我在控制台中收到以下错误:
http://album.multibaselocal.com/wp-admin/[object%20Object]404(不是 找到)
我查看了this,但无法理解我做错了什么,因为我对 WordPress 的了解仍然有限。
【问题讨论】: