चेकबॉक्स के साथ मेटाबोक्स अपडेट नहीं हो रहा है


10

मैं एक एकल चेकबॉक्स के साथ एक मेटा_बॉक्स सेट करने की कोशिश कर रहा हूं, सब कुछ ठीक हो जाता है, हालांकि अगर मैं इसे अनचेक करता हूं और पोस्ट को बचाता हूं, तो यह फिर से चेक के रूप में चिह्नित होता है, मैं देख रहा हूं, लेकिन मुझे अपनी गलती नहीं मिल रही है।

एक बार मेरा कोड देख लें।

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

});

अग्रिम में धन्यवाद

जवाबों:


14

यहां वह कोड है जिसका मैंने पहले उपयोग किया है - मुख्य अंतर मुझे दिखता है कि आप जाँच रहे हैं कि क्या मेटा इसके बजाय मौजूद है, यह निर्धारित करने के लिए कि क्या मूल्य है, यह जाँच की जानी चाहिए।

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

कोडेक्स पेज add_meta_boxesपर उदाहरण के अनुसार, मेटाबोक्स को जोड़ने के लिए कार्रवाई का उपयोग करें (यह विशेष रूप से वहां के लिए है) add_metabox। आपको कॉलबैक में पोस्ट प्रकार और पोस्ट ऑब्जेक्ट पास करने में भी लाभ होगा।
t31os

13

चेक पोस्ट मेटा को हटाने के लिए एक और क्लॉज जोड़ें और यदि आपका कोड ठीक नहीं है, तो बदलाव करें:

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

सेवा

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

2
यदि चेकबॉक्स अनियंत्रित है, तो यह $ _POST सरणी में नहीं होगा, यह केवल चेक किए जाने पर भेजा जाता है, इसलिए अन्य स्टेटमेंट काम करता है।
टॉम जम्मू नॉवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.