web-dev-qa-db-fra.com

ajax et nonce lorsque JavaScript est dans un fichier séparé

Je suis un peu confus sur la façon dont les nonces fonctionnent avec les requêtes ajax. On dirait que je suis supposé utiliser ceci: https://codex.wordpress.org/Function_Reference/check_ajax_referer

La demande ressemble à ceci:

<?php
//Set Your Nonce
$ajax_nonce = wp_create_nonce( "my-special-string" );
?>

<script type="text/javascript">
jQuery(document).ready(function($){
    var data = {
        action: 'my_action',
        security: '<?php echo $ajax_nonce; ?>',
        my_string: 'Hello World!'
    };
    $.post(ajaxurl, data, function(response) {
        alert("Response: " + response);
    });
});
</script>

Mais cette approche semble supposer que votre JavaScript est mélangé avec votre PHP, ce qui est une pratique que j’aime éviter. Quand j'écris une demande ajax pour un plugin, j'utilise admin_url( 'admin-ajax.php') pour séparer la demande, donc c'est un peu plus propre à lire.

Comment pourrais-je utiliser un nonce dans cette situation? Est-ce que je le passe dans le bit admin_url( 'admin-ajax.php')?

1
karl

Vous pouvez localiser votre script et transmettre l'URL nonce et ajax au script.
En savoir plus sur la localisation de script.

function wpse_206839() {

    // Register our script just like we would enqueue it - for WordPress references
    wp_register_script( 'my-special-script', 'directory/my-special-script.js', array( 'jquery' ), false, true );

    // Create any data in PHP that we may need to use in our JS file
    $local_arr = array(
        'ajaxurl'   => admin_url( 'admin-ajax.php' ),
        'security'  => wp_create_nonce( 'my-special-string' )
    );

    // Assign that data to our script as an JS object
    wp_localize_script( 'my-special-script', 'specialObj', $local_arr );

    // Enqueue our script
    wp_enqueue_script( 'my-special-script' );

}
add_action( 'wp_enqueue_scripts', 'wpse_206839' );

Cela nous permettra d'accéder à notre nonce dans JS en tant que console.log( specialObj.security );

2
Howdy_McGee