显示WooCommerce产品中自定义帖子类型的类别

时间:2019-10-03 07:45:39

标签: php wordpress woocommerce variable-assignment custom-post-type

我创建了一个具有自己类别的自定义帖子类型。我想将自定义帖子类型的类别链接到WooCommerce产品。例如该产品属于织物盖类别。我在后端的Woocommerce产品中显示了这些类别。我用getterm做到这一点。到目前为止,一切正常。然后,我在每个类别的前面创建了一个复选框字段。当我保存内容时,所有类别都存储在数组中(无论是否选择)。我只想保存我选择的类别。我在做什么错了?

Example

如何将所选复选框的数组保存在metabox(pro_in_cat_fields)中。目前,所有值均已保存。如果仅选中一个复选框(例如,fabric cover1),则仅需要保存该复选框的同一数组中的值。不是布料1,布料2,...等的值

    <?php
add_action('admin_init', 'add_pro_in_cat_boxes', 1);
function add_pro_in_cat_boxes() {
  add_meta_box( 'pro_in_cat-fields', 'Save product in custom category', 'pro_in_cat_meta_box_display', 'product', 'normal', 'low');
 }
    function pro_in_cat_meta_box_display() {
      global $post;
      $pro_in_cat_fields = get_post_meta($post->ID, 'pro_in_cat_fields', true);
      wp_nonce_field( 'pro_in_cat_meta_box_nonce', 'pro_in_cat_meta_box_nonce' );
    ?>
    <script type="text/javascript">
    jQuery(document).ready(function($) {
      $('.pro_in_cat_submit').click(function(e) {
        e.preventDefault();
        $('#publish').click();
      }); 
    });
      </script>
      <table id="pro_in_cat-fieldset-one" width="100%">
      <thead>
        <tr> 
          <th width="30%"></th>
          <th width="70%"></th>
        </tr>
      </thead>
      <tbody>
    <?php
    $stoffcat_parent= get_terms( 'cover_cat', array( 'hide_empty' => false, 'parent' => 0 ) );
      if ( $stoffcat_parent ) :
     foreach( $stoffcat_parent as $parent_term ) {
      echo $parent_term->name . '<br>';
    $stoffcat_value = get_terms( 'cover_cat', array( 'hide_empty' => false, 'parent' => $parent_term->term_id ) );
      foreach( $stoffcat_value as $child_term ) {
    ?>
      <tr>
        <td>
          <input type="checkbox" class="widefat" name="pro_in_cat_status[]" value="<?php echo $checked; ?>"  />
          <input type="text" class="widefat" name="pro_in_cat_name[]" value="<?php if($child_term->name != '') echo esc_attr( $child_term->name ); ?>"  /></td>
        <td><input type="text" class="widefat" name="pro_in_cat_termid[]" value="<?php if($child_term->term_id != '') echo esc_attr( $child_term->term_id ); ?>" />
          <input type="text" class="widefat" name="pro_in_cat_slug[]" value="<?php if($child_term->slug != '') echo esc_attr( $child_term->slug); ?>" /></td>
      </tr>
      <?php

         } 
      } 
      else :
        // show a blank one
    ?>
      <tr>
        <td><input type="checkbox" class="widefat" name="pro_in_cat_status[]" />
          <input type="text" class="widefat" name="pro_in_cat_name[]" /></td>
        <td><input type="text" class="widefat" name="pro_in_cat_termid[]" /><input type="text" class="widefat" name="pro_in_cat_slug[]" /></td>
      </tr>
      <?php endif; ?>
      </tbody>
      </table>
      <p>
      <input type="submit" class="pro_in_cat_submit" value="Save" />
      </p> 
    <?php
    }
    add_action('save_post', 'pro_in_cat_meta_box_save');
    function pro_in_cat_meta_box_save($post_id) {
      if ( ! isset( $_POST['pro_in_cat_meta_box_nonce'] ) ||
        ! wp_verify_nonce( $_POST['pro_in_cat_meta_box_nonce'], 'pro_in_cat_meta_box_nonce' ) )
        return;
      if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
        return;
      if (!current_user_can('edit_post', $post_id))
        return;
      $pro_in_catold = get_post_meta($post_id, 'pro_in_cat_fields', true);
      $pro_in_catnew = array();
      $pro_in_catstatus = $_POST['pro_in_cat_status'];
      $pro_in_catnames = $_POST['pro_in_cat_name'];
      $pro_in_cattermid = $_POST['pro_in_cat_termid'];
       $pro_in_catslug = $_POST['pro_in_cat_slug'];
      $count = count( $pro_in_catnames );
      for ( $i = 0; $i < $count; $i++ ) {
        if ( $pro_in_catstatus[$i] != '' ) {
          $pro_in_catnew[$i]['pro_in_cat_status'] = stripslashes( strip_tags( $pro_in_catstatus[$i] ) );
          }
        if ( $pro_in_catnames[$i] != '' ) {
          $pro_in_catnew[$i]['pro_in_cat_name'] = stripslashes( strip_tags( $pro_in_catnames[$i] ) );}
        if ( $pro_in_cattermid[$i] != '' ) {
          $pro_in_catnew[$i]['pro_in_cat_termid'] = stripslashes( strip_tags( $pro_in_cattermid[$i] ) );}
        if ( $pro_in_catslug[$i] != '' ) {
          $pro_in_catnew[$i]['pro_in_cat_slug'] = stripslashes( strip_tags( $pro_in_catslug[$i] ) );}
    }
      if ( !empty( $pro_in_catnew ) && $pro_in_catnew != $pro_in_catold )
        update_post_meta( $post_id, 'pro_in_cat_fields', $pro_in_catnew );
      elseif ( empty($pro_in_catnew) && $pro_in_catold )
        delete_post_meta( $post_id, 'pro_in_cat_fields', $pro_in_catold );
    }

0 个答案:

没有答案