Артикул Woocommerce Variant

В настоящее время в Woocommerce при работе с переменными продуктами необходимо полностью определить артикул для каждого варианта.

Что я хотел бы сделать, так это определить родительский SKU, а затем определить суффикс SKU для каждого варианта, а окончательный SKU будет получен путем объединения родительского номера и суффикса варианта.

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

БАЗА

Затем для вариантов, скажем VARIANT_A, я хотел бы определить здесь суффиксы:

ВАРИАНТ

Теперь окончательный артикул для варианта продукта (то есть то, что передается в процессе обработки заказа), я хотел бы представить как:

PRODUCT_0001/VARIANT_A

Таким образом, это предотвращает двойную обработку одного и того же базового кода продукта при настройке / определении множества вариантов.

Есть ли простой способ добиться этого?


person Nicholas Hamilton    schedule 17.03.2016    source источник


Ответы (1)


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

add_filter( 'woocommerce_get_sku', 'reigel_woocommerce_get_sku', 10, 2 );
function reigel_woocommerce_get_sku( $sku, $product ){
    // remove current filter to prevent unli loop on get_sku()
    remove_filter( current_filter(), __FUNCTION__ ); 
    if ( $product->get_type() === 'variation' ) {
        $parent = $product->parent->id?$product->parent->id:$product->get_parent();
        $sku = wc_get_product($parent)->get_sku() . '/' . $sku;
    }
    add_filter( 'woocommerce_get_sku', 'reigel_woocommerce_get_sku', 10, 2 );
    return $sku;
}

отключить уникальность SKU при вариации ...

add_filter( 'wc_product_has_unique_sku', 'reigel_wc_product_has_unique_sku', 10, 3 );
function reigel_wc_product_has_unique_sku( $sku_found, $product_id, $sku ) {
    $product = wc_get_product($product_id);
    if ( $product->get_type() === 'variation' ) {
        $sku_found = false;
    }
    return $sku_found;
}
person Reigel    schedule 17.03.2016
comment
Извините, заговорил слишком рано, получаю сообщение об ошибке Артикул варианта продукта должен быть уникальным. В приведенном выше случае уникальность достигается, когда вариантный SKU объединяется с базовым SKU, - person Nicholas Hamilton; 18.03.2016
comment
это только для его отображения ... проверка уникальности - это другая история, и в вашем случае она может быть невозможной, если вы не введете также артикул родителя ... - person Reigel; 18.03.2016
comment
Что ж, проверка уникальности проводится каждый раз, когда создается новый вариант продукта, поэтому приведенное выше бесполезно, если только проверка уникальности не может быть подавлена ​​или изменена для проверки уникальности значения, сгенерированного: wc_get_product($parent)->get_sku() . '/' . $sku; - person Nicholas Hamilton; 18.03.2016
comment
вы можете отключить эту функцию на уровне вариаций ... Я обновил код ... но здесь применена очень простая логика ... вы можете расширить ее ... например, проверьте его братьев и сестер, если найден артикул ... - person Reigel; 18.03.2016