Добавление атрибута сразу за ценой ($price) в Woocommerce

Поставил перед собой задачу добавлять сразу за ценой значение определенного атрибута, в случае, если таковой выбран. Например, у меня морковка и цену я выставляю простым товаром за $term_name

Выйдет: Price + за term_name (10 грн за 100 г)

Как бы я не мучился, код у меня не выдает нужного результата, прошу подсказать, где я ошибся.

add_function( 'woocommerce_get_price_html', 'set_packaging_type_after_price', 10, 3 );
function set_packaging_type_after_price( $data, $product ) {
    $targeted_taxonomy  = 'czenaza'; // <== наш атрибут

    // Просматриваем атрибуты
    foreach( $data['attributes'] as $attribute => $term_slug ) {
        $attribute_taxonomy = str_replace( 'attribute_', '', $attribute ); 

        // Если атрибуты совпадают
        if ( $attribute_taxonomy == $targeted_taxonomy ){
            $czenaza  = get_term_by( 'slug', $term_slug, $attribute_taxonomy )->name; // Получаем имя вариации
            $czenaza = ' <span class="czenaza">'. __('за '). $czenaza .'</span></span>';
            // Показываем "Цена (атрибут)" после цены товара
            $data['price_html'] = str_replace( '</span></span>', '</span>' . $czenaza, $data['price_html'] );
            break;
        }
    }
    return $data;
}

Ответы (1 шт):

Автор решения: SeVlad

Как бы я не мучился, код у меня не выдает нужного результата, прошу подсказать, где я ошибся.

Везде.

Для вывода можно либо править два шаблона price.php в дочерней теме либо использовать хуки. Приблизительно так:

    function my_change_product_price_display( $price ) {
    
      $price .= '<span class="myclass">'.$addtext.'</span>';
        return $price;
     }
     add_filter( 'woocommerce_get_price_html', 'my_change_product_price_display' ); //вывод в карточке товара
     add_filter( 'woocommerce_cart_item_price', 'my_change_product_price_display' ); //вывод в корзине

Осталось только нужный $addtext получить.

→ Ссылка