wp_ajax_nopriv不适用于已注销的用户

时间:2017-06-20 12:55:09

标签: php jquery ajax wordpress

对于记录,我每隔一段时间搜索一次,但是找不到解决方案

我只是尝试使用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中没有什么可以防止这种情况。

2 个答案:

答案 0 :(得分:1)

检查以下情况,我不能肯定地说

1)你有没有得到jQuery错误?,检查浏览器控制台,如果有任何明确的话。

2)在浏览器开发者工具中检查admin-ajax.php响应 - &gt;网络(PFA)

enter image description here

答案 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
}