如何在WordPress自定义帖子类型中保存多个复选框

时间:2016-01-11 23:41:31

标签: php wordpress checkbox custom-post-type meta-boxes

我目前有一个带元框的自定义帖子类型。在该元框中有几个复选框“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' );
  }

1 个答案:

答案 0 :(得分:2)

您的复选框名称为_tests[<?php echo $i;?>][test_tag],您应该在其后添加[],并且您可以像数组一样接收值。