Ho bisogno di un campo nonce per ogni meta box che aggiungo al mio tipo di post personalizzato admin?


16

Attualmente sto lavorando alla pagina di amministrazione del mio tipo di post personalizzato e mi sono bloccato a decidere se aggiungere nuovamente un campo nonce per il secondo metabox o meno. Sono molto nuovo per i tipi di post personalizzati e la ricerca online su questo non dà davvero molti risultati.

qualche idea? Grazie.

Risposte:


13

Lo consiglierei così.

Hai (e dovresti) avere il tuo nonce con cui verificare l'origine dei dati e l'intento dell'utente. Se hai solo un nonce per un metabox, allora incappi in problemi se quel metabox viene rimosso (non uguale a nascosto). Se rimosso, il secondo metabox (o almeno dovrebbe) non verrà mai salvato poiché il nonce viene inviato più.

Ovviamente dal punto di vista della sicurezza, nulla è aggiunto da un secondo nonce, a meno che non si desideri mai aggiornare solo un metabox e non l'altro: i nonces dovrebbero essere unici per l'azione .


modificare

Come sottolineato, esiste solo un modulo per la schermata di modifica post. Quindi, in teoria, hai solo bisogno di un campo nonce con cui convalidare l'azione e l'origine dei dati. Tuttavia, poiché i metabox possono essere rimossi - avendo un campo nonce in un solo metabox non c'è garanzia che il nonce sarà lì. Inserendo un campo nonce in ciascun metabox è possibile verificare se i dati di quel metabox sono stati inviati (ed è effettivamente da dove si ritiene che sia) prima di elaborare qualsiasi dato. Per esempio:

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

}

Il nome del campo nonce dovrebbe essere univoco per il metabox (e non scontrarsi con altre nonce presenti nel modulo da altri plug-in).

Il valore nonce dovrebbe essere univoco per l'azione (e ciò dovrebbe includere in genere l'origine dei dati (ad es. Modifica-post anziché modifica rapida)). In genere includo anche l'ID post.


hmm. ma c'è solo un <form>tag nella pagina di amministrazione. il campo nonce deve essere univoco nel modulo o no? tia, @Stephen
Ana Ban

Sì, quindi il nome nonce dovrebbe essere univoco per il metabox in modo da poterlo controllare per ogni metabox. Il valore nonce dovrebbe essere univoco per l'azione eseguita e l'origine dei dati (ad es. Poiché "modifica rapida" e la schermata di modifica normale attivano entrambi l' save_postazione).
Stephen Harris,

risposta aggiornata per chiarire, si spera, quello che sto dicendo :)
Stephen Harris,

Il punto è 1) poiché esiste un solo tag Form per l'intera schermata di modifica e 2) ha automaticamente aggiunto un nonce . Perché dovresti aggiungere altro? Avrà sempre il nonce, non importa cosa ... L'ho sottolineato nella mia risposta e ottenere il downgrade, grazie alla gente ... L'intento è nella mia visione di modificare la pagina in base al contenuto o ai metadati, ad es. un campo nonce ... Anche quando ho provato ad aggiungere altro non funziona nemmeno con più meta-box !!
OZZIE,

1
Vedi la mia risposta save_postpuò essere chiamato da vari contesti, quindi un nonce non è garantito. È anche un modo conveniente per verificare che il callback debba effettivamente fare qualcosa. Quando si aggiungono più nonce, utilizzare nomi univoci. Funziona
Stephen Harris

5

È inoltre possibile agganciare la casella di invio che non scompare mai aggiungendo il campo nonce

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

Quindi, nell'azione save_post:

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

1

Il campo nonce viene utilizzato per convalidare che il contenuto del modulo proviene dalla posizione sul sito corrente e non da qualche altra parte.

codice: wp_nonce_field

solo un campo nonce per moduloè richiesto , utilizzare più di quello non senso per me.

forse puoi indagare e utilizzare check_admin_referer () per essere sicuro che la tua richiesta provenga da una pagina di amministrazione


-1

In WP 3.5.2 L'intera pagina di modifica è racchiusa in un tag di modulo, quindi NON devi aggiungere i tuoi tag di modulo !! Se continua a farlo e prova ad aggiungere un'altra meta box personalizzata separata, fallirà durante il salvataggio e ti condurrà a wp-admin a casa solo quando proverai a salvare !!

Inoltre NON aggiungere neanche il campo NONCE in quanto ce n'è solo uno per modulo (anche questo potrebbe non riuscire !!) E la modifica della pagina ha già un campo nonce!

Modificare:

Il fatto è 1) poiché esiste un solo tag Form per l'intera schermata di modifica, come ha ammesso l'autore della risposta corretta, e 2) ha automaticamente aggiunto un nonce . Perché dovresti aggiungere altro? Avrà sempre il nonce non importa cosa ...

L' intento è a mio avviso di modificare la pagina in base al contenuto o ai metadati, ad es. un campo nonce ... Anche quando ho provato ad aggiungere altro non funziona nemmeno con più meta-box !! Uno funzionerà e l'altro fallirà e reindirizzerà l'utente solo a wp-admin home!


Hai pubblicato la stessa risposta su due domande, è stato accidentale? Quale dei due intendevi rispondere?
Rarst

Mi dispiace accidentale, questo. Se usi il componente firebug o chrome view di una meta box aggiunta con un tag form in wp 3.6, viene automaticamente rimosso un wrapping in tutto il modulo per il post. Quindi come è sbagliato? Perché allora dovresti aggiungere diversi campi nonce?
OZZIE

provalo e vedrai
OZZIE il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.