Próbuję dodać pole wyboru do mojego niestandardowego pola meta w WordPress i natknąłem się na problem z jego zapisaniem - za każdym razem, gdy zaznaczam pole wyboru i aktualizuję wpis/stronę, to ponownie się odznacza.Jak zapisać pole wyboru meta box w WordPress?
Oto kod używam:
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.
}
Stwarza to pole na bocznym pasku ekranu „Edytuj stronę”, tak jak powinien, nie ma problemu. Nie jestem pewien, co powinienem wpisać w wartość pola wyboru, z polami tekstowymi oczywiście zwraca to, co zostało zapisane jako meta informacje ... Próbowałem po prostu używając "sprawdzone", bo to byłby mój pierwszy domysł (potem po prostu sprawdź dla wartości podczas korzystania z tych metadanych), ale nie zapisał również pola wyboru.
Oto funkcja, która zapisuje wszystkie meta dane, które zakładam, że przyczyny tego problemu:
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);
To działa doskonale dla pól tekstowych, ale pole wyboru po prostu nie uratuje. Nie jestem pewien, czy funkcja zapisu jest nieprawidłowa, czy też brakuje mi czegoś o wartości pola wyboru.
Każda pomoc doceniona!