Переименовать кнопку «Выбрать параметры» в архиве продуктов для распроданных продуктов

#php #woocommerce #e-commerce

#php #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') amp;amp; is_product() )
    {
    ?>
    <script>
    jQuery(document).ready(function($) {
        $('select').blur( function(){
            if( '' != $('input.variation_id').val() amp;amp; $('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') amp;amp; ! is_product() ) 
    {
        if($stock_status == 'out-of-stock')
            $button_text = $sold_out.' ('.$stock_status.')';
        else
            $button_text.=' ('.$stock_status.')';
    }
    return $button_text;
}
  

Ответ №1:

Следующий фрагмент может указать вам правильный путь.

Если продукт является переменным продуктом, проверьте состояние запасов всех вариантов и преобразуйте значение в массив. Если все варианты переменного продукта отсутствуют на складе, текст можно изменить на Распроданный. Также вы можете изменить текст в зависимости от наличия вариаций в переменном продукте.

 if ( $product->is_type('variable') )
    {
        foreach ($product->get_available_variations() as $key => $value){
            $stock[] = isset( $value['is_in_stock'] ) ? $value['is_in_stock'] : true;
        }
        
        if( empty( array_filter( $stock ) ) ){
            $button_text = __( "Sold Out", "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 ) {

   $stock = array();

    // Only for variable products on single product pages
    if ( $product->is_type('variable') )
    {
        foreach ($product->get_available_variations() as $key => $value){
            $stock[] = isset( $value['is_in_stock'] ) ? $value['is_in_stock'] : true;
        }
        
        if( empty( array_filter( $stock ) ) ){
            $button_text = __( "Sold Out", "woocommerce" );
        }
    }
    // For all other cases (not a variable product on single product pages)
    elseif ( ! $product->is_type('variable') amp;amp; !$product->is_in_stock() ) 
    {
        $button_text = __( "Sold Out", "woocommerce" );
    }
    return $button_text;
}