我创建了一个自定义搜索,该搜索由ajax调用处理。它对管理员正常工作,但不适用于非管理员但已登录的用户。
管理员将获得返回的预期结果。非管理员的登录用户将出现ajax错误,甚至无法访问添加了的memberSearchAjax函数
add_action( \'wp_ajax_memberSearchAjax\', \'memberSearchAjax\' );
就像ajax请求试图admin-ajax.php
它以某种方式失败,但仅当登录的用户不是管理员时。
My question... why might this Ajax request only work for Admin and not for other logged in users?
一些代码。。。
我将自定义脚本排队并本地化:
function memberSearch_scripts() {
wp_enqueue_script( \'memberSearch\', get_stylesheet_directory_uri() . \'/js/memberSearch.js\', array( \'jquery\' ) );
wp_localize_script( \'memberSearch\', \'memberSearchObject\', array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ) )
);
}
//add_action( \'wp_enqueue_scripts\', \'memberSearch_scripts\' );
add_action( \'init\', \'memberSearch_scripts\' );
然后,一个名为memberSearchAjax的相当复杂的函数处理搜索。我对此使用add\\u操作,如下所示:
add_action( \'wp_ajax_memberSearchAjax\', \'memberSearchAjax\' );
add_action( \'wp_ajax_nopriv_memberSearchAjax\', \'memberSearchAjax\' ); <-- added this to see if it would help... doesn\'t
我的javascript ajax如下所示:
$(\'#searchMembersForm\').on(\'submit\', function (e) {
e.preventDefault();
$(\'.searchMembersLetter\').removeClass(\'active\');
var spinner = \'<div class="ajax-spinner"><img src="/wp-content/themes/foobar/images/ajax-loader.gif" /></div>\';
$(\'#memberSearchResults\').html(spinner);
$.ajax({
type: \'POST\',
dataType: \'json\',
url: memberSearchObject.ajaxurl,
data: {
\'action\': \'memberSearchAjax\',
\'firstName\': $(\'#firstName\').val(),
\'security\': $(\'#security\').val(),
\'datasource\': 1
},
error:function(jqXHR, textStatus, errorThrown){
console.log(textStatus);
console.log(errorThrown);
console.log(jqXHR);
$(\'#memberSearchResults\').html(\'<p>There was an error with your request. It is: <br>\' + errorThrown.message + \'</p>\');
},
success: process
});
});
名为“process”的success函数非常复杂,因此我不包括它,但非管理员用户无论如何都无法访问它。