Как сохранить мета-флажок в WordPress? - PullRequest
9 голосов
/ 23 сентября 2011

Я пытаюсь добавить флажок в свой пользовательский мета-блок в 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 Ответ

14 голосов
/ 23 сентября 2011

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

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

<?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;
} ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...