10
我試圖在WordPress的自定義元框中添加一個複選框,並且遇到了保存問題 - 每當我選中複選框並更新帖子/頁面時,它都會再次取消選中。如何在WordPress中保存複選框元框?
下面是我使用的代碼:
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.
}
這會在「編輯頁面」屏幕的側邊欄的複選框,因爲它應該,也沒有問題。我不確定我應該在複選框的值中輸入什麼內容,顯示的文本字段顯然會返回保存爲元信息的內容......我嘗試使用「checked」代替,因爲這將是我的第一個猜測(然後簡單地檢查爲使用此元數據時的值),但它也沒有保存複選框。
這裏有保存所有的元數據,其功能我認爲導致此問題:
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);
它完全適用於文本字段,但是複選框是不會保存。我不確定保存功能是否錯誤,或者我是否錯過了複選框的值。
任何幫助表示讚賞!