woocommerce改变价格的位置

时间:2016-06-03 09:41:21

标签: php wordpress woocommerce product price

尝试在页面上的主要内容之前呈现产品价格时出现此错误。

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

2 个答案:

答案 0 :(得分: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() ); 您可能还需要在其中插入循环...

参考:Overriding Templates via a Theme

答案 1 :(得分:0)

只需复制单个产品价格模板中的代码,然后将其粘贴到您的钩子函数中即可。 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);