Comment enregistrer une case à cocher meta box dans WordPress?

J'essaye d'ajouter une case à cocher dans mon custom meta box dans WordPress et j'ai rencontré un problème avec la sauvegarde elle - a chaque fois que j'ai cocher la case et de la mise à jour du post/page, il est à nouveau désactivée à nouveau.

Voici le code que j'utilise:

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

Cela crée une case à cocher dans le volet de la "Modifier la Page" de l'écran, comme il se doit, pas de problème. Je ne suis pas sûr que dois-je entrer dans la valeur de la case, avec des champs de texte il est évident qu'elle renvoie tout ce qui a été enregistré en tant que méta-informations... j'ai essayé tout à l'aide de "checked" au lieu de provoquer ce serait ma première estimation (puis il suffit de vérifier la valeur lors de l'utilisation de cette méta-données), mais il ne sauvera pas le case.

Voici la fonction qui enregistre toutes les méta-données, qui je suppose sont les causes de ce problème:

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

Il fonctionne parfaitement pour les champs de texte, mais la case à cocher ne pas enregistrer. Je ne suis pas sûr si la fonction d'économie est mauvaise, ou alors j'ai loupé quelque chose au sujet de la valeur de la case.

Toute aide appréciée!

OriginalL'auteur Justine | 2011-09-23