Wordpress帖子布局元框不保存

时间:2014-09-04 08:18:06

标签: php wordpress save meta

我将元框添加到我的帖子页面,以便我可以选择每个帖子的布局。我创建了一个元框,它正在显示,但它不会保存。

if ( ! function_exists( 'post_layout_meta_box' ) ){
    function post_layout_meta_box( $post ){
        $custom = get_post_custom($post->ID);
        $page_layout = isset($custom["page_layout_left"][0]) ? $custom["page_layout_left"][0] : ( isset($custom["page_layout_right"][0]) ? $custom["page_layout_right"][0] : $custom["page_layout_none"][0] ); 
        ?>
        <p>  
            <select name="page_layout" id="page_layout">
                <option value="left_sidebar" <?php selected( $page_layout, 'left_sidebar' ); ?>>Left Sidebar</option>
                <option value="right_sidebar" <?php selected( $page_layout, 'right_sidebar' ); ?>>Right Sidebar</option>
                <option value="full_width" <?php selected( $page_layout, 'full_width' ); ?>>No Sidebar</option>
            </select>
        </p>
        <?php
    }
}


if ( ! function_exists( 'post_save_layout_meta_box' ) ){
    function post_save_layout_meta_box($post_id){  

        if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ){ 
            return $post_id;
        } else{
            if( isset( $_POST['page_layout'] ) ) {
                update_post_meta( $post_id, 'page_layout', wp_kses($_POST['page_layout'], '') ); 
            }
        } 
    }
}

add_action( 'save_post', 'post_save_layout_meta_box' );  

那我错过了什么?例如,当我选择右侧边栏时,它会在更新页面后将值返回到左侧边栏。

编辑:想出来:

问题在于:

$page_layout = isset($custom["page_layout_left"][0]) ? $custom["page_layout_left"][0] : ( isset($custom["page_layout_right"][0]) ? $custom["page_layout_right"][0] : $custom["page_layout_none"][0] ); 

应该是

$page_layout = isset($custom["page_layout"][0]) ? $custom["page_layout"][0] : 'left_sidebar';

1 个答案:

答案 0 :(得分:0)

我想这,在这些代码行中存在问题。 Wordpress与page_layout_left,page_layout_right混淆。

$page_layout = isset($custom["page_layout_left"][0]) ? $custom["page_layout_left"][0] : ( isset($custom["page_layout_right"][0]) ? $custom["page_layout_right"][0] : $custom["page_layout_none"][0] ); 

update_post_meta( $post_id, 'page_layout', wp_kses($_POST['page_layout'], '') );

我建议如果你想在update_post_meta()函数中使用page_layout_left,那么你应该首先找到用户选择的选项,即左边或右边或全宽。

之后在update_post_meta函数中,而不是使用page_layout自定义字段名称,请像这样使用page_layout_left或page_layout_right。

update_post_meta( $post_id, 'page_layout_left', wp_kses($_POST['page_layout'], '') ); 

希望它可以奏效。

快乐编码。

Atul Jindal