Woocommerce为所有产品设置了SKU =标题+版本?

时间:2020-03-01 14:59:44

标签: wordpress woocommerce hook-woocommerce

如何在商品_SKU中写标题+变体(仅对于简单商品标题)?这是通过WP All Import更新商店中现有产品(超过8000种)并添加新产品所必需的。现在仅更新简单的产品。 我正在尝试,但仍然无法正常工作...

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 :(得分:0)

如果您有很多产品,请设置更多时间限制...

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() );
      }
    }

}

答案 1 :(得分:0)

您可以使用set_sku函数更新SKU的

foreach( $products as $product){

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

}