Создайте SKU вариантов продукта из SKU родительской переменной Woocommerce

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

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

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

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

Действительно благодарен за любую помощь.

1

Решение

Существует несколько способов создания комбинированных вариантов продукта 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 переменного продукта.

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

// Custom checkbox for auto genaration 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 genarate 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 lenght based on variations count
$prefix = sizeof($children_ids) < 100 ? sprintf('%02d', $count) : sprintf('%03d', $count);

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

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

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

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

введите описание изображения здесь

б) Обновление продукта Variable:

введите описание изображения здесь

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

введите описание изображения здесь

введите описание изображения здесь

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]