Я пытаюсь добавить флажок в свой пользовательский мета-блок в 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.
}
Это создает флажок на боковой панели экрана «Редактировать страницу», как и должно быть, проблем нет. Я не уверен, что я должен ввести в значение флажка, с текстовыми полями он, очевидно, возвращает все, что было сохранено в качестве мета-информации ... Я попытался просто использовать «проверено» вместо этого, потому что это будет мое первое предположение (затем просто проверьте для значения при использовании этих метаданных), но флажок также не сохранен.
Вот функция, которая сохраняет все метаданные, что, как я полагаю, вызывает эту проблему:
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 );
Отлично работает с текстовыми полями, но флажок просто не сохраняется. Я не уверен, что функция сохранения неверна, или я что-то упустил из значения флажка.
Любая помощь приветствуется!