对于记录,我每隔一段时间搜索一次,但是找不到解决方案
我只是尝试使用wp_ajax_nopriv为登出的用户添加ajax内容到页面失败。我尝试过停用所有插件,但没有帮助。虽然我确实想要仅仅向管理员锁定对后端管理员的访问权限,但我目前还没有实现。
加载脚本
function html5blank_header_scripts()
{
if ($GLOBALS['pagenow'] != 'wp-login.php' && !is_admin()) {
wp_register_script('globalJs', get_template_directory_uri() . '/js/global.js', array('jquery'), '1.0.0'); // Custom scripts
wp_enqueue_script('globalJs'); // Enqueue it!
wp_localize_script(
'globalJs',
'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 )
);
}
}
PHP ajax功能
add_action( 'wp_ajax_new_ajax_event_template', 'new_ajax_event_template' );
add_action( 'wp_ajax_nopriv_new_ajax_event_template', 'new_ajax_event_template' );
function new_ajax_event_template() {
global $post;
$postID = $_POST["post_id"];
$post = get_post($postID);
<------- lots of stuff that works for logged in user ----->
die();
}
JQuery ajax脚本
$(document).on("click", ".title[data-ajax='post']", function() {
$post_id = $(this).data("id");
$post_type = $(this).data("type");
$post_url = $(this).data("url");
var historyData = $(".wrapper").attr("data-history");
if (!historyData){
historyData = [];
}
else{
historyData = JSON.parse(historyData);
}
historyData.push({
id: $post_id,
type: $post_type,
url: $post_url
});
var data = {
action : 'new_ajax_'+ $post_type +'_template',
post_id : $post_id
};
$("#main").empty().hide();
$.ajax({
url : ajax_object.ajax_url,
type : 'post',
data : data,
success: function(html) {
$("#main").append(html);
history.pushState('data', '', $post_url);
$(".wrapper").attr("data-id", $post_id);
$(".wrapper").attr("data-history", JSON.stringify(historyData));
$("#main").fadeIn("fast");
}
});
});
这对于登录用户来说非常有效,但登录用户失败了,我不明白为什么。在functions.php中没有什么可以防止这种情况。
答案 0 :(得分:1)
答案 1 :(得分:0)
我通过确保在头部
中设置了admin-ajax.php来修复此问题add_action('wp_head', 'plugin_set_ajax_url');
function plugin_set_ajax_url() {
?>
<script type="text/javascript">
var ajax_object = {};
ajax_object.ajax_url = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>
<?php
}