用于保存多个值的自定义字段

时间:2013-08-18 作者:Maxim Popov

我正在添加自定义元框,通过jquery,我可以在其中创建几个自定义字段,其中包含一个键“test”。可以有一个或多个自定义字段,但关键是“test”。我还可以删除不再需要的键值。问题是我不能用同一个键保存自定义字段的多个值。所有字段中仅保存最后一个值。请帮我做个决定!

<?php add_action( \'add_meta_boxes\', \'add_test_meta_box\' );  
    function add_test_meta_box()  
    {  
        add_meta_box( \'test_meta_box\', \'TEST PARAM\', \'add_test_meta\', \'post\', \'normal\', \'high\' );      
    }  

    function add_test_meta( $post )  
    {  
        // Grab our data to fill out the meta boxes (if it\'s there)  
        $test = get_post_meta( $post->ID, \'test\', true ); 

        // Add a nonce field 
        wp_nonce_field( \'save_test_meta\', \'test_meta\' ); 
        ?> 

        <div id="myfor">
            <p> 
                <label>Param 1 key "test" </label><br >
                <input type="text" name="test" value="<?php echo esc_attr( $test ); ?>"  size="60" /><span>Delete</span>
            </p> 
        </div>

        <input type="button" value="Добавить" id="addnew">

        <?php 
    } 

    add_action( \'save_post\', \'test_meta_save\' ); 
    function test_meta_save( $id ) 
    { 
        // No auto saves 
        if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;  

        // Check our nonce 
        if( !isset( $_POST[\'test_meta\'] ) || !wp_verify_nonce( $_POST[\'test_meta\'], \'save_test_meta\' ) ) return; 

        // make sure the current user can edit the post 
        if( !current_user_can( \'edit_post\' ) ) return; 

        // strip all html tags and esc attributes here 
        if( isset( $_POST[\'test\'] ) ) 
            update_post_meta( $id, \'test\', esc_attr( strip_tags( $_POST[\'test\'] ) ) );   
    }  

    add_action(\'admin_head\', \'my_add_input\');


    function my_add_input() { ?>
      <script>
      // add live metod 
      jQuery.fn.live = function (types, data, fn) {
        jQuery(this.context).on(types,this.selector,data,fn);
        return this;
    };

    // add new input
      (function($){ 
          $(function(){ 

            var num = 2;


            $(\'#addnew\').click(function(){
                $(\'#myfor\').append(\'<p><label>Param  \'+ num +\' key "test" </label><br ><input type="text" name="test" value=""  size="60" /> <span>Delete</span></p>\');
                num ++;
            });

            $(\'span\').live( \'click\' , function(){       
                $(this).parent(\'p\').remove();
            });     

        });  
    })(jQuery)  
      </script>

    <?php } ?> 

1 个回复
最合适的回答,由SO网友:Ari 整理而成

首先,在表单字段名称的末尾添加此代码[]。因此,您的字段名称将为;测试[]”;。

示例:

<input type="text" name="test[]" value=""  size="60" />
使用这种方式保存值:

$old = get_post_meta($post_id, \'your_meta_key\', true);
$newtest = array();
$test = $_POST[\'test\'];
$count = count( $test );

for ( $i = 0; $i < $count; $i++ ) {
    if ( $test[$i] != \'\' ) {
        $newtest[$i][\'test\'] = stripslashes( strip_tags( $test[$i] ) );
    }
}

if ( !empty( $newtest ) && $newtest != $old ) {
    update_post_meta( $post_id, \'repeatable_fields\', $newtest );
} elseif ( empty($newtest) && $old ) {
    delete_post_meta( $post_id, \'repeatable_fields\', $old );
}
用保存的值显示字段:

$show_the_value = get_post_meta($post->ID, \'your_meta_key\', true);
if ($show_the_value) {
    foreach ($show_the_value as $value) { ?>
        <input type="text" name="test[]" value="<?php if($value[\'test\'] != \'\') echo  $value[\'test\']; ?>"  size="60" />
    <?php }
}

结束

相关推荐

将Metabox添加到所有自定义帖子类型

好的,我已经浏览了这里的论坛,但还没有找到我想要的。我想看看是否有可能在不需要设置数组的情况下向所有自定义帖子类型添加元盒?或者,可能只是使用自定义帖子类型UI插件创建的CPT?这是我正在测试的代码,但它只出现在常规帖子中。 add_meta_box( \'my-meta-box-id2\', \'Enter your PDF location for your post category below:\', \'cd2_meta_box_cb\', \'post\', \'normal\', \'