WordPressでJavascriptの変数をPHPに受け渡し、その値をsingle.phpで使うにはどうしたらいいのでしょうか?
【状況】
- A(Javascriptから渡ったデータ)をsingle.phpで使う方法がわからない。
php
<?php //WordPressでXMLHttpRequestでPOST通信するための記述(function.phpに記載) function my_ajax() { wp_enqueue_script( 'ajax-script', get_template_directory_uri().'/js/test.js', null, '1.0.0', false ); wp_localize_script('ajax-script','my_ajax_date',array( 'ajax_url' => esc_url(admin_url( 'admin-ajax.php')), 'nonce' => wp_create_nonce( 'my-ajax-nonce' ), 'action' => 'my-ajax-nonce', )); } add_action( 'wp_enqueue_scripts', 'my_ajax', 1 );?>
javascript
const data ={ ajaxurl: my_ajax_date.ajax_url, action: my_ajax_date.action, _nonce: my_ajax_date.nonce, }; if(window.fetch){ let params = new URLSearchParams(); params.append("action", data.action); params.append("msg", "A(phpに渡したいデータ)"); params.append("_nonce", data._nonce); fetch(data.ajaxurl,{ method:'POST', credentials:"same-origin", body:params }).then(function(response){ if (response.ok) { response.text().then(function(text){ console.log(text);//A(phpに渡したいデータ)が問題なく表示される }); }, function(error){ }); } else { alert('ご使用のブラウザはサポートしていません。Chrome, firefox, Edge等の最新版のブラウザをご使用下さい'); }
php
<?php //(function.phpに記載) function test() { if(check_ajax_referer('my-ajax-nonce', '_nonce', false)){ //これ以降が処理されない $msg = filter_input( INPUT_POST , 'msg' ); echo($msg);//$msgをsingle.phpで使う方法を知りたい。 die(); } } add_action('wp_ajax_my-ajax-nonce', 'test'); add_action('wp_ajax_nopriv_my-ajax-nonce', 'test'); ?>
つぎの記事を参考にしました。
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の変更で行う予定です。
まだ回答がついていません
会員登録して回答してみよう