実現したいこと
wp_create_nonceを使い送信データの偽装を禁じ、通信を安全性を確保したいです
前提
前提として、このようなPHPで記事一覧とボタンが出力されます
▼single.php
<?php while ( $the_query->have_posts() ) :$the_query->the_post();?> <article> <h2><?php the_titiel();</h2> <button type="button" data-target_id="<?= $post->post_author; ?>">このユーザーを許可</button> </article> <?php endif; endwhile; wp_reset_postdata(); ?>
出力はこうなり、クリックするとdata-target_id
がupdate_user_meta
を介して自分のDBに登録されます
▼HTML
<article> <h2>雨についての日記</h2> <button type="button" data-target_id="1">このユーザーを許可</button> </article> <article> <h2>雲についての日記</h2> <button type="button" data-target_id="2">このユーザーを許可</button> </article>
以上が前提です
ここで、DB登録についての安全性を考え、nonceを使いたいと思っています
そこで次のコードにたどり着きました
###該当のソースコード
▼functions.php
function my_enqueue_scripts_ajax() { $handle = 'my_script'; $jsFile = 'path/to/myscript.js'; wp_register_script($handle, $jsFile, ['jquery']); $action= 'my_ajax_action'; wp_localize_script($handle, 'MY_AJAX', [ 'api' => admin_url( 'admin-ajax.php' ), 'action' => $action, 'nonce' => wp_create_nonce( $action ), // ここをボタンの数だけ実行するのだと思いますが、それがわかりません ]); wp_enqueue_script($handle); } add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts_ajax' );
しかし疑問があります
**『ボタンの数だけnonceを出力する方法』**です
おそらく**『'nonce' => wp_create_nonce( $action ),
の部分を、ボタンの数だけ実行して、ボタンに見合ったnonceをs出力する』**のだと思いますが、その方法をご教授頂ければと思います
###行き詰っているところ
上のnonce出力コードはfunctions.phpに書いているので、single.phpのループでどんな記事が出力されるのかわからないはずです
そんな中で、どうやって**『'nonce' => wp_create_nonce( $action ),
の部分を、ボタンの数だけ実行して、ボタンに見合ったnonceをs出力する』**ということが可能になるでしょうか?
###試したこと
それを可能にするために、single.phpのループの中にfunctions.phpのコードを置いてみました
▼single.php
<?php while ( $the_query->have_posts() ) :$the_query->the_post();?> <?php // ループの中でボタンの情報を取得します $target_id = get_theID(); // そしてここにfunctions.phpのコードを置いてみました function my_enqueue_scripts_ajax() { $handle = 'my_script'; $jsFile = 'path/to/myscript.js'; wp_register_script($handle, $jsFile, ['jquery']); $action= 'my_ajax_action'; wp_localize_script($handle, 'MY_AJAX', [ 'api' => admin_url( 'admin-ajax.php' ), 'action' => $action, ''.$name.'_nonce' => wp_create_nonce( 'my_ajax_'.$name.'_'.$target_id.'_allow' ), // ここでボタンに見合ったnonceが出力できるかと考えましたがだめでした ]); wp_enqueue_script($handle); } add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts_ajax' ); ?> <article> <h2><?php the_titiel();</h2> <button type="button" data-target_id="<?= $post->post_author; ?>">このユーザーを許可</button> </article> <?php endif; endwhile; wp_reset_postdata(); ?>
エラーは出ませんでしたが、そもそもCDATAも出力されず、残念ながら実現したいことには至りませんでした
かなり調べてもこのようなケースが明確に記されたものは見当たらず、初心者の考えで申し訳なく思いつつも、質問サイトを利用させていただくことになりました
みなさまからご意見、ご回答をお待ちしております
どうぞ宜しくお願い致します