Formulare und WordPress Nonce

WordPress Nonce macht mich verrückt! Ich hatte dieses Problem, als ich mein Plugin startete und es entfernte, aber jetzt bin ich wieder dazu gekommen und weiß immer noch nicht, was ich machen soll.

Ich habe überall nach einer Lösung gesucht. Mein Code ist gleich / ähnlich zu anderen Beispielen. Ich erhalte einen “undefined Index ‘mrlpt_client_check'” Fehler.

Ich bekomme auch den gleichen Fehler für ‘mrlpt_client’, wenn ich auf der Basis von Benutzerfunktionen nach Berechtigungen suche, aber das ist der benutzerdefinierte Post-Typ, den ich erstellt habe, also bin ich mir nicht sicher, warum das auch nicht funktioniert?

Hier ist der Code, wo das Nonce-Zeug ist. Das Include enthält nur ein Kurzformular mit zwei Eingabefeldern, eines für eine E-Mail-Adresse und eines für eine Telefonnummer, in einer benutzerdefinierten Metabox.

Ich habe versucht, die wp_nonce_field () in mit dem HTML-Formular include, aber das funktioniert auch nicht, der gleiche Fehler.

Kann jemand helfen? Vielen Dank!!

function mrlpt_client_details( $client_post ) { // Retrieve saved metadata if it exists $mrlpt_clientEmail = get_post_meta( $client_post->ID, '_mrlpt_client_email', true ); $mrlpt_clientPhoneNum = get_post_meta( $client_post->ID, '_mrlpt_client_phone_num', true ); // Create a nonce field for verification wp_nonce_field( 'mrlpt_submit_client', 'mrlpt_client_check' ); // Includes the form elements inside the meta box require_once( 'includes/mrlpt-client-form.php' ); } // Update/Save client meta data add_action( 'save_post', 'save_client_metadata' ); function save_client_metadata( $client_post_id ) { // Verify if this is an auto save routine. // If it is our form has not been submitted, so we dont want to do anything if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } // Verify this came from the our screen and with proper authorization, because save_post can be triggered at other times if ( !isset( $_POST['mrlpt_client_check'] ) && !wp_verify_nonce( $_POST['mrlpt_client_check'], 'mrlpt_submit_client' ) ) { return; } // Check permissions - If the post type is mrlpt_client if ( 'post' == $_POST['mrlpt_client'] ) { // If the user cannot publish posts if ( !current_user_can_for_blog( $blog_id, 'publish-post' ) ) { // Checks by capability, not role wp_die( 'Insufficient privileges: Sorry, you do not have access to this page.' ); } } // OK, we're authenticated: we need to find and save the data // Verify the meta data is set if ( isset( $_POST['mrlpt_client_email'] ) && isset( $_POST['mrlpt_client_phone_num'] ) ) { // Save meta data update_post_meta( $client_post_id, '_mrlpt_client_email', strip_tags( $_POST['mrlpt_client_email'] ) ); update_post_meta( $client_post_id, '_mrlpt_client_phone_num', strip_tags( $_POST['mrlpt_client_phone_num'] ) ); } } 

Solutions Collecting From Web of "Formulare und WordPress Nonce"

Die Logik hier ist falsch:

 // Verify this came from the our screen and with proper authorization, because save_post can be triggered at other times if ( !isset( $_POST['mrlpt_client_check'] ) && !wp_verify_nonce( $_POST['mrlpt_client_check'], 'mrlpt_submit_client' ) ) { return; } 

Dies wird gelesen, wenn die $_POST['mrlpt_client_check'] nicht festgelegt ist und ungültig ist – zurückgeben. Sie möchten, dass es gelesen wird, wenn $_POST['mrlpt_client_check'] nicht festgelegt ist oder ungültig ist – return.

Wenn also $_POST['mrlpt_client_check'] nicht gesetzt ist, prüft es

  wp_verify_nonce( $_POST['mrlpt_client_check'], 'mrlpt_submit_client' ) 

was einen Fehler verursacht, weil das erste Argument auf einen Schlüssel verweist, der nicht existiert. Ihre Verwendung der Nonce ist korrekt:

 wp_nonce_field( 'mrlpt_submit_client', 'mrlpt_client_check' ); 

Wenn die Metabox also nicht gespeichert wird, möchten Sie vielleicht überprüfen, was gepostet wird

 function save_client_metadata( $client_post_id ) { // Verify if this is an auto save routine. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; wp_die(var_dump($_POST)); } 

Ich bin mir nicht sicher, was Ihre mrlpt_client_check nonce dazu bringen würde, nicht gepostet zu werden, aber Sie möchten vielleicht includes/mrlpt-client-form.php was includes/mrlpt-client-form.php in Ihrer Frage enthält.


Bearbeiten

So überprüfen Sie Berechtigungen:

 function save_client_metadata( $post_id ) { // Verify if this is an auto save routine. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; //Check that this post is of type 'post' if( 'post' != get_post_type( $post->ID ) ) return; //Check permissions if ( !current_user_can_for_blog( $blog_id, 'publish-post' ) ) wp_die( 'Insufficient privileges: Sorry, you do not have access to this page.' ) //Check nonce named mrlpt_client_check if ( !isset( $_POST['mrlpt_client_check'] ) || !wp_verify_nonce( $_POST['mrlpt_client_check'], 'mrlpt_submit_client' ) ) return //Validate data as necessary }