WooCommerce: Как редактировать get_price_html

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

Я пытаюсь отредактировать значение цены для одного товара.

В single-product/price.php есть вызов шаблона $product->get_price_html. Как я могу изменить эту функцию/метод, чтобы изменить способ отображения HTML?

На данный момент, даже если я удаляю все содержимое функции, находящейся в class-wc-product, она все равно чудесным образом отображается? Кто-нибудь знает, почему?

Ядро и файлы плагинов никогда не должны редактироваться напрямую, поскольку любые обновления могут перезаписать ваши изменения. Если вы посмотрите в исходный код WooCommerce на метод get_price_html, есть несколько фильтров, доступных для изменения вывода функции.

Смотрите add_filter в Codex для получения дополнительной информации о добавлении фильтров к вызовам apply_filters.

Из get_price_html в class-wc-product:

return apply_filters('woocommerce_get_price_html', $price, $this);

Итак, чтобы добавить свой собственный фильтр:

add_filter( 'woocommerce_get_price_html', 'wpa83367_price_html', 100, 2 );
function wpa83367_price_html( $price, $product ){
    return 'Было:' . str_replace( '<ins>', ' Теперь:<ins>', $price );
}

function wpa83368_price_html( $price,$product ){
   // return $product->price;
    if ( $product->price > 0 ) {
      if ( $product->price && isset( $product->regular_price ) ) {
        $from = $product->regular_price;
        $to = $product->price;
        return '<div class="old-colt"><del>'. ( ( is_numeric( $from ) ) ? woocommerce_price( $from ) : $from ) .' Розничная цена </del>  | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Наша цена</div>';
      } else {
        $to = $product->price;
        return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Наша цена</div>';
      }
   } else {
     return '<div class="live-colst">0 Наша цена</div>';
   }
}

в functions.php

function h08831n_get_price($product){
        $price_html="<div class="product-price">";
        if ( $product->get_price() > 0 ) {
            if ($product->get_price() && $product->get_regular_price()) {
                $from = $product->get_regular_price();
                $to = $product->get_price();
                $price_html .= '<del>'. ( ( is_numeric( $from ) ) ? wc_price( $from ) : $from ) .'</del><ins>'.( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) .'</ins>';
            }else{
                $to = $product->get_price();
                $price_html .= '<ins>' . ( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) . '</ins>';
            }
        }else{
            $price_html .= '<div class="free">бесплатно</div>';
        }
        $price_html .= '</div>';
        return $price_html;
    }

в том месте, где вы хотите отобразить цену, например, в single-product.php

global $product;
echo h08831n_get_price($product);

вы также можете удалить wc_price в функции, чтобы убрать стандартные HTML-форматы woocommerce

function wpa83368_price_html( $price,$product ){
// return $product->price;
if ( $product->price > 0 ) {
if ( $product->price && isset( $product->regular_price ) ) {
$from = $product->regular_price;
$to = $product->price;
return ‘‘. ( ( is_numeric( $from ) ) ? woocommerce_price( $from ) : $from ) .’ Розничная цена | ‘.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .’Наша цена’;
} else {
$to = $product->price;
return ” . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . ‘Наша цена’;
}
} else {
return ‘0 Наша цена’;
}
}

Ответ или решение

Как редактировать get_price_html в WooCommerce

Если вы хотите изменить представление цены для отдельного продукта в WooCommerce, метод get_price_html класса WC_Product — это ваше решение. В этой статье мы рассмотрим, как безопасно модифицировать вывод цены, чтобы сохранить ваши изменения при обновлениях.

Понимание проблемы

Ваша попытка удалить содержимое метода get_price_html в файле исходного кода класса class-wc-product не приводит к изменению, потому что редактирование файлов ядра WordPress или плагинов не рекомендуется. При каждом обновлении WooCommerce ваши изменения будут потеряны. Вместо этого вы можете использовать фильтры WordPress для безопасного изменения.

Метод get_price_html включает в себя вызов функции apply_filters, как показано ниже:

return apply_filters('woocommerce_get_price_html', $price, $this);

Это означает, что вы можете использовать фильтр woocommerce_get_price_html, чтобы модифицировать вывод цены, не затрагивая основной код.

Применение фильтра

Для изменения HTML вывода цены можно добавить пользовательский фильтр в файл functions.php вашей темы:

add_filter('woocommerce_get_price_html', 'custom_price_html', 100, 2);
function custom_price_html($price, $product) {
    // Здесь вы можете изменить HTML для представления цены
    if ($product->is_on_sale()) {
        $regular_price = $product->get_regular_price();
        $sale_price = $product->get_price();

        $price = '<div class="price">
                      <del>' . wc_price($regular_price) . '</del>
                      <ins>' . wc_price($sale_price) . ' Наши цены!</ins>
                  </div>';
    } else {
        $price = '<div class="price">' . wc_price($product->get_price()) . ' Наши цены!</div>';
    }
    return $price;
}

Создание собственного метода загружаемой цены

Если вам нужно больше контроля, вы можете создать свою собственную функцию для преобразования и отображения цен. Вот пример:

function my_custom_price($product) {
    $price_html = '<div class="custom-price">';

    if ($product->get_price() > 0) {
        if ($product->get_regular_price()) {
            $regular_price = $product->get_regular_price();
            $sale_price = $product->get_price();
            $price_html .= '<del>' . wc_price($regular_price) . '</del> <ins>' . wc_price($sale_price) . ' Наши цены!</ins>';
        } else {
            $sale_price = $product->get_price();
            $price_html .= '<ins>' . wc_price($sale_price) . ' Наши цены!</ins>';
        }
    } else {
        $price_html .= '<span>Бесплатно</span>';
    }

    $price_html .= '</div>';
    return $price_html;
}

Затем вы можете использовать эту функцию в любом месте вашего шаблона (например, в single-product.php):

global $product;
echo my_custom_price($product);

Заключение

Редактирование представления цены в WooCommerce может быть выполнено безопасно и эффективно через использование фильтров WordPress и пользовательских функций. Следуя описанным методам, вы можете модифицировать вывод цены, добавляя стиль и специфику, сохраняя при этом стойкость к обновлениям плагинов и тем.

FAQ

Почему модификация price.php в WooCommerce не работает?
При изменении файлов ядра WooCommerce изменения могут не проявляться, так как кэширование и вызовы фильтров могут возвращать старый вывод.

Могу ли я удалить wc_price для кастомизации HTML?
Да, вы можете удалить wc_price, чтобы избежать стандартной обертки, но необходимо вручную форматировать вывод в своем коде.

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

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

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