web-dev-qa-db-fra.com

Comment envoyer une demande AJAX dans wordpress Backend

Sur le devant le wp_localize_script semble fonctionner comme quand je visait la source que je peux voir la nonce.

wp_localize_script('scripts', 'myAjax', array(
    'root_url' => get_site_url(),
    'ajaxurl'  => admin_url( 'admin-ajax.php' ),
    'nonce'    => wp_create_nonce('wp_rest')
));

Par exemple, lorsque j'essaie d'obtenir une liste d'utilisateurs lorsqu'il est connecté au wordpress Backend, je reçois une erreur non autorisée 401. Lorsque je visite la source, mon non -ce n'est pas là, uniquement sur le frontage.

$.ajax({
        url: 'https://example.com/wp-json/wp/v2/users/',
        method: 'GET',
        beforeSend: (xhr) => {
        xhr.setRequestHeader('X-WP-Nonce', myAjax.nonce);
        },
    })
    .done(function (data) {
        console.log(data);
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        console.log(textStatus + ': ' + errorThrown);
        console.warn(jqXHR.responseText);
    })
1
user8463989

Lorsque vous enlevez ou localisez un script, vous le faites spécifiquement pour l'extrémité avant ou l'administrateur. Si vous souhaitez enroquer ou localiser un script dans les deux, vous devez le faire spécifiquement pour les deux.

Ceci est utilisé pour enquacer/localiser pour l'avant

add_action( 'wp_enqueue_scripts', 'your_function_front' );
your_function_front() {
     wp_localize_script('scripts', 'myAjax', array(
         'root_url' => get_site_url(),
         'ajaxurl'  => admin_url( 'admin-ajax.php' ),
         'nonce'    => wp_create_nonce('wp_rest')
     ));
}

Mais pour le backend, vous devez également ajouter:

add_action( 'admin_enqueue_scripts', 'your_function_admin' );
your_function_admin() {
     wp_localize_script('scripts', 'myAjax', array(
         'root_url' => get_site_url(),
         'ajaxurl'  => admin_url( 'admin-ajax.php' ),
         'nonce'    => wp_create_nonce('wp_rest')
     ));
}

Donc, si cela fonctionne à l'avant, vous avez probablement effectué le premier correctement, et vous devez maintenant le faire pour le dos. N'oubliez pas de nommer vos fonctions à quelque chose qui aura un sens dans votre plugin/thème.

1
Tony Djukic