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

13

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

Des pensées? Merci.

    
posée Ana Ban 18.04.2012 - 19:01

4 réponses

12

Je le recommanderais.

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 rencontrez 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 métabox 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 deuxième nonce - à moins que vous ne souhaitiez mettre à jour un seul métabox et pas l’autre: les nonces doivent être uniques à l’action . / p>

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, il n’ya aucune garantie que le nonce sera là. En plaçant un champ nonce dans chaque métabox, vous pouvez vérifier si des 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. E.g:

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 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 valeur doit être unique pour l'action (et cela doit généralement inclure l'origine des données (par exemple, modifier-publier plutôt que de modifier rapidement). J'inclus généralement aussi l'identifiant du post.

    
réponse donnée Stephen Harris 18.04.2012 - 20:01
4

Vous pouvez également accrocher la zone 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;
    
réponse donnée chilljul 18.10.2013 - 17:07
1

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 non-créance par formulaire est requis, utilisez-en plusieurs comme non-sens pour moi.

Peut-être pouvez-vous rechercher et utiliser check_admin_referer () pour vous assurer que votre demande provient d'une page d'administration

    
réponse donnée Tribalpixel 18.04.2012 - 19:41
-1

Dans WP 3.5.2 Toute la page d'édition est encapsulée dans une balise de formulaire. Vous ne devez donc PAS ajouter vos propres balises de formulaire! Si vous le faites toujours et essayez d’ajouter une autre boîte à méta personnalisée, cela échouera lors de la sauvegarde et ne vous conduira qu’à wp-admin home lorsque vous essayez de sauvegarder !!

N'ajoutez pas non plus le champ NONCE, car il est supposé qu'il n'y en a qu'un par formulaire (cela pourrait également le faire échouer !!). Et la modification de la page a déjà un champ nonce!

Modifier:

La chose est 1) puisqu'il n'y a que une seule étiquette de formulaire pour tout l'écran d'édition, comme l'a reconnu l'auteur de la réponse correcte, et 2) il a automatiquement un nonce ajouté à cela. Pourquoi devriez-vous ajouter plus? Il aura toujours le secret , peu importe ce qu'il se passe ...

L'intention est, à mon avis, de modifier la page en fonction du contenu ou des métadonnées , par exemple. Un champ nonce ... De plus, lorsque j'ai essayé d'en ajouter d'autres, cela ne fonctionne même pas avec plusieurs méta-boîtes !! L’un fonctionnera et l’autre échouerait et redirigerait uniquement l’utilisateur vers la maison wp-admin!

    
réponse donnée OZZIE 08.08.2013 - 17:59

Lire d'autres questions sur les étiquettes