Как переопределить функции кнопок виджета корзины WooCommerce
Я уже попробовал около 20 различных методов, чтобы это заработало, но без результата.
Я пытаюсь изменить классы кнопок в виджете мини-корзины 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>';
}
}
Какой правильный способ переопределить эти функции в моей теме, чтобы я мог изменить классы этих двух кнопок?

Не уверен, нужна ли вам еще помощь с этим, но возможно это поможет другим в подобной ситуации.
Если вы хотите изменить класс тега <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 браузера, чтобы избежать загрузки новой копии на каждой странице.

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

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

Код в старом ответе больше не работает. Подход по-прежнему актуален, но код не работает. Поэтому следующий код работает на данный момент, вы можете добавить его в ваш 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);
