web-dev-qa-db-fra.com

Ai-je besoin d'un champ nonce pour chaque méta-boîte que j'ajoute à mon type de message personnalisé admin?

Je travaille actuellement sur la page d'administration de mon type de publication personnalisé et je ne pouvais pas décider d'ajouter un champ nonce à nouveau pour le deuxième métabox ou non. Je suis très novice dans les types d'articles personnalisés, et la recherche en ligne à ce sujet ne donne pas vraiment autant de résultats.

Des pensées? Merci.

15
Ana Ban

Je recommanderais donc.

Vous avez (et devriez) disposer de votre propre outil de vérification de l'origine des données et de l'intention de l'utilisateur. Si vous ne disposez que d'un seul cas pour une métabox, vous rencontrerez des problèmes si cette métabox est supprimée (ce n'est pas la même chose que masqué). Si elle est supprimée, la seconde metabox ne sera (ou du moins ne devrait pas) être sauvegardée car le nonce est envoyé plus longtemps.

Bien sûr, du point de vue de la sécurité, rien n’est ajouté par un second nonce - à moins que vous ne souhaitiez mettre à jour un seul métabox et pas l’autre: les nonces doivent être uniques à l’action .


Modifier

Comme indiqué, il n'y a qu'un seul formulaire pour l'écran de post-édition. Donc, en théorie, vous n'avez besoin que d'un seul champ nonce pour valider l'action et l'origine des données. Cependant, puisque les métaboxes peuvent être supprimés - en ayant un champ nonce dans un seul métabox, rien ne garantit que le nonce sera là. En plaçant un champ nonce dans chaque métabox, vous pouvez vérifier si les données de ce métabox ont été envoyées (et proviennent effectivement de l'endroit où vous pensez qu'elles se trouvent) avant de traiter des données. Par exemple:

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.
  }

}

Le nom name du champ nonce doit être propre au métabox (et ne pas entrer en conflit avec les autres nonces présents sur le formulaire provenant d'autres plug-ins).

La nonce value devrait être propre à l’action (et ceci devrait généralement inclure l’origine des données (par exemple, éditer-poster plutôt que rapide-éditer)). J'inclus généralement aussi le post-ID.

12
Stephen Harris

Vous pouvez également accrocher la boîte de soumission qui ne disparaît jamais en y ajoutant le champ nonce

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

Ensuite, dans votre action save_post:

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

Le champ nonce est utilisé pour valider que le contenu du formulaire provient de l'emplacement sur le site actuel et pas ailleurs.

codex: wp_nonce_field

seulement un champ de nonce par formulaire est requis, utilisez-en plusieurs comme pas de sens pour moi.

peut-être que vous pouvez enquêter et utiliser check_admin_referer () pour vous assurer que votre requête provient d’une page d’administrateur

1
Tribalpixel