woocommerce изменить положение цены

Я получаю эту ошибку при попытке отобразить цену продукта перед основным содержанием на странице.

Fatal error: Uncaught Error: Call to a member function get_price_html() on string in /wp-content/plugins/woocommerce/templates/single-product/price.php:27

Вот мой код:

 //the remove action works fine

remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);

//this breaks it

add_action('woocommerce_before_main_content', 'woocommerce_template_single_price', 40);

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

Как бы я обеспечить глобальный $product загружен?

-1

Решение

Я не думаю, что то, что ты не хочешь делать, возможно. Вы перемещаете рендеринг price.php перед циклом и за пределами формы добавления в корзину. затем get_price_html() нужна переменная $price, не доступно здесь.

Чтобы сделать это, я полагаю, вам нужно изменить в price.php шаблон с чем-то вроде:

<?php

if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}

global $product;
$price = esc_attr( $product->get_price() );
// $price = woocommerce_price( $product->regular_price ); // or this one
// $price = woocommerce_price( $product->sale_price ); // or this one too
?>

<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">

<p class="price"><?php echo $product->get_price_html(); ?></p>

<meta itemprop="price" content="<?php echo esc_attr( $product->get_price() ); ?>" />
<meta itemprop="priceCurrency" content="<?php echo esc_attr( get_woocommerce_currency() ); ?>" />
<link itemprop="availability" href="http://schema.org/<?php echo $product->is_in_stock() ? 'InStock' : 'OutOfStock'; ?>" />

</div>

Или заменить $product->get_price_html() от esc_attr( $product->get_price() );
Возможно, вам придется вставить петлю внутри него тоже …

Ссылка: Переопределение шаблонов через тему

1

Другие решения

Просто скопируйте код из единого шаблона цены товара и вставьте его в свою подключенную функцию.
https://github.com/woothemes/woocommerce/blob/master/templates/single-product/price.php

remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);

function price_in_title_row() {

if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
global $product;
?>

<div class="price_in_title_row" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<h3><?php echo $product->get_price_html(); ?></h3>
<meta itemprop="price" content="<?php echo esc_attr( $product->get_display_price() ); ?>" />
<meta itemprop="priceCurrency" content="<?php echo esc_attr( get_woocommerce_currency() ); ?>" />
<link itemprop="availability" href="http://schema.org/<?php echo $product->is_in_stock() ? 'InStock' : 'OutOfStock'; ?>" />
</div>

}

add_action('woocommerce_before_single_product', 'price_in_title_row', 50);
0

По вопросам рекламы [email protected]