Как сохранить мета-поле флажка в 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.
}

Это создает флажок на боковой панели экрана "Редактировать страницу", как и должно быть, проблем нет. Я не уверен, что мне следует вводить в значение флажка, с текстовыми полями он явно возвращает все, что было сохранено в качестве метаинформации... Я попробовал просто использовать "проверено" вместо этого, потому что это будет моя первая догадка (тогда просто проверьте для значения при использовании этих метаданных), но он также не сохранил этот флажок.

Здесь функция, которая сохраняет все метаданные, которые, как я предполагаю, вызывает эту проблему:

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 );

Он отлично работает для текстовых полей, но флажок просто не будет сохранен. Я не уверен, что функция сохранения ошибочна, или я что-то упустил из-за значения флажка.

Любая помощь оценивается!

Ответ 1

У меня были проблемы с этим ранее, и вот как я его решил.

Сначала создайте флажок.

<?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 } ?>

Затем сохраним.

<?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;
} ?>