Вопрос или проблема
Как изменить текст кнопки “Добавить в корзину” в WooCommerce в зависимости от категории товара?
Я создал пользовательский тип поста (CPT) для моих событий и для каждого события создал отдельный продукт в WooCommerce. Теперь я использую этот шорткод в своем коде:
<?php echo do_shortcode('[add_to_cart id="'.get_field('event_ticket').'" show_price = "FALSE"]'); ?>
для отображения кнопки “добавить в корзину”, размещенной на каждом событии. У каждого события есть категория продукта “event”, и теперь я хочу изменить текст по умолчанию на кнопке “добавить в корзину”, но только для тех продуктов, которые относятся к категории “event”.
Как я могу это сделать?
Вам нужно будет отфильтровать текст. Вот функция из ядра WC, которая формирует этот текст. В обоих случаях $this
будет являться продуктом.
/**
* Получить текст кнопки "добавить в корзину" для страницы товара.
*
* @access public
* @return string
*/
public function single_add_to_cart_text() {
return apply_filters( 'woocommerce_product_single_add_to_cart_text', $this->get_button_text() ? $this->get_button_text() : _x( 'Купить товар', 'placeholder', 'woocommerce' ), $this );
}
/**
* Получить текст кнопки "добавить в корзину".
*
* @access public
* @return string
*/
public function add_to_cart_text() {
return apply_filters( 'woocommerce_product_add_to_cart_text', $this->get_button_text() ? $this->get_button_text() : _x( 'Купить товар', 'placeholder', 'woocommerce' ), $this );
}
Итак, вам нужно будет добавить фильтр к либо woocommerce_product_single_add_to_cart_text
, либо woocommerce_product_add_to_cart_text
, который проверяет, является ли $this
событием, и изменяет текст, если это так, или возвращает текст по умолчанию, если это не так.
Ответ или решение
Чтобы изменить текст кнопки "Добавить в корзину" в WooCommerce в зависимости от категории продукта, вы можете воспользоваться хуками фильтра в WordPress. В вашем случае, вам нужно будет использовать фильтры woocommerce_product_add_to_cart_text
или woocommerce_product_single_add_to_cart_text
. Следующим образом можно реализовать данное изменение:
-
Откройте файл
functions.php
вашей темы или создайте отдельный плагин для этих кастомизаций. Это поможет избежать потери изменений при обновлении темы. - Добавьте следующий код в файл:
add_filter('woocommerce_product_add_to_cart_text', 'custom_add_to_cart_text', 10, 2);
add_filter('woocommerce_product_single_add_to_cart_text', 'custom_add_to_cart_text', 10, 2);
function custom_add_to_cart_text($text, $product) {
// Проверяем, принадлежит ли продукт к категории "event"
if (has_term('event', 'product_cat', $product->get_id())) {
// Меняем текст кнопки "Добавить в корзину"
return __('Зарегистрироваться', 'woocommerce'); // Замените на нужный вам текст
}
// Возвращаем стандартный текст, если продукт не в категории "event"
return $text;
}
Объяснение кода:
- Функция
add_filter
добавляет новый фильтр для изменения текста кнопки. Мы используемwoocommerce_product_add_to_cart_text
для кнопки общего вида иwoocommerce_product_single_add_to_cart_text
для кнопки на странице товара. - В функции
custom_add_to_cart_text
, мы проверяем, относится ли продукт к категории "event" с помощью функцииhas_term
. - Если продукт относится к данной категории, изменяем текст кнопки на "Зарегистрироваться" (или любой другой текст, который вы хотите использовать).
- Если продукт не попадает под указанное условие, возвращаем исходный текст кнопки.
Примечание:
Не забудьте заменить 'Зарегистрироваться'
на любой текст, который вы хотите отобразить на кнопке для продуктов из категории "event".
После добавления кода, сохраните изменения и проверьте показывается ли измененный текст кнопки на страницах продуктов с категорией "event". Это решение работает динамически, поэтому, если вы добавите новые продукты в эту категорию, текст кнопки автоматически изменится без дополнительных действий.