Woocommerce установлен для всех продуктов SKU = Название + Вариация? - PullRequest
0 голосов
/ 01 марта 2020

Как мне написать Заголовок + Вариация в продуктах _SKU (только для простого продукта Заголовок)? Это необходимо для обновления существующих товаров в магазине (более 8000) через WP All Import и добавления новых. Сейчас обновляет только простые продукты .. Я пытаюсь это, но все еще не работает ...

function wpse_177056_init_shortcode() {
$args = array(
    'post_type' => 'product'
);
$products = new WP_Query( $args );
if ( $products->have_posts() ):
    while ( $products->have_posts() ):
        $products->the_post();
        update_post_meta( $post->ID, '_sku', 'test' );
    endwhile; 
endif;
}
add_action( 'init', 'wpse_177056_init_shortcode' );

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Вы можете использовать функцию set_sku для обновления SKU

foreach( $products as $product){

    // Set Product name as SKU
    $variable = esc_html( strtolower ( $product->name ) );
    $product->set_sku( $variable );

}
0 голосов
/ 02 марта 2020

Установите больше времени, если у вас много товаров ...

add_filter( 'init', 'sku_from_title_and_variation', 10, 1);
function sku_from_title_and_variation(){
    set_time_limit(300);
$query = array(
    'numberposts' => -1,
    'post_status' => 'published',
    );
    $products = wc_get_products( $query );

    foreach ($products as $product) {

      if( $product->is_type('variable') ){

        $product_id = $product->get_id();

        $product_title = $product->get_title();

        update_post_meta( $product_id, '_sku', $product_title );

        wc_delete_product_transients( $product_id );

        foreach( $product->get_available_variations() as $variation_values ){

          $variation_id = $variation_values['variation_id']; // variation id
          $variation_attr = $variation_values['attributes'];
          $variation_attr = $variation_attr['attribute_pa_variant'];
          $variation_attr = get_term_by('slug', $variation_attr , 'pa_variant')->name;

          update_post_meta( $variation_id, '_sku', $product_title.$variation_attr );

          wc_delete_product_transients( $variation_id );
        }
        wc_delete_product_transients( $product->get_id() );

      } else {

          update_post_meta( $product->get_id(), '_sku', $product->get_title());

          wc_delete_product_transients( $product->get_id() );
      }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...