WooCommerce: удалите кнопки добавления в корзину в архивах, но не в корзине - PullRequest
1 голос
/ 14 июля 2020

Я хочу удалить кнопку «Добавить в корзину» на каждой странице, кроме самой корзины.

Я нашел решение удалить кнопку корзины с помощью крючка:

remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );

Работает нормально, но при этом кнопка удаляется везде.

Я пробовал этот код, чтобы удалить кнопку везде, кроме тележки:

if (!is_cart()) :
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
endif;

Но, похоже, это не работает.

Есть ли другой способ не трогать файл шаблона?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Следующее поможет вам (на основе woocommerce_template_loop_add_to_cart() исходного кода функции):

add_action('init', 'remove_add_to_cart_function_callback' );
function remove_add_to_cart_function_callback() {
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
    add_action( 'woocommerce_after_shop_loop_item', 'custom_template_loop_add_to_cart', 10 );
}

if ( ! function_exists( 'woocommerce_template_loop_add_to_cart' ) ) {

    function custom_template_loop_add_to_cart( $args = array() ) {
        global $product;

        if ( $product && is_cart() ) {
            $defaults = array(
                'quantity'   => 1,
                'class'      => implode(
                    ' ',
                    array_filter(
                        array(
                            'button',
                            'product_type_' . $product->get_type(),
                            $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
                            $product->supports( 'ajax_add_to_cart' ) && $product->is_purchasable() && $product->is_in_stock() ? 'ajax_add_to_cart' : '',
                        )
                    )
                ),
                'attributes' => array(
                    'data-product_id'  => $product->get_id(),
                    'data-product_sku' => $product->get_sku(),
                    'aria-label'       => $product->add_to_cart_description(),
                    'rel'              => 'nofollow',
                ),
            );

            $args = apply_filters( 'woocommerce_loop_add_to_cart_args', wp_parse_args( $args, $defaults ), $product );

            if ( isset( $args['attributes']['aria-label'] ) ) {
                $args['attributes']['aria-label'] = wp_strip_all_tags( $args['attributes']['aria-label'] );
            }

            wc_get_template( 'loop/add-to-cart.php', $args );
        }
    }
}

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

Связано: Удалить только «Добавить на карту» Домашняя страница в WooCommerce

1 голос
/ 14 июля 2020

Вы пробовали, если это не тележка?

if (!is_cart()) :
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
endif;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...