web-dev-qa-db-ja.com

カスタム投稿タイプadminに追加するすべてのメタボックスにナンスフィールドが必要ですか。

私は現在、私のカスタム投稿タイプの管理者ページに取り組んでいます、そして私は2番目のメタボックスのために再び一回だけのフィールドを追加するべきかどうか決定に行き詰まってしまいました。私はカスタム投稿タイプにはとても慣れていませんが、これについてオンラインで検索しても、それほど多くの結果が得られるわけではありません。

何かご意見は?ありがとう。

15
Ana Ban

お勧めします。

データの発信元とユーザーの意図を確認するための独自のナンスを持っています(またそうするべきです)。メタボックスのナンスが1つだけの場合、そのメタボックスが削除されると問題が発生します(非表示と同じではありません)。削除された場合、2番目のメタボックスは、nonceがより長く送信されるため、保存されません(または少なくとも保存されるはずです)。

もちろん、セキュリティの観点からは、2番目のナンスによって追加されるものはありません-メタボックスを1つだけ更新し、もう一方を更新したくない場合を除きます:ノンスはアクションに固有でなければなりません


編集

指摘したように、投稿編集画面にはフォームが1つしかありません。そのため、理論的には、アクションとデータの発信元を検証するために必要なノンスフィールドは1つだけです。ただし、メタボックスは削除できるため、1つのメタボックスにナンスフィールドを含めるだけでは、ナンスが存在する保証はありません。各メタボックスにノンスフィールドを配置することにより、データを処理する前に、そのメタボックスからのデータが送信されているかどうかを確認できます。例えば:

save_post_call_back($post_id){

  //Check this is not an auto-save route

  if(nonce of metabox1 present and valid){
     //Process data from metabox1
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

  if(nonce of metabox2 present and valid){
     //Process data from metabox2
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

}

ナンスフィールドのnameは、メタボックスに一意である必要があります(他のプラグインのフォームに存在する他のナンスと衝突しない) 。

ナンスvalueはアクションに一意である必要があります(これには通常、データの起源が含まれている必要があります(クイック編集ではなく編集ポストなど) )。私は通常、投稿IDも含めます。

12
Stephen Harris

あなたはそれにnonceフィールドを追加しても消えない送信ボックスをフックすることもできます。

add_action( 'post_submitbox_start', 'theme_submitdiv_extra' );
function theme_submitdiv_extra()
{
  wp_nonce_field( 'theme_meta_box_nonce', 'meta_box_nonce' );
}

それから、あなたのsave_postアクションで:

if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'theme_meta_box_nonce' ) ) return;
5
chilljul

Nonceフィールドは、フォームの内容が現在のサイト上の場所から来たもので、他の場所から来たものではないことを検証するために使用されます。

コーデックス:wp_nonce_field

フォームごとに1つだけのnonceフィールド が必要です。私には意味がないので、1つ以上を使用してください。

多分あなたはあなたの要求が管理ページからのものであることを確かめるために check_admin_referer() を調べて使うことができます

1
Tribalpixel