WordPressでJavascriptの変数をPHPに受け渡し、その値をsingle.phpで使うにはどうしたらいいのでしょうか?
【状況】
- A(Javascriptから渡ったデータ)をsingle.phpで使う方法がわからない。
php
1<?php 2//WordPressでXMLHttpRequestでPOST通信するための記述(function.phpに記載) 3 function my_ajax() { 4 wp_enqueue_script( 'ajax-script', get_template_directory_uri().'/js/test.js', null, '1.0.0', false ); 5 wp_localize_script('ajax-script','my_ajax_date',array( 6 'ajax_url' => esc_url(admin_url( 'admin-ajax.php')), 7 'nonce' => wp_create_nonce( 'my-ajax-nonce' ), 8 'action' => 'my-ajax-nonce', 9 )); 10 } 11 add_action( 'wp_enqueue_scripts', 'my_ajax', 1 );?>
javascript
1 const data ={ 2 ajaxurl: my_ajax_date.ajax_url, 3 action: my_ajax_date.action, 4 _nonce: my_ajax_date.nonce, 5 }; 6 if(window.fetch){ 7 let params = new URLSearchParams(); 8 params.append("action", data.action); 9 params.append("msg", "A(phpに渡したいデータ)"); 10 params.append("_nonce", data._nonce); 11 fetch(data.ajaxurl,{ 12 method:'POST', 13 credentials:"same-origin", 14 body:params 15 }).then(function(response){ 16if (response.ok) { 17 response.text().then(function(text){ 18 console.log(text);//A(phpに渡したいデータ)が問題なく表示される 19 }); 20 }, function(error){ 21 }); 22 } else { 23 alert('ご使用のブラウザはサポートしていません。Chrome, firefox, Edge等の最新版のブラウザをご使用下さい'); 24 }
php
1 <?php //(function.phpに記載) 2 function test() { 3 if(check_ajax_referer('my-ajax-nonce', '_nonce', false)){ 4//これ以降が処理されない 5 $msg = filter_input( INPUT_POST , 'msg' ); 6 echo($msg);//$msgをsingle.phpで使う方法を知りたい。 7 die(); 8} 9 10 } 11 add_action('wp_ajax_my-ajax-nonce', 'test'); 12 add_action('wp_ajax_nopriv_my-ajax-nonce', 'test'); 13?> 14
つぎの記事を参考にしました。
filter_inputを参考 【Javascript】Ajaxを使ってサーバ(PHP)にデータを渡す方法
wp_create_nonceの使い方を参考:WordPressでAJAX通信する方法
fetchの使い方を参考:WordPress の Ajax 処理で fetch を試してみる
ajax用のアクションフックの使い方を参照 wordpressで使ってみるajaxの基本
check_ajax_referer()の使い方を参照WordPressのAjaxにNonceを追加
check_ajax_referer()の使い方を参照WordPress, セキュア処理で使うnonce関数のちがい(CSRF対策)
[2022/1/17 追記]
もし現状のやり方で不可能なら、CSSのdisplayの変更で行う予定です。