it-swarm.com.de

Benötige ich für jedes Meta-Feld, das ich meinem benutzerdefinierten Beitragstyp admin hinzufüge, ein Nonce-Feld?

Ich arbeite gerade an der Administrationsseite meines benutzerdefinierten Post-Typs und habe mich nicht mehr entschieden, ob ich ein Nonce-Feld für die zweite Metabox erneut hinzufügen soll oder nicht. Ich kenne mich mit benutzerdefinierten Beitragstypen noch nicht aus und die Online-Suche liefert nicht wirklich so viele Ergebnisse.

Irgendwelche Gedanken? Vielen Dank.

15
Ana Ban

Ich würde es empfehlen.

Sie haben (und sollten) eine eigene Instanz, mit der Sie die Herkunft der Daten und die Absicht des Benutzers überprüfen können. Wenn Sie nur eine einzige Nonce für eine Metabox haben, treten Probleme auf, wenn diese Metabox entfernt wird (nicht dasselbe wie versteckt). Wenn entfernt, wird (oder sollte) die zweite Metabox niemals speichern, da die Nonce länger gesendet wird.

Aus Sicherheitsgründen wird durch eine zweite Nonce natürlich nichts hinzugefügt - es sei denn, Sie möchten jemals nur eine Metabox und nicht die andere aktualisieren: Nonces sollten für die Aktion eindeutig sein .


Bearbeiten

Wie bereits erwähnt, gibt es nur ein Formular für den Post-Edit-Bildschirm. Theoretisch benötigen Sie also nur ein Nonce-Feld, mit dem Sie die Aktion und den Ursprung der Daten validieren können. Da Metaboxen jedoch entfernt werden können - wenn in nur einer Metabox ein Nonce-Feld vorhanden ist, kann nicht garantiert werden, dass die Nonce vorhanden ist. Durch Platzieren eines Nonce-Felds in jeder Metabox können Sie überprüfen, ob Daten von dieser Metabox gesendet wurden (und woher sie stammen), bevor Sie Daten verarbeiten. Z.B:

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

}

Der Name des Nonce-Felds sollte für die Metabox eindeutig sein (und nicht mit anderen Nonces in Konflikt stehen, die auf dem Formular von anderen Plug-Ins vorhanden sind).

Das nonce value sollte für die Aktion eindeutig sein (und dies sollte im Allgemeinen den Ursprung der Daten enthalten (z. B. edit-post im Gegensatz zu quick-edit)). Ich gebe im Allgemeinen auch die Post-ID an.

12
Stephen Harris

Sie können auch die Submit-Box einbinden, die niemals verschwindet, indem Sie das Nonce-Feld hinzufügen

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

Dann gehen Sie in Ihrer Aktion save_post wie folgt vor:

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

Das Feld nonce wird verwendet, um zu überprüfen, ob der Inhalt des Formulars von der Position auf der aktuellen Site stammt und nicht von einer anderen Stelle.

codex: wp_nonce_field

es ist nur ein Nonce-Feld pro Formular erforderlich. Verwenden Sie mehr als eines, da dies für mich nicht sinnvoll ist.

vielleicht können Sie nachforschen und check_admin_referer () verwenden, um sicherzugehen, dass Ihre Anfrage von einer Admin-Seite stammt

1
Tribalpixel