rararan998
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 「nonce」の使い方についてでも、nonceを複数発行しているサイトってあるじゃないですか?
そしてそのサイトはつまり、複数のアクションを使い分けているということですよね。(なぜなら「アクション毎に nonce を別々にするのが望ましいから」です。)
ではそれらのサイトはなぜ、複数のアクションに分けているんでしょう?
同じアクションで条件分岐すればいいだけなのに。
そう思いませんでしょうか?あと、どのテーマでも記事へのコメントのnonceは、コメントごとに別々に発行されているみたいに見られます。これらが別々のアクションになっているのっておかしくないですか?全てコメントするだけのアクションなのに、nonceが別になっているんですよね。
フォーラム: 使い方全般
返信が含まれるトピック: 「nonce」の使い方についてあ、それはわかるんですが、同じアクションなのは僕が同じアクションとして処理してるだけじゃないですか?
ボタンのデータ属性(allowとadd)でアクションを分けてもよかったのですが(my_ajax_action_allowとmy_ajax_action_addのように)、それを同じアクション(my_ajax_action)の中で処理してるというだけですよね。
でもこれらが同じでいいなら、「どういうときに同じじゃダメなのか」がわからないんです。
だって、全てのAjaxにおいてHTMLにデータ属性をつければ、そのデータ属性を使って先の返信にあるように
if( $action_name == 'allow' ){} if( $action_name == 'add' ){} if( $action_name == 'other' ){}
などと条件分岐して、全て同じmy_ajax_actionの中で処理できるじゃないですか?
でも実際には同じアクション(my_ajax_action)の中でまとめず、アクションは分ける必要があるんですよね?
その「どういうときに同じじゃダメなのか」を知りたいということなんです。
フォーラム: 使い方全般
返信が含まれるトピック: 「nonce」の使い方についてこんにちは。どうもありがとうございます。お詳しそうな方にそう言って頂けて助かります。これからの方針が少し固まりました。
ところで「アクション毎」とのことですが、たとえば質問にあるような『user metaの「’allow’」が更新されるもの』だけでなく、『user metaの「’add’」が更新されるもの』というのもがあった場合はいかがでしょうか?
これを僕は同じアクションとして扱おうとしているんですが、どうですか?
たとえばボタンのデータ属性を次のように分けまして、
『user metaの「’allow’」が更新されるもの』
<button type="button" data-target_id="1" data-action_name="allow">このIDを許可</button>
『user metaの「’add’」が更新されるもの』
<button type="button" data-target_id="1" data-action_name="add">このIDを追加</button>
そしてPHPでは下記のように、同じアクション(my_ajax_action)の中で、JSから受け取ったデータ属性に応じて「’allow’」と「’add’」を分岐させる。という方法です。
add_action( 'wp_ajax_my_ajax_action', 'my_ajax_event' ); add_action( 'wp_ajax_nopriv_my_ajax_action', 'my_ajax_event' ); function my_ajax_event() { $action = 'my_ajax_action'; if( check_ajax_referer($action, 'nonce', false) ) { $u_id = get_current_user_id(); $target_id = esc_html( $_POST['target_id'] ); $action_name = esc_html( $_POST['action_name'] ); if( $action_name == 'allow' ){ update_user_meta( $u_id, 'allow', $target_id ); } if( $action_name == 'add' ){ update_user_meta( $u_id, 'add', $target_id ); } } die(); }
いかが思われますか?
このような場合ではアクションは分けた方がいいでしょうか?もしよろしければ引き続き、「どのような場合にアクションを分けるべきか」について踏み込んだご意見を頂けますと嬉しいです。