Изменить текст кнопки «Добавить в корзину» на основе родительских категорий товаров в Woocommerce - PullRequest
0 голосов
/ 02 июня 2018

У меня есть магазин Woocommerce с родительскими категориями и подкатегориями.

Например, родительская категория - мужская одежда, а две подкатегории - рубашки и штаны.

Я хочу изменить Добавить вТекст кнопки корзины на всех страницах товара для всех товаров в родительской категории Menswear.То есть все продукты в подкатегориях "Рубашки" и "Брюки".

В следующем коде это достигается, но должен быть лучший способ использования родительской категории в операторе if, а не в обоих подклассах.

К сожалению, я не знаю, как это сделать, может кто-нибудь помочь?

add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_cat_single_add_to_cart_button_text', 20, 1 );
function product_cat_single_add_to_cart_button_text( $text ) {

    if( has_term( array('shirts','pants'), 'product_cat') )
        $text = __( 'Buy Menswear', 'woocommerce' );

    return $text;
}

Просто чтобы уточнить:

То, на что я надеялся, было решением, которое используетРодительская категория (Мужская одежда) в массиве, а не подкатегории Рубашки и брюки.На моем сайте есть только четыре родительские категории, но у каждой из них есть десятки подкатегорий.Я искал решение, которое позволит избежать перечисления десятков подкадров в массиве, а просто использует четыре родительские категории.Можно ли изменить текст добавления в корзину на основе родительской категории?(то есть изменение произойдет со всеми продуктами в подкатегориях, принадлежащих этому родителю).

Дополнительные пояснения:

Допустим, у меня есть четыре родительские категории: красный, желтый, зеленый и синий.

Каждая из этих родительских категорий имеет несколько подкатегорий следующим образом:

RED
  Red subcat 1
  Red subcat 2

YELLOW
  Yellow subcat 1
  Yellow subcat 2

GREEN
  Green subcat 1
  Green subcat 2

BLUE
  Blue subcat 1
  Blue subcat 2

Я хочу, чтобы товары в красном подкатегории 1 и красном подкаталоге 2 имели текст добавления в корзину BUY RED.

Я хочу, чтобы товары в подкатегории Yellow 1 и Yellow подкатегории 2 добавили в корзину текст BUY YELLOW.

Я хочу, чтобы товары в подкатегории Green 1 и Green subcat 2 имели добавление ктекст корзины КУПИТЬ ЗЕЛЕНЫЙ.

Я хочу, чтобы товары в синем подкатегории 1 и Синем подкаталоге 2 добавили в корзину текст КУПИТЬ СИНИЙ.

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

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


ОБНОВЛЕНИЕ

Исходя из рабочего кода @LoicTheAztec (спасибо), это мой окончательный рабочий код:

// Utility function to get the childs array from all parent categories
function get_the_childs( $product_category ){
    $taxonomy = 'product_cat';
    $parent   = get_term_by( 'slug', sanitize_title( $product_category ), $taxonomy );
    return get_term_children( $parent->term_id, $taxonomy );
}

// Changing the add to cart button text for product based on parent category
add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_cat_single_add_to_cart_button_text', 20, 1 );
function product_cat_single_add_to_cart_button_text( $text ) {
    global $product;
    if( has_term( get_the_childs('reds'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Red', 'woocommerce' );
    elseif( has_term( get_the_childs('yellow'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Yellow', 'woocommerce' );
    elseif( has_term( get_the_childs('green'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Green', 'woocommerce' );
    elseif( has_term( get_the_childs('blue'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Blue', 'woocommerce' );

    return $text;
}

ДОПОЛНИТЕЛЬНОЕ ОБНОВЛЕНИЕ: ЭтоРешение имеет ошибку.Если одна из родительских категорий пуста, код не работает.

См. Здесь:

Ошибка при изменении текста кнопки «Добавить в корзину» на основе родительских категорий товаров в Woo

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Спасибо @LoicTheAztec за его ввод.

После редактирования его кода я немного придумал это.

Протестировано и работает.

// Utility function to get the childs array from all parent categories
function get_the_childs( $product_category ){
    $taxonomy = 'product_cat';
    $parent   = get_term_by( 'slug', sanitize_title( $product_category ), $taxonomy );
    return get_term_children( $parent->term_id, $taxonomy );
}

// Changing the add to cart button text for product based on parent category
add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_cat_single_add_to_cart_button_text', 20, 1 );
function product_cat_single_add_to_cart_button_text( $text ) {
    global $product;
    if( has_term( get_the_childs('reds'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Red', 'woocommerce' );
    elseif( has_term( get_the_childs('yellow'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Yellow', 'woocommerce' );
    elseif( has_term( get_the_childs('green'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Green', 'woocommerce' );
    elseif( has_term( get_the_childs('blue'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Blue', 'woocommerce' );

    return $text;
}
0 голосов
/ 02 июня 2018

Обновлено

Сначала вы найдете вспомогательную функцию для получения массива childs из родительской категории продукта.Тогда вы сможете использовать его в своей подключенной функции.

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

Код:

// Utility function to get the childs array from a parent product category
function get_the_childs( $product_category ){
    $taxonomy = 'product_cat';
    $parent   = get_term_by( 'slug', sanitize_title( $product_category ), $taxonomy );
    return get_term_children( $parent->term_id, $taxonomy );
}

// Changing the add to cart button text
add_filter( 'woocommerce_product_single_add_to_cart_text', 'product_cat_single_add_to_cart_button_text', 20, 1 );
function product_cat_single_add_to_cart_button_text( $text ) {
    global $product;
    if( has_term( get_the_childs('Menswear'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Menswear', 'woocommerce' );
    elseif( has_term( get_the_childs('Womenswear'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Womenswear', 'woocommerce' );
    elseif( has_term( get_the_childs('Childswear'), 'product_cat', $product->get_id() ) )
        $text = __( 'Buy Childswear', 'woocommerce' );

    return $text;
}

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

enter image description here

...