Создайте SKU вариантов продукта из SKU родительской переменной Woocommerce - PullRequest
0 голосов
/ 21 декабря 2018

В Woocommerce я хотел бы генерировать SKU вариантов продукта из SKU родительской переменной продукта, например:

  • Переменная SKU продукта: 1200
  • 1-й SKU варианта продукта:1200-01
  • 2-й вариант продукта SKU: 1200-02
  • 3-й вариант продукта SKU: 1200-03
  • … и т. Д. *

Поэтому мне нужен SKU в порядке (и показан на странице продукта при выборе варианта), например: 1200-01

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

Очень благодарен за любую помощь.

1 Ответ

0 голосов
/ 22 декабря 2018

Вы можете использовать несколько способов создания комбинированного SKU для вариантов продукта из родительской переменной продукта.Вот два из них:

1-й способ:

Следующий код просто сгенерирует для внешнего интерфейса («просмотр») комбинированный код, когда продукт используетМетод WC_Product get_sku() (но не генерирует и не сохраняет объединенные SKU вариаций из продукта переменной, как другим способом) :

add_filter( 'woocommerce_product_variation_get_sku', 'custom_variation_sku', 10, 3 );
function custom_variation_sku( $sku, $product ) {

    if( $main_sku = get_post_meta( $product->get_parent_id(), '_sku', true ) ){
        $sku = $main_sku . '-' . sprintf( '%02d', ( get_post($product->get_id())->menu_order ) );
    }

    return $sku;
}

Код помещается в файл function.php вашегоАктивная детская тема (или активная тема).Протестировано и работает.


2-й способ:

Следующее автоматически сгенерирует SKU вариантов продукта из SKU переменного продукта.

Первая функция добавит флажокдля переменных параметров продукта во вкладке «Дополнительно» . Только когда вы установите этот флажок , 2-я функция будет генерировать все SKU вариантов продукта из SKU переменной продукта.

// Custom checkbox for auto generation of the variations SKUs
add_action('woocommerce_product_options_advanced', 'additional_product_options_advanced_custom_checkbox');
function additional_product_options_advanced_custom_checkbox()
{
    global $post;

    echo '<div class="options_group show_if_variable hidden">';

    // Custom checkbox located on Advanced tab settings
    woocommerce_wp_checkbox( array(
        'id'          => 'generate_variations_skus',
        'label'       => __('Generate variations SKUs', 'woocommerce'),
        'description' => __('Auto Generation of the variations SKUs from variable sku', 'woocommerce'),
        'desc_tip'    => 'true'
    ));

    echo '</div>';
}

// Auto generate the variations SKUs
add_action( 'woocommerce_admin_process_product_object', 'wc_auto_generate_variations_skus', 10, 1 );
function wc_auto_generate_variations_skus( $product ) {

    if( $product->is_type('variable') && isset($_POST['generate_variations_skus']) ) {
        $parent_sku   = $product->get_sku();
        $children_ids = $product->get_children();
        $count        = 0;

        // Loop through the variations Ids
        foreach( $children_ids as $child_id ){
            $count++;

            // Get an instance of the WC_Product_Variation object
            $variation = wc_get_product($child_id);

            // Set the prefix length based on variations count
            $prefix = sizeof($children_ids) < 100 ? sprintf('%02d', $count) : sprintf('%03d', $count);

            // Generate and set the sku
            $variation->set_sku( $parent_sku . '-' . $prefix );

            // Save variation
            $variation->save();
        }
    }
}

Код сохраняется в файле function.php вашего активного ребенкатема (или активная тема).Протестировано и работает.

a) На вкладке «Переменные» в настройках вкладки «Дополнительно»: установите флажок

enter image description here

b) Обновить переменнуюproduct:

enter image description here

c) Теперь сгенерированы номера SKU для всех вариантов (с сохранением заказа) :

enter image description here

enter image description here

...