web-dev-qa-db-fra.com

L'appel ajax de WordPress pour les utilisateurs non connectés ne fonctionne pas

J'ai sur la boîte de recherche frontend, j'ai implémenté la complétion automatique pour cela, et quand je suis connecté, cela fonctionne très bien pour moi.

Mais quand je ne suis pas connecté, je reçois 302 à la suite d'un appel ajax, les en-têtes de réponse ont un emplacement, alors il essaie de rediriger les messages, je ne sais pas pourquoi. Je remarque beaucoup de messages sur ce problème, mais aucun message/question ne m'a pas aidé.

Mon code, qui fonctionne lorsque les utilisateurs sont connectés, mais ne fonctionne pas lorsque les utilisateurs ne sont pas connectés, aidez-nous.

jQuery

$.ajax({
    type: 'POST',
    url: MyAjax.ajaxurl,
    data: {
        action : 'myajax-submit',
        term : request.term,
        _ajax_nonce : MyAjax.ajax_nonce
    },
    dataType: "json",
    beforeSend: function(jqXHR, settings){
    },
    success: function(data, textStatus, jqXHR){
        response(data);
    },
    error: function(jqXHR, textStatus, errorThrown){
        response([{
            'value':'Error retriveing data',
            'id':1
        }]);
    },
    complete: function(jqXHR, textStatus){
    },
    statusCode: {                    
    }
});

php

add_action('wp_ajax_myajax-submit', 'myajax_submit');


add_action('wp_ajax_nopriv_myajax-submit', 'myajax_submit');

    function myajax_submit() {
        global $wpdb;

        //check_ajax_referer('myajax_nonce', '_ajax_nonce');

        if (isset($_POST["term"])) {
            $q = strtolower($_POST["term"]);

            .....

            $json_response = array();

            ...

            header("Cache-Control: no-cache, must-revalidate");
            header("Pragma: no-cache");
            header("Content-type: text/x-json");

            print json_encode($json_response);

            die();
        }
}
2
user1147

On dirait que vous rencontrez un problème avec un autre plugin ou une autre fonction qui tente d'empêcher les utilisateurs non connectés ou non administrateurs d'accéder à la zone wp-admin afin qu'elle soit redirigée à partir de wp-admin/admin-ajax.php et vous donne votre réponse 302 .

Vous devez trouver le code qui fait cela et ajouter une condition pour ne pas rediriger si la constante DOING_AJAX est définie.

3
Chris_O

Une demande non-administrateur ... est toujours une demande d'administrateur

Dans admin-ajax.php, la constante WP_ADMIN est définie sur TRUE. Donc, si vous incluez vos fichiers dans l'exemple if ( ! is_admin() ), votre demande sera abandonnée au début de admin-ajax.php.

0
kaiser