我正在添加自定义元框,通过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 } ?>
最合适的回答,由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 }
}