Как отобразить единицу измерения после цены товара Woocommerce?
Всем привет.
Есть код который выводит единицу измерения рядом с ценой товара, но почему то перед ценой а не после как нужно.
Что не так в коде? Помогите пожалуйста!
Сейчас единица измерения перед ценой
Код:
add_filter( 'woocommerce_get_price_suffix', 'add_some_text_after_price', 99, 1 ); function add_some_text_after_price ($value){ $value = get_post_meta(get_the_ID(), '_edinica', true); if (empty($value)) { return; } echo '<span>' . '/ <span>' . esc_html($value) . '</span></span>'; }; |
add_filter( 'woocommerce_get_price_suffix', 'add_some_text_after_price', 99, 1 ); function add_some_text_after_price ($value){ $value = get_post_meta(get_the_ID(), '_edinica', true); if (empty($value)) { return; } echo '<span>' . '/ <span>' . esc_html($value) . '</span></span>'; };
Дополнительно:
Потому что фильтр должен возвращать return, а не выводить echo
add_filter( 'woocommerce_get_price_suffix', 'add_some_text_after_price', 99, 1 ); function add_some_text_after_price ( $value ) { $value = get_post_meta( get_the_ID(), '_edinica', true ); if ( empty( $value ) ) { return; } return '<span>/ <span>' . esc_html( $value ) . '</span></span>'; }; |
add_filter( 'woocommerce_get_price_suffix', 'add_some_text_after_price', 99, 1 ); function add_some_text_after_price ( $value ) { $value = get_post_meta( get_the_ID(), '_edinica', true ); if ( empty( $value ) ) { return; } return '<span>/ <span>' . esc_html( $value ) . '</span></span>'; };
- Спасибо, действительно глупая ошибка. Еще раз спасибо за помощь!!!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Проблема в том, что фильтр
woocommerce_get_price_suffixдолжен возвращать строку, а не делатьecho. Сейчас вы выводите единицу измерения напрямую и при этом не возвращаете корректный suffix, поэтому порядок может получаться неправильным.Сделайте так:
add_filter('woocommerce_get_price_suffix', function ($suffix, $product, $price, $qty) { if (! $product instanceof WC_Product) { return $suffix; } $unit = get_post_meta($product->get_id(), '_edinica', true); if ($unit === '') { return $suffix; } return ' <span class="price-unit">/ ' . esc_html($unit) . '</span>'; }, 99, 4);
Если метаполе хранится не у вариации, а у родительского товара, для вариативных товаров можно добавить fallback:
$product_id = $product->get_id(); $unit = get_post_meta($product_id, '_edinica', true); if ($unit === '' && $product->is_type('variation')) { $unit = get_post_meta($product->get_parent_id(), '_edinica', true); }
Ещё один важный момент:
woocommerce_get_price_suffixдобавляет именно суффикс к HTML цены, поэтому не нужно возвращать саму цену. WooCommerce сам поставит цену, а ваш фильтр добавит текст после неё.Если нужно вывести единицу только в карточке товара, а не в каталоге, добавьте условие:
if (! is_product()) { return $suffix; }
После правки очистите кэш WooCommerce/плагина кэширования и проверьте простые и вариативные товары отдельно.