Отображение категорий пользовательского типа записи в продукте WooCommerce - PullRequest
0 голосов
/ 03 октября 2019

Я создал собственный тип записи с собственными категориями. Я хотел бы связать категории пользовательских типов сообщений с продуктом WooCommerce. Например, этот товар относится к категории Ткань чехла. Эти категории я отображал в продуктах Woocommerce в бэкэнде. Я делаю это с getterm. Пока все работает. Затем я создал поле флажка перед каждой категорией. Когда я сохраняю содержимое, все категории хранятся в массиве (независимо от того, выбрал я его или нет). Я хотел бы сохранить только выбранную категорию. Что я делаю не так?

Пример

как мне просто сохранить массив выбранного флажка в метабоксе (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 );
    }
...