質問: admin-post.phpの本当の意図は何ですか? ユーザのためのプラグインの中で適切なフォーム送信処理を探している間(フロントエンド)、この目的のためにadmin-post.phpを使うことを奨励するこの記事 handling post requests wordpress way に出会いました。ヘッダを調べると、ある種の確認があります。 /** * wordpress generic request (post/get) handler * * intended for form submission handling in themes and plugins. * * @package wordpress * @subpackage administration */ 私の主な関心事は、このメソッドがwpコードのadmin部分から来ていることと、非adminタスクでそれを使用することには多少のあいまいさがあることです。誰か(特にwp作者)は、このアプローチの意図が本当に全体論的であること、あるいは私が思うように管理者だけであることを確認できますか?
回答: admin-post.phpは、リクエストを処理するための貧弱なmansコントローラのようなものです。initのような代替フックでリクエストを処理し、スーパーグローバルに特別なキーが存在するかどうかをチェックする必要がないという意味では便利です。function handle_request() { if ( !empty($_post['action']) && $_post['action'] === 'xyz' ) { //do business logic } } add_action('init', 'handle_request'); 代わりにadmin-post.phpを使うことで、アクションに与えられた接尾辞と一致するアクション値を与えるどんな要求でも常に呼ばれるコールバック関数を指定することができます。function handle_request() { //do business logic here... } add_action( 'admin_post_handle_request', 'handle_request' ); add_action( 'admin_post_nopriv_handle_request', 'handle_request' ); 上の例では、!empty($_post['action']) && $_post['action'] === 'xyz'をチェックする必要性を無視することができます。この時点で、処理は私たちのために行われているからです。これは、アクションパラメータと値を指定し、その値をadmin-post.php urlに投稿した結果です。さらに、admin-post.phpは$_postと$_getの両方を処理するので、もっと複雑な処理をしたいのでなければ、要求がどの種類のメソッドであるかを確認する必要はありません。一番下の行使用しても安全です、それはあなたを見捨てているのは単なる名前です。ちなみにadmin-post.phpを要求しても応答として白い画面しか表示されないため、wp_redirect()を使用可能な場所に戻すことを忘れないでください。