Отобразить серую кнопку «Продано», если все варианты отсутствуют в Woocommerce. - PullRequest
0 голосов
/ 21 мая 2018

Я ищу решение своей проблемы ...

У меня есть продукты в Woocommerce, с вариациями.Если ВСЕ варианты отсутствуют на складе, я хочу изменить текст кнопки «Добавить в корзину» на «Продано» и также отредактировать CSS кнопки (изменить ее цвет) ДО того, как вариант будет выбран в раскрывающемся списке ...

Итак, вот сценарий:

Я перехожу на одну страницу с переменным продуктом.Продукт имеет 4 варианта:

В настоящее время: кнопка «добавить в корзину» отображается (выделена серым цветом) и может быть нажата до выбора варианта.Появляется предупреждение, предлагающее пользователю выбрать вариант.Когда я выбираю вариант из выпадающего списка, кнопка становится серой, если в этом варианте нет в наличии.Если все 4 варианта отсутствуют, при начальной загрузке страницы все еще отображается кнопка «Добавить в корзину», выделенная серым цветом, и по щелчку указывается, что нужно выбрать вариант.

ЧТО ХОЧУ: если по крайней мере есть еще один вариантна складе стандартная функциональность Woocommerce остается неизменной («Добавить в корзину», при нажатии на которую выдается предупреждение о необходимости выбора варианта).Если на складе НЕТ вариантов, кнопка «Добавить в корзину» сразу же сообщает «распродано» и отображается серым цветом.(Прежде чем выбрать вариант).

Проблема, которую я обнаружил, заключается в том, что весь существующий код для изменения текста кнопки добавления в корзину выполняется при выборе варианта из раскрывающегося списка.Мне как-то нужно проверить, есть ли ЛЮБОЙ из вариантов на складе (до того, как они будут выбраны), а затем либо изменить текст кнопки на «продано», если ВСЕ варианты отсутствуют, либо оставить его при первой загрузке, и изменитьтекст только тогда, когда выбран вариант отсутствия на складе.

Надеюсь, это понятно.Спасибо!

===

По запросу я попробовал следующий код:

add_filter( 'woocommerce_product_add_to_cart_text', 
'customizing_add_to_cart_button_text', 10, 2 );
add_filter( 'woocommerce_product_single_add_to_cart_text', 
'customizing_add_to_cart_button_text', 10, 2 );
function customizing_add_to_cart_button_text( $button_text, $product ) {

    $sold_out = __( "Sold Out", "woocommerce" );

    $availability = $product->get_availability();
    $stock_status = $availability['class'];

    // Only for variable products on single product pages
    if ( $product->is_type('variable') && is_product() )
    {
    ?>
    <script>
    jQuery(document).ready(function($) {
        $('select').blur( function(){
            if( '' != $('input.variation_id').val() && $('p.stock').hasClass('out-of-stock') )
                $('button.single_add_to_cart_button').html('<?php echo $sold_out; ?>');
            else 
                $('button.single_add_to_cart_button').html('<?php echo $button_text; ?>');

            console.log($('input.variation_id').val());
        });
    });
    </script>
    <?php
    }
    // For all other cases (not a variable product on single product pages)
    elseif ( ! $product->is_type('variable') && ! is_product() ) 
    {
        if($stock_status == 'out-of-stock')
            $button_text = $sold_out.' ('.$stock_status.')';
        else
            $button_text.=' ('.$stock_status.')';
    }
    return $button_text;
}

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

1 Ответ

0 голосов
/ 21 мая 2018

В следующем коде будет отображаться неактивная кнопка «Распродано», выделенная серым цветом для переменных продуктов, когда все варианты отсутствуют на складе:

// Single variable produccts pages - Sold out functionality
add_action( 'woocommerce_single_product_summary', 'replace_single_add_to_cart_button', 1 );
function replace_single_add_to_cart_button() {
    global $product;

    // For variable product types
    if( $product->is_type( 'variable' ) ) {
        $is_soldout = true;
        foreach( $product->get_available_variations() as $variation ){
            if( $variation['is_in_stock'] )
                $is_soldout = false;
        }
        if( $is_soldout ){
            remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
            add_action( 'woocommerce_single_variation', 'sold_out_button', 20 );
        }
    }
}

// The sold_out button replacement
function sold_out_button() {
    global $post, $product;

    ?>
    <div class="woocommerce-variation-add-to-cart variations_button">
        <?php
            do_action( 'woocommerce_before_add_to_cart_quantity' );

            woocommerce_quantity_input( array(
                'min_value'   => apply_filters( 'woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ),
                'max_value'   => apply_filters( 'woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ),
                'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( $_POST['quantity'] ) : $product->get_min_purchase_quantity(),
            ) );

            do_action( 'woocommerce_after_add_to_cart_quantity' );
        ?>
        <a class="single_sold_out_button button alt disabled wc-variation-is-unavailable"><?php _e( "Sold Out", "woocommerce" ); ?></a>
    </div>
    <?php
}

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

enter image description here

...