动态复制自定义帖子类型中的自定义Metabox

时间:2014-07-02 作者:davidcondrey

我正在Wordpress中构建一个自定义帖子类型,用于在客户博客上编写和显示BuzzFeed风格的测验。在自定义帖子类型中,有一个自定义元框,表示每个问题和选择,另一个表示潜在的最终结果。

因此,第一个元框由一个数字输入类型(用于分配ID)、一个文本字段(用于输入问题)和另一个字段(用于输入图像)组成。对作者来说,这是他们测验中的第一个问题。如果他们要输入多个问题,则需要选择按钮以添加另一组字段。

我不确定如何生成该字段并确保保存任何添加的字段。我不想求助于插件或插件库,因为学习如何做和解决它一样重要。

1 个回复
SO网友:TBI Infotech

请尝试此代码。此代码将动态创建元框

<?php
add_action( \'add_meta_boxes\', \'dynamic_add_custom_box\' );

/* Adds a box to the main column on the Post and Page edit screens */

    function dynamic_add_custom_box() {
add_meta_box(
    \'dynamic_sectionid\',
    __( \'Shortcode Information\', \'myplugin_textdomain\' ),
    \'dynamic_inner_custom_box\',
    \'post\');}
请在上述函数中的post位置添加自定义post的slug名称

/*打印方框内容*/

function dynamic_inner_custom_box() {
global $post;
wp_nonce_field( plugin_basename( __FILE__ ), \'dynamicMeta_noncename\' );

$shortcode = get_post_meta($post->ID,\'shortcode\',true);

$c = 0;
if ( count( $shortcode ) > 0 ) {
    if(is_array($shortcode)){
    foreach( $shortcode as $track ) {
        if ( isset( $track[\'toggle_title\'] ) || isset( $track[\'toggle_title_close\'] ) ) {
            printf( \'<div class="myshortcode_div" style="background-color: rgb(223, 223, 223); padding: 10px 20px;margin-bottom: 15px;">
                <h1>Shortcode</h1><br/>
                Title Open :<br/> <input type="text" name="shortcode[%1$s][toggle_title]" value="%2$s" /><br/>
                Title Close :<br/> <input type="text" name="shortcode[%1$s][toggle_title_close]" value="%3$s" /><br/>
                <span class="remove" id="remove_shortcode">%8$s</span></div>\', $c, $track[\'toggle_title\'], $track[\'toggle_title_close\'], $track[\'toggle_hide\'], $track[\'toggle_border\'], $track[\'include_excerpt_html\'], $track[\'shortcode_content\'], __( \'Remove Shortcode\' ));
            $c = $c +1;
        }
    }
   }
}        
   ?>
<span id="here"></span>
<span class="add" id="add_shortcode"><?php _e(\'Add Shortcode\'); ?></span>

<script>
    var $ =jQuery.noConflict();
$(document).ready(function() {
    var count = <?php echo $c; ?>;
    $(".add").click(function() {
        count = count + 1;
            $(\'#here\').append(\'<div class="myshortcode_div" style="background-color: rgb(223, 223, 223); padding: 10px 20px;margin-bottom: 15px;">\\n\\
                           <h1>Shortcode</h1><br/>\\n\\
                           <b>Title Open :</b><br/> <input type="text" name="shortcode[\'+count+\'][toggle_title]" value="" /><br/>\\n\\
                           <b>Title Close :</b><br/> <input type="text" name="shortcode[\'+count+\'][toggle_title_close]" value="" /><br/> \\n\\
                           <span class="remove" id="remove_shortcode">Remove Shortcode</span></div>\' );
        return false;
    });
    $(".remove").live(\'click\', function() {
        $(this).parent().remove();
    });
});
</script>
/*对输入的数据进行处理*/

add_action( \'save_post\', \'dynamic_save_postdata\' );
/*保存帖子时,保存我们的自定义数据*/

function dynamic_save_postdata( $post_id ) {
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) 
    return;
    if ( !isset( $_POST[\'dynamicMeta_noncename\'] ) )
    return;

if ( !wp_verify_nonce( $_POST[\'dynamicMeta_noncename\'], plugin_basename( __FILE__ ) ) )
    return;
    $shortcode = $_POST[\'shortcode\'];

    update_post_meta($post_id,\'shortcode\',$shortcode);
}
如果此代码段对您有效,请尝试它。

结束