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

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

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

9
задан Justine 23 September 2011 в 08:42
поделиться