Warum speichert meine Metabox nicht?

Ich weiß, dass es viele Fragen zu Varianten davon gibt, aber ich konnte keine Antwort finden.

Ich habe eine Metabox auf der Post-Typ- page , die nur eine Checkbox enthält. Es scheint, als würde es nicht sparen, egal was ich tue. Hier ist der gesamte Code für die Metabox.

 /*--------------------------------------------------------------------------* * Register metabox /*--------------------------------------------------------------------------*/ function kasparabi_page_left_menu() { add_meta_box( 'kasparabi-left-menu-meta', __( 'Left Menu', 'kasparabi' ), 'kasparabi_render_left_menu_meta_box', 'page', 'side' ); } add_action( 'add_meta_boxes', 'kasparabi_page_left_menu' ); /*--------------------------------------------------------------------------* * Callbacks /*--------------------------------------------------------------------------*/ function kasparabi_render_left_menu_meta_box($post) { wp_nonce_field( basename( __FILE__ ), 'kasparabi-left-menu-meta_nonce' ); ?> 

post_type ); /* Check if the current user has permission to edit the post. */ if ( !current_user_can( $post_type->cap->edit_post, $post_id ) ) return $post_id; /* Get the posted data and sanitize it for use as an HTML class. */ $new_meta_value = ( isset( $_POST['left-menu-checkbox'] ) ? sanitize_html_class( $_POST['left-menu-checkbox'] ) : '' ); $meta_key = 'left_menu_checkbox'; $meta_value = get_post_meta( $post->ID, $meta_key, true); /* If a new meta value was added and there was no previous value, add it. */ if ( $new_meta_value && '' == $meta_value ) add_post_meta( $post_id, $meta_key, $new_meta_value, true); /* If the new meta value does not match the old value, update it. */ elseif ( $new_meta_value && $new_meta_value != $meta_value ) update_post_meta( $post_id, $meta_key, $new_meta_value ); /* If there is no new meta value but an old value exists, delete it. */ elseif ( '' == $new_meta_value && $meta_value ) delete_post_meta( $post_id, $meta_key, $meta_value ); } add_action( 'save_post', 'kasparibi_left_menu_meta_save' );

Solutions Collecting From Web of "Warum speichert meine Metabox nicht?"

Ich bemerke ein paar Dinge.

Zuerst verwendet Ihr Callback zwei Parameter, aber Sie fragen nicht nach dem zweiten Parameter, wenn Sie ihn einhängen.

 add_action( 'save_post', 'kasparibi_left_menu_meta_save' ); 

Sollte sein:

 add_action( 'save_post', 'kasparibi_left_menu_meta_save' ,1 ,2 ); 

Auf der anderen Seite sehe ich nicht, wo Sie diesen Parameter überhaupt verwenden. Vielleicht habe ich es verpasst. Sie könnten diesen zweiten Parameter wahrscheinlich aus dem callback herauslassen.

Das eigentliche Problem ist jedoch hier:

 < ?php (get_post_meta( $post->ID, 'left_menu_checkbox', true) == 'on') ? ' checked="checked"' : ''; ?> 

Sie geben das checked Attribut nicht zurück.

 < ?php echo (get_post_meta( $post->ID, 'left_menu_checkbox', true) == 'on') ? ' checked="checked"' : ''; ?> 

Mit anderen Worten, der Wert wird gespeichert, aber der Code zeigt den aktivierten Status nicht korrekt an.

Sie könnten diese Zeile jedoch mit der checked function von WordPress vereinfachen.

 < ?php checked(get_post_meta( $post->ID, 'left_menu_checkbox', true),'on',true) ?>