с участием

ужно скрыть кнопку «Добавить в корзину» для товаров определенной товарной категории.

Хотелось бы, чтобы количество выглядело все еще видимым, потому что я использую плагин Yith запроса котировок, который использует количества для системы котировок.

Цель: скрыть кнопку «Добавить в корзину» для определенной категории товаров, сохраняя поля количеств.

Я ищу короткую строку кода для размещения в моемfunctions.php файл.

Ответы на вопрос(2)

Решение Вопроса

Обновлено: (Добавлена ​​совместимость для плагина WooCommerce Product Add-ons в простых продуктах).

Вот путь(для определенных категорий продуктов для простых и переменных типов продуктов) чтобы:

По выбору, На страницах архивов: замените кнопки добавления в корзину связанной кнопкой с продуктом.На отдельных страницах товара: Удалить кнопку «Добавить в корзину»(ведение полей количеств)

Код:

// function add back quantities without button (variable product)
function add_back_quantities_variable_products(){
    global $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' );
    ?>
        <input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" />
        <input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" />
        <input type="hidden" name="variation_id" class="variation_id" value="0" />
    </div>
    <?php
}


// function add back quantities without button (simple product)
function add_back_quantities_simple_products(){
    global $product;

    if ( ! $product->is_purchasable() ) return;

    echo wc_get_stock_html( $product );

    if ( $product->is_in_stock() ) : ?>

        <?php do_action( 'woocommerce_before_add_to_cart_form' ); ?>

        <form class="cart" method="post" enctype='multipart/form-data'>
            <?php
                // For WooCommerce Product add-ons (Update)
                do_action( 'woocommerce_before_add_to_cart_button' ); 

                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' );
            ?>
        </form>

    <?php
        do_action( 'woocommerce_after_add_to_cart_form' );
    endif;
}


// Replacing add to cart button and quantities by your custom button in Single product pages
add_action( 'woocommerce_single_product_summary', 'conditionally_replacing_template_single_add_to_cart', 1, 0 );
function conditionally_replacing_template_single_add_to_cart() {
    global $product, $post;

    // Set HERE your product categories in the array
    $categories = array( 't-shirts', 'gloves' );

    if( has_term( $categories, 'product_cat' ) ){

        // For variable product types
        if( $product->is_type( 'variable' ) ){
            // Removing add to cart button and quantities
            remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );

            // Add back quantities without button
            add_action( 'woocommerce_single_variation', 'add_back_quantities_variable_products', 20 );
        }
        // For simple product types
        else if( $product->is_type( 'simple' ) )
        {
            // Removing add to cart button and quantities
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );

            // Add back quantities without button
            add_action( 'woocommerce_single_product_summary', 'add_back_quantities_simple_products', 30 );
        }
    }
}

И опционально (для страниц архивов):

// Replacing the button add to cart by a link to the product in Shop and archives pages
// For variable and simple products
add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart_button', 10, 2 );
function replace_loop_add_to_cart_button( $button, $product  ) {
    // Set HERE your product categories in the array
    $categories = array( 't-shirts', 'gloves' );

    // Only for simple products
    if( ! $product->is_type( 'variable' ) ) return;

    if( has_term( $categories, 'product_cat', $product->get_id() ) ){
        $button_text = __( "View product", "woocommerce" );
        $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>';
    }
    return $button;
}

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

Этот код протестирован под WooCommerce 3+ и работает.

 Luke Baumann06 дек. 2017 г., 19:09
Привет, LoicTheAztec. Ваш код работал без нареканий. У меня есть еще один вопрос, который, я считаю, поможет не только мне, но и другим с той же проблемой. Я пытаюсь использовать «дополнения к продукту», но эта строка кода также приводит к исчезновению дополнений к продукту. Я изучал код и не могу понять, почему это приведет к удалению надстроек. Должна быть некоторая связь между кнопкой «добавить в корзину» и надстройками продукта. Любая дальнейшая помощь будет признательна, если вы чувствуете себя таким склонным. Спасибо
 Luke Baumann08 дек. 2017 г., 17:08
Brilliant !! работал отлично!
 Luke Baumann04 дек. 2017 г., 18:21
Спасибо за ответ и информацию. Это сработало для меня, и я просто удалил последнюю строку, потому что у меня уже нет этих кнопок, видимых на страницах магазина / архива. Я обязательно опубликую то, что я уже пробовал, с кодом в моем вопросе, чтобы люди не думали, что я просто прошу бесплатный код. благодарю вас!
 Luke Baumann03 дек. 2017 г., 18:29
Спасибо за ответ. Мне не нужна ссылка на кнопку продукта, потому что у меня нет кнопок добавления в корзину, видимых на страницах архива. Клиенты могут видеть только добавить в корзину на отдельных страницах продукта. Можете ли вы упростить код, чтобы не включать его? Спасибо!
 LoicTheAztec08 дек. 2017 г., 02:55
@LukeBaumann Я ответил на ваш новый вопрос и обновил здесь код, чтобы быть совместимым с плагином WooCommerce Product Add-ons.

Просто замени$categories с участием$tags а такжеproduct_cat с участиемproduct_tag

Ваш ответ на вопрос