在wordpress帖子中“在运行中”创建元字段

时间:2013-06-17 18:13:26

标签: php wordpress custom-post-type

根据在另一个元框或分类字段中选择/输入的内容,是否有任何方法可以动态显示已注册的元框?

即。我的自定义帖子需要有可变数量的“部分”(文本字段)。我无法预先确定会有多少人;只有在数据输入期间才能知道该数量。然后,这些字段也会动态添加到显示的帖子模板中。

2 个答案:

答案 0 :(得分:0)

我不知道您是否要求使用特定代码来执行上述操作,但如果更多是一般性问题,我会推荐Types plugin

它具有大量功能,但它允许您选择显示哪些自定义字段的帖子类型,它们显示在哪些页面模板上,以及对于您的问题,它们还具有基于其他字段值的条件显示。如果没有一个稍微具体的问题,我不确定这可能有多大用处,我很抱歉这不是代码答案,但希望它有所帮助。

答案 1 :(得分:0)

注册我的自定义帖子也称为帖子和带有回调“display_post_meta_box”的元数据后,这有效:

function display_post_meta_box( $post ) {

        // Retrieve current details of the post based on post ID    
    $section_number = get_post_meta( $post->ID, 'section_number', true ) ;  
    /*Configuration for post section WYSIWYG editors*/
                $i = 1;
                while ($i <= $section_number) {
    $section_editor_settings[$i] = array(  'textarea_rows' => '5','media_buttons' => false, 'textarea_name'=>__( 'post_section'.$i ), 'teeny'=>'true' );
    $i++; }



        // Retrieve current details of the post based on post ID
    $section =  get_post_meta( $post->ID, 'section', true );
    $section_number = get_post_meta( $post->ID, 'section_number', true ) ;          

    ?>
        <style>.cell{display: table-cell; vertical-align: middle;}
    .row{width: 100%;display: table;border-bottom: 1px solid #DFDFDF;padding: 2px;}
    </style>



        <div class="row">
                                    <div class="cell" style="width: 15%"><b>Number of sections</b></div>
                                    <div class="cell" style="width: 10%"><input type="number" name="post_section_number"  value="<?php echo $section_number; ?>" /></input></div>
                                    <div class="cell" style="width: 5%">        <script>
        jQuery('.metabox_submit').click(function(e) {
            e.preventDefault();
            jQuery('#publish').click();
        });
        </script>
        <input type="submit" class="metabox_submit button button-primary" value="Submit" /></div>
                                    <div class="cell" style="width: 70  %"> &nbsp;</div>
                                  </div>


    <?php 
                $i = 1;
                while ($i <= $section_number) {?>
                        <div class="row">
                                    <div class="cell" style="width: 30%"><b>Section <?php echo '#'.$i;?> </b></div>
                                    <div class="cell" style="width: 50%"><?php  wp_editor( $section[$i], 'sectionid'.$i, $section_editor_settings[$i]  ); ?> </div>
                                    <div class="cell" style="width: 5%"></div>
                                    <div class="cell" style="width: 15%"><p class="howto">Enter body for this section here, and apply neccessary formatting</p></div>
                                  </div>
    <?php $i++; }

}

/ 保存帖子 /

  add_action( 'save_post', 'add_post_fields', 10, 2 );  

function add_post_fields( $post_id, $post ) {
    // Check post type for movie reviews
    $section_values[] = array();

    if ( $post->post_type == 'post' ) {
        $i = 1;
                while ($i <= 4) {

                    $section_values[$i] = $_POST['post_section'.$i];

                    $i++; }
        // Store data in post meta table if present in post data
        if ( isset( $section_values ) && $section_values != '' ) {
            update_post_meta( $post_id, 'section', $section_values );
        }

            if ( isset( $_POST['post_section_number'] ) && $_POST['post_section_number'] != '' ) {
            update_post_meta( $post_id, 'section_number', $_POST['post_section_number'] );
        }

    }
}