【问题标题】:Wordpress metabox drop down list isn't savingWordpress 元框下拉列表未保存
【发布时间】:2015-03-21 19:52:59
【问题描述】:

我有 2 个自定义帖子类型,名为 clientscasestudies。我正在尝试在 clients 帖子类型上构建一个元框,该框将有一个下拉列表,其中包含来自 casestudies 帖子类型的所有帖子的标题。这将最终显示一个页面,显示来自clients 帖子类型的特色图像,然后如果从下拉列表中进行选择,则超链接到相关的casestudies 帖子。

我已按照本教程将元框放在一起:http://code.tutsplus.com/tutorials/how-to-create-custom-wordpress-writemeta-boxes--wp-20336

这是我的 functions.php 文件中的元框代码:

add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add()
{
    add_meta_box( 'my-meta-box-id', 'My First Meta Box', 'cd_meta_box_cb', 'clients', 'side', 'default' );
}

function cd_meta_box_cb( $post )
{
$values = get_post_custom( $post->ID );
$selected = isset( $values['my_meta_box_select'] ) ? esc_attr( $values['my_meta_box_select'][0] ) : ”;
    ?>     
    <p>
        <label for="my_meta_box_select">Select which case study this logo will link to when it is clicked:<br /><br /></label>
        <select name="my_meta_box_select" id="my_meta_box_select" style="width:100%;">
            <option value="No case study">No case study</option>
                <?php
                $casestudies = array( 'post_type' => 'casestudies', 'orderby' => 'title', 'order' => 'asc', );
                $casestudiesloop = new WP_Query( $casestudies );
                while ( $casestudiesloop->have_posts() ) : $casestudiesloop->the_post();
                    ?> <option value="<?php the_title(); ?>" <?php selected( $selected, $casestudies['the_title'] ); ?> ><?php the_title(); ?></option>
            <?php
                endwhile;
                    ?>
        </select>
    </p>
    <?php    
}

add_action( 'save_post', 'cd_meta_box_save' );
function cd_meta_box_save( $post_id )
{
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;

    if( !current_user_can( 'edit_post', $post_id ) ) return;

    if( isset( $_POST['my_meta_box_select'] ) )
        update_post_meta( $post_id, 'my_meta_box_select', esc_attr( $_POST['my_meta_box_select'] ) );
}

元框在正确的帖子类型上正确显示,但是当我更新帖子时它不会保存数据。

谢谢。

【问题讨论】:

    标签: php wordpress save metadata


    【解决方案1】:

    您没有随机数隐藏字段。保存函数不会返回任何内容。

    <input type="hidden" name="meta_box_nonce" id="meta_box_nonce" value="<?php echo wp_create_nonce( 'my_meta_box_nonce' ); ?>" />
    

    更新:

    所以你的cd_meta_box_cb 函数是

    <?php
        function cd_meta_box_cb( $post )
        {
            $values = get_post_custom( $post->ID );
            $selected = isset( $values['my_meta_box_select'] ) ? esc_attr( $values['my_meta_box_select'][0] ) : ”;
            ?>
            <p>
                <label for="my_meta_box_select">Select which case study this logo will link to when it is clicked:<br /><br /></label>
                <select name="my_meta_box_select" id="my_meta_box_select" style="width:100%;">
                    <option value="No case study">No case study</option>
                        <?php
                        $casestudies = array( 'post_type' => 'casestudies', 'orderby' => 'title', 'order' => 'asc', );
                        $casestudiesloop = new WP_Query( $casestudies );
                        while ( $casestudiesloop->have_posts() ) : $casestudiesloop->the_post();
                            ?> <option value="<?php the_title(); ?>" <?php selected( $selected, $casestudies['the_title'] ); ?> ><?php the_title(); ?></option>
                    <?php
                        endwhile;
                            ?>
                </select>
            </p>
            <input type="hidden" name="meta_box_nonce" id="meta_box_nonce" value="<?php echo wp_create_nonce( 'my_meta_box_nonce' ); ?>" />
            <?php
        }
    ?>
    

    【讨论】:

    • 似乎没有帮助。我检查了wp_metadata,里面没有my_meta_box_select ID,所以它没有保存任何东西。
    • OK 所以它现在保存到wp_metadata 表中,但是从clients 帖子类型加载帖子时,下拉菜单不会选择当前值。有什么想法吗?我确实在让 &lt;?php selected( $selected, $casestudies['the_title'] ); ?&gt; &gt;&lt;?php the_title(); ?&gt; 正确显示时遇到了问题。
    • &lt;?php selected( $selected, $casestudies['the_title'] ); ?&gt;代替&lt;?php selected( $selected, get_the_title() ); ?&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2016-09-14
    • 2018-01-25
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多