Як у WooCommerce замість нульової ціни вивести "FREE"

Привіт:) У цьому пості покажу невеликий сніпет, який дозволить у картці товару WooCommerce замість нульової ціни виводити "FREE" або інший текст.

У старих версіях плагіну на сторінці товару із порожньою (нульовою) ціною автоматично відображався текст "Безкоштовно", і такий товар не можна було опублікувати/замовити. У нових версіях цей функціонал був змінений. Але якщо все ж потрібно повернути назад цю поведінку, скористайтеся готовим сніпетом нижче, який потрібно додати у файл functions.php.

🔧Кастомний текст замість нульової ціни: актуальний код

/**
 * Display "FREE" instead of empty or zero prices in WooCommerce
 */
if ( ! function_exists( 'mp_price_free_zero' ) ) {
	function mp_price_free_zero( $price, $product ) {

        // Variable products
		if ( $product->is_type( 'variable' ) ) {
			$prices = $product->get_variation_prices( true );
			$min_price = current( $prices['price'] );

			if ( 0 == $min_price ) {
				$max_price = end( $prices['price'] );
				$min_reg_price = current( $prices['regular_price'] );
				$max_reg_price = end( $prices['regular_price'] );

				if ( $min_price !== $max_price ) {
					$price = wc_format_price_range( 'FREE', $max_price );
					$price .= $product->get_price_suffix();
				} elseif ( $product->is_on_sale() && $min_reg_price === $max_reg_price ) {
					$price = wc_format_sale_price( wc_price( $max_reg_price ), 'FREE' );
					$price .= $product->get_price_suffix();
				} else {
					$price = 'FREE';
				}
			}

        // Simple products
		} elseif ( 0 == $product->get_price() ) {
			$price = '<span class="woocommerce-Price-amount amount">FREE</span>';
		}

		return $price;
	}
}
add_filter( 'woocommerce_get_price_html', 'mp_price_free_zero', 9999, 2 );

Це виглядатиме приблизно так:

Якщо потрібно виводити інший текст (наприклад, "Безкоштовно", "Free Download", "0 грн", "У подарунок", "Входить у комплект"), замініть "FREE" на потрібний вам у наступному рядку

<span class="woocommerce-Price-amount amount">FREE</span>

🧩Як це працює — просте пояснення

Код перехоплює значення, яке WooCommerce виводить у блоці ціни (woocommerce_get_price_html) і замінює його, якщо:

  • товар simple (звичайний) і має ціну 0,
  • товар variable (варіативний), а мінімальна варіація має ціну 0.

Також код обробляє:

  • діапазони цін,
  • товари з акціями,
  • підстановку price suffix (якщо він використовується).

📌 Важливі нюанси

✅ Код не впливає на ціну в кошику

У кошику товар з нульовою ціною все одно буде 0, якщо потрібно — можна додати аналогічний хук для кошика.

✅ Працює лише на фронті

В адмінці ціна все одно виглядає як 0 — це правильно.

✅ Якщо товар має ціну порожню, а не 0

WooCommerce інколи трактує порожнє поле і 0 по-різному. Цей код покриває обидва випадки.

🎨Варіант із CSS-класом для кращої стилізації

Можна додати клас:

$price = '<span class="price--free">FREE</span>';

А в CSS:

.price--free {
color: #00a100;
font-weight: 700;
text-transform: uppercase;
}

🏷Альтернативний короткий варіант для простих товарів

Якщо працюєте лише зі simple product:

add_filter( 'woocommerce_get_price_html', function( $price, $product ) {
return $product->get_price() == 0
? '<span class="amount">FREE</span>'
: $price;
}, 20, 2 );

🎁Бонус: приховати ціну зовсім

Інколи потрібно навпаки — не замінити, а прибрати ціну:

add_filter( 'woocommerce_get_price_html', function( $price ) {
return '';
} );

🔚Висновок

WooCommerce дає гнучкі можливості для кастомізації виводу ціни. Невеликий сніпет дозволяє:

  • замінити 0 на будь-яке слово чи фразу,
  • зробити карточки товарів більш привабливими,
  • повноцінно повернути "стару поведінку" WooCommerce.
Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, інтернет-магазини, блоги на WordPress. Надаю консультації з WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *