2011-09-23 31 views
10

WordPress'teki özel meta kutuma bir onay kutusu eklemeye çalışıyorum ve bunu kaydetmek için bir sorunla karşılaştım - ne zaman onay kutusunu işaretlediğimi ve yazıyı/sayfayı güncellediğimde tekrar işaretlemeden tekrar geri gelecektir. olması gerektiği gibiWordPress'te bir onay kutusu meta kutusu nasıl kaydedilir?

add_meta_box(
    'sl-meta-box-sidebar',  // id 
    'Sidebar On/Off',   // title 
    'sl_meta_box_sidebar',  // callback function 
    'page',      // type of write screen 
    'side',      // context 
    'low'      // priority 
); 

function sl_meta_box_sidebar() { 
    global $meta; sl_post_meta($post->ID); ?> 
    <input type="checkbox" name="sl_meta[sidebar]" value="<?php echo htmlspecialchars ($meta['sidebar']); ?>" />Check to turn the sidebar <strong>off</strong> on this page. 
} 

Bu, "Sayfayı Düzenle" Ekranın kenar çubuğundaki onay kutusunu oluşturur, hiçbir sorun:

İşte kullanıyorum kodu. Ben onay kutusu değerinde ne girmeliyim emin değilim, metin alanları açıkça meta veri olarak kaydedildi ne varsa döndürür ... Ben sadece "kontrol" kullanarak denedim bunun yerine benim ilk tahmin olurdu (sadece kontrol edin Bu meta verileri kullanırken değer için), ancak onay kutusunu da kaydetmedi.

function sl_save_meta_box($post_id, $post) { 
    global $post, $type; 

    $post = get_post($post_id); 

    if(!isset($_POST[ "sl_meta" ])) 
     return; 

    if($post->post_type == 'revision') 
     return; 

    if(!current_user_can('edit_post', $post_id)) 
     return; 

    $meta = apply_filters('sl_post_meta', $_POST[ "sl_meta" ]); 

    foreach($meta as $key => $meta_box) { 
     $key = 'meta_' . $key; 
     $curdata = $meta_box; 
     $olddata = get_post_meta($post_id, $key, true); 

     if($olddata == "" && $curdata != "") 
      add_post_meta($post_id, $key, $curdata); 
     elseif($curdata != $olddata) 
      update_post_meta($post_id, $key, $curdata, $olddata); 
     elseif($curdata == "") 
      delete_post_meta($post_id, $key); 
    } 

    do_action('sl_saved_meta', $post); 
} 

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

Bu metin alanları için mükemmel çalışıyor, ancak onay kutusu sadece tasarruf olmaz:

İşte bu sorunun nedenlerini varsayalım ki tüm meta verileri kaydeder fonksiyondur. Kaydetme işlevinin yanlış mı, yoksa onay kutusunun değeriyle ilgili bir şey eksik mi emin değilim.

Herhangi bir yardım için teşekkür ederiz!

cevap

14

Daha önce bununla başa çıktım ve işte bu şekilde çözdüm.

İlk olarak, Onay Kutusunu oluşturma.

<?php 
function sl_meta_box_sidebar(){ 
    global $post; 
    $custom = get_post_custom($post->ID); 
    $sl_meta_box_sidebar = $custom["sl-meta-box-sidebar"][0]; 
?> 

<input type="checkbox" name="sl-meta-box-sidebar" <?php if($sl_meta_box_sidebar == true) { ?>checked="checked"<?php } ?> /> Check the Box. 
<?php } ?> 

Sonraki, tasarrufu.

<?php 
add_action('save_post', 'save_details'); 

function save_details($post_ID = 0) { 
    $post_ID = (int) $post_ID; 
    $post_type = get_post_type($post_ID); 
    $post_status = get_post_status($post_ID); 

    if ($post_type) { 
    update_post_meta($post_ID, "sl-meta-box-sidebar", $_POST["sl-meta-box-sidebar"]); 
    } 
    return $post_ID; 
} ?>