Удалите лишние атрибуты из продуктов Woocommerce, которые не используются в вариациях продуктов - PullRequest
0 голосов
/ 27 марта 2019

На самом деле, у меня есть веб-сайт Woocommerce, который насчитывает около 800 продуктов.И многие из продуктов являются переменными, и каждый продукт имеет некоторые атрибуты, которые используются в качестве вариации, но проблема в том, что многие продукты имеют присвоенные неиспользованные атрибуты, которые не используются в этом конкретном варианте продукта.

, поэтомуЯ хочу удалить неиспользуемые атрибуты из каждого продукта, которые не используются в варианте этого конкретного продукта.

Поиск запроса или некоторого фрагмента кода, который поможет мне, а не проверять каждый продукт.

пока, я понятия не имею, как это сделать.

Я просто хочу удалить неиспользуемые атрибуты, которые не используются в вариациях этого продукта.

1 Ответ

0 голосов
/ 08 апреля 2019

Попробуйте запустить этот скрипт: https://gist.github.com/yratof/f21242d4263c461f4a5b6b766cd24373

add_action( 'init', function() {
  ini_set( 'memory_limit', '2048M' );
  set_time_limit( 0 );
  $posts = get_posts( [
    'post_type' => 'product',
    'posts_per_page' => -1
  ] );
  $count = 0;
  foreach ( $posts as $post ) {
    $product = get_product( $post );
    if ( $product->product_type !== 'variable' ) {
      continue;
    }
    $count ++;
    $va = $product->get_variation_attributes();
    $vas = [];
    foreach ( $product->get_attributes() as $attribute ) {
      if ( isset( $attribute['is_taxonomy'] ) && $attribute['is_taxonomy'] ) {
        $terms = wp_get_post_terms( $product->id, $attribute['name'] ) ;
        // var_dump( $terms );
        foreach ( $terms as $term ) {
          if ( in_array( $term->slug, $va[ $attribute['name'] ] ) ) {
            // var_dump( $term );
            if ( ! isset( $vas[$attribute['name']] ) ) {
              $vas[$attribute['name']] = [];
            }
            $vas[$attribute['name']][] = $term->term_id;
          }
        }
      }
    }
    foreach ($vas as $tax => $vals) {
      wp_set_post_terms(  $product->id, $vals, $tax  );
    }
  }
  wp_die( 'All attributes have been filtered: Total products changed: '. $count );
} );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...