Как переопределить функции кнопок виджета корзины WooCommerce

3 июл. 2017 г., 14:26:07
Просмотры: 24.1K
Голосов: 2

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

Я пытаюсь изменить классы кнопок в виджете мини-корзины WooCommerce, как показано ниже.

Виджет мини-корзины WooCommerce с кнопками

Разметка для этих кнопок прописана в двух функциях внутри файла wc-template-functions.php:

if ( ! function_exists( 'woocommerce_widget_shopping_cart_button_view_cart' ) ) {

        /**
         * Вывод кнопки перехода к корзине.
         *
         * @subpackage  Cart
         */
        function woocommerce_widget_shopping_cart_button_view_cart() {
            echo '<a href="' . esc_url( wc_get_cart_url() ) . '" class="button wc-forward">' . esc_html__( 'View cart', 'woocommerce' ) . '</a>';
        }
    }

    if ( ! function_exists( 'woocommerce_widget_shopping_cart_proceed_to_checkout' ) ) {

        /**
         * Вывод кнопки перехода к оформлению заказа.
         *
         * @subpackage  Cart
         */
        function woocommerce_widget_shopping_cart_proceed_to_checkout() {
            echo '<a href="' . esc_url( wc_get_checkout_url() ) . '" class="button checkout wc-forward">' . esc_html__( 'Checkout', 'woocommerce' ) . '</a>';
        }
    }

Какой правильный способ переопределить эти функции в моей теме, чтобы я мог изменить классы этих двух кнопок?

0
Все ответы на вопрос 2
3

Не уверен, нужна ли вам еще помощь с этим, но возможно это поможет другим в подобной ситуации.

Если вы хотите изменить класс тега <p> в вашем примере, файл, который нужно редактировать, находится по пути /wp-content/plugins/woocommerce/templates/cart/mini-cart.php

Очевидно, не редактируйте файл напрямую. Скопируйте его в папку вашей темы (или предпочтительно дочерней темы) по пути /wp-content/themes/ваша-тема/woocommerce/cart/mini-cart.php и вы сможете отредактировать строку #75, чтобы добавить свои CSS классы. Строка #75 выглядит так:

<p class="woocommerce-mini-cart__buttons buttons"><?php do_action( 'woocommerce_widget_shopping_cart_buttons' ); ?></p>

Если вы хотите изменить CSS класс тега <a>, вам нужно удалить стандартное 'действие' и создать свое в файле functions.php вашей темы (или предпочтительно дочерней темы), например:

remove_action( 'woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_button_view_cart', 10 );
remove_action( 'woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_proceed_to_checkout', 20 );

function my_woocommerce_widget_shopping_cart_button_view_cart() {
    echo '<a href="' . esc_url( wc_get_cart_url() ) . '" class="btn btn-default">' . esc_html__( 'Просмотреть корзину', 'woocommerce' ) . '</a>';
}
function my_woocommerce_widget_shopping_cart_proceed_to_checkout() {
    echo '<a href="' . esc_url( wc_get_checkout_url() ) . '" class="btn btn-default">' . esc_html__( 'Оформить заказ', 'woocommerce' ) . '</a>';
}
add_action( 'woocommerce_widget_shopping_cart_buttons', 'my_woocommerce_widget_shopping_cart_button_view_cart', 10 );
add_action( 'woocommerce_widget_shopping_cart_buttons', 'my_woocommerce_widget_shopping_cart_proceed_to_checkout', 20 );

Вам нужно будет очистить кеш браузера или добавить еще один товар в корзину, чтобы увидеть изменения, так как содержимое корзины сохраняется в sessionStorage браузера, чтобы избежать загрузки новой копии на каждой странице.

4 окт. 2017 г. 14:09:44
Комментарии

Решение выглядит так, будто должно работать, но у меня оно не срабатывает. Я добавил его в файл functions.php дочерней темы, но изменения, кажется, не применяются. Может быть, есть ещё какой-то механизм кэширования?

Karl Adler Karl Adler
6 янв. 2018 г. 15:36:16

Не важно, я использовал под-тему для под-темы, которая не использовала функции виджетов...

Karl Adler Karl Adler
6 янв. 2018 г. 15:49:41

Очень важно упомянуть, что это кэшируется. Я потратил час ^^

Chaoste Chaoste
18 июн. 2020 г. 14:32:31
0

Код в старом ответе больше не работает. Подход по-прежнему актуален, но код не работает. Поэтому следующий код работает на данный момент, вы можете добавить его в ваш functions.php. (Апрель 2021):

Спасибо Mat за ответ.

function custom_widget_cart_btn_view_cart()
{
  echo '<a href="' . esc_url(wc_get_cart_url()) . '" class="button wc-forward">' . esc_html__('Моя корзина', 'woocommerce') . '</a>';
}

function custom_widget_cart_checkout()
{
  echo '<a href="' . esc_url(wc_get_checkout_url()) . '" class="button checkout wc-forward">' . esc_html__('Мой заказ', 'woocommerce') . '</a>';
}

function custom_widget_cart_subtotal()
{
  echo '<strong>' . esc_html__('Моя сумма: ', 'woocommerce') . '</strong> ' . WC()->cart->get_cart_subtotal();
}

remove_action('woocommerce_widget_shopping_cart_total', 'woocommerce_widget_shopping_cart_subtotal', 10);
remove_action('woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_button_view_cart', 10);
remove_action('woocommerce_widget_shopping_cart_buttons', 'woocommerce_widget_shopping_cart_proceed_to_checkout', 20);

add_action('woocommerce_widget_shopping_cart_total', 'custom_widget_cart_subtotal', 11);
add_action('woocommerce_widget_shopping_cart_buttons', 'custom_widget_cart_btn_view_cart', 12);
add_action('woocommerce_widget_shopping_cart_buttons', 'custom_widget_cart_checkout', 21);
30 апр. 2021 г. 06:37:53