Как изменить текст кнопки “Добавить в корзину” в WooCommerce в зависимости от категории товара?

Вопрос или проблема

Как изменить текст кнопки “Добавить в корзину” в 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. Следующим образом можно реализовать данное изменение:

  1. Откройте файл functions.php вашей темы или создайте отдельный плагин для этих кастомизаций. Это поможет избежать потери изменений при обновлении темы.

  2. Добавьте следующий код в файл:
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". Это решение работает динамически, поэтому, если вы добавите новые продукты в эту категорию, текст кнопки автоматически изменится без дополнительных действий.

Оцените материал
Добавить комментарий

Капча загружается...