私はnonceがどのようにajaxリクエストと連携するのかについて少し混乱しています。私はこれを使うことになっているようです: https://codex.wordpress.org/Function_Reference/check_ajax_referer
リクエストは次のようになります。
<?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>
しかし、このアプローチはあなたのJavaScriptがあなたのPHPと混在していることを前提としているように思われます。これは私が避けたいやり方です。プラグイン用のajaxリクエストを書くときは、リクエストを分離するためにadmin_url( 'admin-ajax.php')
を使います。
この状況でどのように私は一回だけを使うでしょうか? admin_url( 'admin-ajax.php')
ビット内で渡しますか?
スクリプトをローカライズして、nonceとajaxのURLをスクリプトに渡すことができます。
スクリプトのローカライゼーションについてさらに詳しく
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' );
これにより、私たちはJSのnonceにconsole.log( specialObj.security );
としてアクセスできるようになります。