我目前有一个带元框的自定义帖子类型。在该元框中有几个复选框“tag1”和“tag2”。出于某种原因,我无法同时保存两个复选框。我可以保存其中一个,但不能同时保存。任何人都可以引导我朝着正确的方向前进吗?我想我必须在第8行和第8行中加入in_array()。 11但不是那么肯定。感谢任何帮助,谢谢!
我在做什么:
// set a variable so we can append it to each row
$i = 1;
foreach ( $repeatable_fields as $field ) { ?>
<label for="_tests[<?php echo $i;?>][test_tag][tag1]">
<input type="checkbox" id="_tests[<?php echo $i;?>][test_tag][tag1]" name="_tests[<?php echo $i;?>][test_tag]" value="tag1" <?php checked( $field['test_tag'], 'tag1' ); ?> />tag1
</label>
<label for="_tests[<?php echo $i;?>][test_tag][tag2]">
<input type="checkbox" id="_tests[<?php echo $i;?>][test_tag][tag2]" name="_tests[<?php echo $i;?>][test_tag]" value="tag2" <?php checked( $field['test_tag'], 'tag2' ); ?> />tag2
</label>
<?php $i++; } ?>
<?php
add_action('save_post', 'hhs_repeatable_meta_box_save', 10, 2);
function hhs_repeatable_meta_box_save($post_id) {
if ( ! isset( $_POST['hhs_repeatable_meta_box_nonce'] ) ||
!wp_verify_nonce( $_POST['hhs_repeatable_meta_box_nonce'], 'hhs_repeatable_meta_box_nonce' ) )
return;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
if (!current_user_can('edit_post', $post_id))
return;
$clean = array();
if ( isset ( $_POST['_tests'] ) && is_array( $_POST['_tests'] ) ) :
foreach ( $_POST['_tests'] as $i => $test ){
// skip the hidden "to copy" div
if( $i == '%s' ){
continue;
}
$test_tags = array ( 'tag1', 'tag2' );
$clean[] = array(
'test_tag' => isset( $test['test_tag'] ) && in_array( $test['test_tag'], $test_tags ) ? $test['test_tag'] : null,
);
}
endif;
// save test data
if ( ! empty( $clean ) ) {
update_post_meta( $post_id, 'repeatable_fields', $clean );
} else
delete_post_meta( $post_id, 'repeatable_fields' );
}
答案 0 :(得分:2)
您的复选框名称为_tests[<?php echo $i;?>][test_tag]
,您应该在其后添加[]
,并且您可以像数组一样接收值。