Попытка изменить текст кнопки покупки, если имеет термин категория + является переменной WooCommerce - PullRequest
0 голосов
/ 02 февраля 2020

Все работает хорошо, если я удаляю && $product->is_type( 'variable' )

Однако, когда я добавляю эту строку, первое if, кажется, не работает. Что я делаю не так?

Ожидается: если товар находится в категории "farsk-ved" и является продуктом с изменяющимися параметрами, текст должен быть "Välj längd". Таким образом, все отдельные продукты должны go к разделу "else" ("Köp").

Что происходит: все продукты, кроме части "elseif", получают "köp".

    add_filter( 'woocommerce_product_add_to_cart_text', 'custom_loop_add_to_cart_button', 20, 2 ); 
function custom_loop_add_to_cart_button( $button_text ) {
    // BELOW set the product categoty slug and the product ID
$product = new WC_Product( get_the_ID() );

    if ( has_term( 'farsk-ved', 'product_cat') && $product->is_type( 'variable' )) {

        $button_text = __("Välj längd", "woocommerce");
    }
    elseif ( has_term( 'torr-ved', 'product_cat') ) {

        $button_text = __("Välj mängd", "woocommerce");
    }
    else {
        $button_text = __("Köp", "woocommerce");
    }
    return $button_text;
}

Ответы [ 3 ]

1 голос
/ 02 февраля 2020

Реальный путь: WC_Product Объект напрямую включен для woocommerce_product_add_to_cart_text хука фильтра в качестве 2-го аргумента отсутствует из вашего код функции) :

add_filter( 'woocommerce_product_add_to_cart_text', 'custom_loop_add_to_cart_button', 20, 2 ); 
function custom_loop_add_to_cart_button( $button_text, $product ) { // <== the missing argument 
    // BELOW set the product category Id, slug or name
    if ( has_term( 'farsk-ved', 'product_cat') && $product->is_type( 'variable' ) ) {
        $button_text = __("Välj längd", "woocommerce");
    }
    elseif ( has_term( 'torr-ved', 'product_cat') ) {
        $button_text = __("Välj mängd", "woocommerce");
    }
    else {
        $button_text = __("Köp", "woocommerce");
    }
    return $button_text;
}

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

0 голосов
/ 02 февраля 2020

Таким образом, решение было заменить $product = new WC_Product( get_the_ID() ); на global $product;

0 голосов
/ 02 февраля 2020

Если вы используете $product = new WC_Product( get_the_ID() ); и $product->is_type( 'variable' ), он вернет bool (false)

Если вы используете $product = new WC_Product( get_the_ID() ); и $product->get_type(), он вернет simple для всех продуктов, включая тип переменной.

Так что вам просто нужно использовать вот так:

$product = new WC_Product_Variable($product_id);
if ( has_term( 'farsk-ved', 'product_cat') && $product->get_type()=='variable') {

Я думаю, что это поможет.

...