Jqueryを使って、カスタムメタボックスを追加しています。その中に、キー「test」を持ついくつかのカスタムフィールドを作成できます。カスタムフィールドは1つまたは複数存在できますが、キーは「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 } ?>
まず、フォームのフィールド名の最後にこのコード[]を追加します。だからあなたのフィールドの名前は "test []"になります。
例:
<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 }
}