Onay kutusuyla meta kutu güncellenmiyor


10

Tek bir onay kutusuyla bir meta_box ayarlamaya çalışıyorum, her şey yolunda gidiyor, ancak işaretini kaldırır ve gönderiyi kaydedersem, tekrar işaretli olarak işaretler, bir göz atıyorum ama hatamı bulamıyorum.

Bir göz atın benim kod.

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']);
    }

});

Şimdiden teşekkürler

Yanıtlar:


14

İşte daha önce kullandığım kod - ana fark bana değer kontrol edilmeli olup olmadığını belirlemek için değeri yerine meta var olup olmadığını kontrol ediyor görünüyor.

// 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"]);
}

Kodeks sayfasındaki add_meta_boxesörneğe göre meta kutuları eklemek için eylemi kullanın (bunun için özel olarak oradadır) add_metabox. Ayrıca, gönderi türünü ve gönderi nesnesinin geri aramaya iletilmesinden de yararlanabilirsiniz.
t31os

13

işaretli değilse meta metaları silmek için başka bir yan tümce ekleyin ve kodunuz iyi sonuç verir, bu yüzden değiştirin:

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

için

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

2
onay kutusunun işareti kaldırılırsa, $ _POST dizisinde olmaz, yalnızca işaretlendiğinde gönderilir, dolayısıyla else deyimi neden çalışır.
Tom J Nowell
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.