Problem in benutzerdefinierten Metaboxen

Ich versuche, eine benutzerdefinierte Metabox “Stellen Sie Ihre Stimmung”, die die Stimmung des Benutzers angezeigt wird, aber leider Meta-Box nicht Wert zu sparen. Bitte helfen Sie

Bildbeschreibung hier eingeben

Das ist mein Code

ID, 'mood_value_key', true ); // Creating our form echo '

'; echo '

'; echo ''; echo '

'; } // Checking value of the form and updating function save_nss_mood_data($post_id) { /* * We need to verify this came from our screen and with proper authorization, * because the save_post action can be triggered at other times. */ // Check if our nonce is set. if ( ! isset( $_POST['mood_meta_box_nonce'] ) ) { return; } // Verify that the nonce is valid. if ( ! wp_verify_nonce( $_POST['mood_meta_box_nonce'], 'mood_meta_box' ) ) { return; } // If this is an autosave, our form has not been submitted, so we don't want to do anything. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } // Check the user's permissions. if ( isset( $_POST['post_type'] ) ) { if ( ! current_user_can( 'edit_post', $post_id ) ) { return; } } /* OK, it's safe for us to save the data now. */ // Make sure that it is set. if ( ! isset( $_POST['mood_field'] ) ) { return; } // Sanitize user input. $mood_data = sanitize_text_field( $_POST['mood_value_key'] ); // Update the meta field in the database. update_post_meta( $post_id, 'mood_value_key', $mood_data ); } add_action('save_post','save_nss_mood_data'); ?>

Solutions Collecting From Web of "Problem in benutzerdefinierten Metaboxen"

Okay, ich habe das Problem, hier ist der vollständige Code, der Daten speichert. Die Probleme werden unten erklärt:

 /** * Adds a box to the main column on the Post and Page edit screens. */ function nss_mood_add_meta_box() { //$id, $title, $callback, $post_type, $context,$priority, $callback_args add_meta_box('nss_mood_id','Set your mood','nss_mood_cb','post'); } add_action('add_meta_boxes','nss_mood_add_meta_box'); // Dispalying form and taking input function nss_mood_cb() { global $post; echo ''; $mood_value = get_post_meta( $post->ID, 'mood_value_key', true ); // Creating our form echo '

'; echo ''; echo ''; echo '

'; } // Checking value of the form and updating function save_nss_mood_data($post_id) { /* * We need to verify this came from our screen and with proper authorization, * because the save_post action can be triggered at other times. */ // Check if our nonce is set. if ( empty( $_POST['mood_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['mood_meta_box_nonce'], basename(__FILE__)) ) return; // If this is an autosave, our form has not been submitted, so we don't want to do anything. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } // Check the user's permissions. if ( isset( $_POST['post_type'] ) ) { if ( ! current_user_can( 'edit_post', $post_id ) ) { return; } } /* OK, it's safe for us to save the data now. */ // Make sure that it is set. if ( ! isset( $_POST['mood_value_key'] ) ) { return; } // Sanitize user input. $mood_data = sanitize_text_field( $_POST['mood_value_key'] ); // Update the meta field in the database. update_post_meta( $post_id, 'mood_value_key', $mood_data ); } add_action('save_post','save_nss_mood_data');

Probleme, die zu Störungen geführt haben:

  • Ihre function nss_mood_cb() benötigt die $post->ID aber dort war kein $post . Sie müssen also die $post Variable erhalten, und ich habe es mit global $post .
  • Dein Nonce-Versand war nicht richtig. Sie erstellen nonce, senden aber nicht an die Speicherfunktion. Ich habe dort eine versteckte Eingabe hinzugefügt, die das Nonce an die Speicherfunktion sendet.
  • In save_nss_mood_data() ich das Nonce auf eine intelligentere Art überprüft.
  • und, wie ich bereits isset( $_POST['mood_field'] ) , war deine isset( $_POST['mood_field'] ) Sache nicht richtig, also habe ich sie in isset( $_POST['mood_value_key'] ) weil das tatsächlich von der Callback-function nss_mood_cb() .