it-swarm.com.de

Metabox mit Kontrollkästchen wird nicht aktualisiert

Wenn ich versuche, eine meta_box mit einer einzigen Checkbox zu setzen, funktioniert alles, aber wenn ich sie deaktiviere und den Beitrag speichere, wird sie erneut als markiert markiert. Ich habe einen Blick darauf geworfen, kann aber meinen Fehler nicht finden.

Schauen Sie sich meinen Code an.

function am_checkbox_option() {
    global $post;
    $custom = get_post_custom($post->ID);
    $front_event = $custom["front_event"][0];
    wp_nonce_field(__FILE__, 'am_front_event');
    if ( $front_event ) {
        $checked = "checked=\"checked\"";
    } else {
        $checked = "";
    }
?>
    <label>Display Content? (type yes):</label>
    <input type="checkbox" name="front_event" value="true" <?php echo $checked; ?> />
<?php
        }
}

add_action('save_post', function() {
    if ( defined( 'DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;

    global $post;

    if ( $_POST && !wp_verify_nonce($_POST['am_front_event'], __FILE__) ) {
        return;
    }

    if ( isset($_POST['front_event']) ) {
        update_post_meta($post->ID, 'front_event', $_POST['front_event']);
    }

});

Danke im Voraus

10
andresmijares

Hier ist der Code, den ich zuvor verwendet habe - der Hauptunterschied besteht für mich darin, dass Sie prüfen, ob das Meta existiert, und nicht, ob es geprüft werden sollte.

// Checkbox Meta
add_action("admin_init", "checkbox_init");

function checkbox_init(){
  add_meta_box("checkbox", "Checkbox", "checkbox", "post", "normal", "high");
}

function checkbox(){
  global $post;
  $custom = get_post_custom($post->ID);
  $field_id = $custom["field_id"][0];
 ?>

  <label>Check for yes</label>
  <?php $field_id_value = get_post_meta($post->ID, 'field_id', true);
  if($field_id_value == "yes") $field_id_checked = 'checked="checked"'; ?>
    <input type="checkbox" name="field_id" value="yes" <?php echo $field_id_checked; ?> />
  <?php

}

// Save Meta Details
add_action('save_post', 'save_details');

function save_details(){
  global $post;

if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
    return $post->ID;
}

  update_post_meta($post->ID, "field_id", $_POST["field_id"]);
}
14
5t3ph

füge einfach eine else-Klausel hinzu, um das Post-Meta zu löschen, wenn es nicht markiert ist.

if ( isset($_POST['front_event']) ) {
    update_post_meta($post->ID, 'front_event', $_POST['front_event']);
}

zu

if ( isset($_POST['front_event']) ) {
    update_post_meta($post->ID, 'front_event', $_POST['front_event']);
}else{
    delete_post_meta($post->ID, 'front_event');
}
13
Bainternet