前提・実現したいこと
WordPressでAJAXできるように取り組んでいます。
nonceを発行しそれをJSに出力したいのですが、wp_headから出力するにはどうしたらいいでしょうか。
発生している問題・エラーメッセージ
以下のソースコードで、「var MY_NONCE」がJSに出力できません。
出力できないことは、ページ読み込み後、「console.log(MY_NONCE);」を実行するという方法で確認しました。
エラーメッセージはありません。
該当のソースコード
functions.php
php
1define( "HIS_ID", get_current_user_id() ); 2 3add_action( 'wp_head', 'MY_NONCE_ajax' ); 4function MY_NONCE_ajax() { 5 if( HIS_ID != 0 ) { 6 $action_arr = [ 7 'ajax_post' 8 ,'ajax_visit' 9 ]; 10 } 11 else{ 12 $action_arr = [ 'ajax_password', 'ajax_login' ]; 13 } 14 foreach ($action_arr as $action) { 15 $keyword = $action . 'xxx'; 16 $nonce = wp_create_nonce( $keyword ); 17 $MY_NONCE[$action] = $nonce; 18 } 19 echo '<script>var MY_NONCE = '.$MY_NONCE.'</script>'; 20} 21
試したこと
出力のフックが悪いのかといろいろ試しまして、上記wp_headを下記のようにwp_enqueue_scriptsとlogin_enqueue_scriptsにし、echoでなくwp_localize_scriptを使ったところ出力できました。
functions.php
php
1define( "HIS_ID", get_current_user_id() ); 2 3// add_action( 'wp_head', 'MY_NONCE_ajax' ); ← これをやめた 4add_action( 'wp_enqueue_scripts', 'MY_NONCE_ajax' ); // ← これを追加 5add_action( 'login_enqueue_scripts', 'MY_NONCE_ajax' ); // ← これを追加 6function MY_NONCE_ajax() { 7 if( HIS_ID != 0 ) { 8 $action_arr = [ 9 'ajax_post' 10 ,'ajax_visit' 11 ]; 12 } 13 else{ 14 $action_arr = [ 'ajax_password', 'ajax_login' ]; 15 } 16 foreach ($action_arr as $action) { 17 $keyword = $action . 'xxx'; 18 $nonce = wp_create_nonce( $keyword ); 19 $MY_NONCE[$action] = $nonce; 20 } 21 // echo '<script>var MY_NONCE = '.$MY_NONCE.'</script>'; // ← これをやめた 22 wp_localize_script( 'init.js', 'MY_NONCE', $MY_NONCE ); // ← これを追加 23 24} 25
しかしwp_localize_scriptのように出力先を指定せず、最初のソースコードのようにwp_headからechoし、どのファイルでもMY_NONCEを使えるようにできればいいと考えているのですが、wp_headの方向で実装する方法はございますか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/27 10:43
2020/05/27 10:52
2020/05/28 22:14