【问题标题】:hook into woocommerce_variation_price_html wordpress挂钩到 woocommerce_variation_price_html wordpress
【发布时间】:2019-04-18 18:16:02
【问题描述】:

我正在为 woocommerce 开发一个插件,遇到了钩子“woocommerce_variation_price_html”,它允许您挂钩单个产品的变体价格下降。所以创建了一个快速函数来测试和玩:

add_action( 'woocommerce_variation_price_html' , 'wholesale_variation_price' );
function wholesale_variation_price($term){

 return '';

}

上面的工作很好,并删除了所有数据。但是我正在尝试添加自定义 meta_data 来替换默认值。

于是我做了以下事情:

add_action( 'woocommerce_variation_price_html' , 'wholesale_variation_price' );
function wholesale_variation_price($term){

$var_price = get_post_meta( get_the_id(), '_my_price', true );

 return $var_price;

}

由于某种原因这不起作用?有没有人在 woocommerce 中使用过这个钩子?在任何地方都没有太多关于该钩子的文档。

任何帮助将不胜感激!

【问题讨论】:

  • 那个钩子不是用来更新价格的。那个用于格式化输出。这只会改变用户看到的价格。不是购物车/订单中使用的实际价格。还要检查 get_post_meta 是否返回值。
  • 是的,我只想格式化输出,购物车/订单价格已经处理好了。 post_meta 返回一个值。

标签: wordpress woocommerce


【解决方案1】:

如前所述,您可以阅读here 关于 html 过滤器的信息。 也许您为变化设置了销售价格?然后在链接中您可以看到共有 4 个过滤器。适用于:价格、促销价、免费和无价。

此代码有效

add_filter( 'woocommerce_variation_sale_price_html', 'my_html', 10, 2);
add_filter( 'woocommerce_variation_price_html', 'my_html', 10, 2);
function my_html( $price, $variation ) {
    return woocommerce_price(5);
}

这个也可以。这允许您修改整个变体。读入代码here

add_filter( 'woocommerce_available_variation', 'my_variation', 10, 3);
function my_variation( $data, $product, $variation ) {
    $data['price_html'] = woocommerce_price(6);
    return $data;
}

截图:

第一个例子

第二个例子

像魔术一样工作!

附:你可以在屏幕截图中看到这样的价格,因为我有这样的设计。


编辑 2016-09-10

2.6+ 版

由于 woocommerce_price 在 2.6 中已弃用,因此将 wc_price 用于较新版本。

【讨论】:

  • 我不知道存在 woocommerce_price() 函数!如何在此函数中获取特定的变体 ID?我需要一个自定义字段
  • 我更新了我的帖子。我确实搞砸了。第二个功能固定。同样在这两种方式中,您都有变量 $variation [或者您选择命名它]。在第一个函数中作为第二个 (2.) 变量。在第二个函数中,您有第三个 (3.) 变量用于变化。
  • 感谢更新!那么我如何为每个变体定位 _my_price 的特定元值?
  • 由于woocommerce_price() 已被弃用,此代码不再有效……如果您可以更新它,这将对社区非常有用。谢谢
  • @LoicTheAztec 添加了带有评论的编辑。应该够了。
【解决方案2】:
// Display Price For Variable Product With Same Variations Prices
add_filter('woocommerce_available_variation', function ($value, $object = null, $variation = null) {
if ($value['price_html'] == '') {
    $value['price_html'] = '<span class="price">' . $variation->get_price_html() . '</span>';
}
return $value;}, 10, 3);

【讨论】:

    【解决方案3】:

    通过查看 WooCommerce 源代码,我发现 woocommerce_variation_price_html 是一个过滤器,而不是一个操作。我不知道你是如何设法让你的示例代码像那样工作的……很奇怪。

    试试这个:

    function wholesale_variation_price( $price, $product ) {
        $var_price = get_post_meta( $product->variation_id, '_my_price', true );
        return $var_price;
    }
    add_filter( 'woocommerce_variation_price_html', 'wholesale_variation_price', 10, 2 )
    

    【讨论】:

    • 就我所见,认为结果与 add_action 相同?哪个有效,但仅从下拉列表中更新 1 件商品的价格。
    • 我刚刚检查了 WordPress 函数 add_action 正在使用 add_filter 函数,所以 add_action 基本上只是一个别名,它们具有相同的行为。
    【解决方案4】:

    我用它来修改变体价格以显示每个变体产品的价格,不含税前和含税后:)

    add_filter( 'woocommerce_available_variation', 'my_variation', 10, 3);
    function my_variation( $data, $product, $variation ) {
        $data['price_html'] = "<span class='ex-vat-price'>ex. " . woocommerce_price($variation->get_price_excluding_tax()) . "</span><br>";
        $data['price_html'] .= "<span class='inc-vat-price'>inc. " . woocommerce_price($variation->get_price_including_tax()) . "</span>";
        return $data;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2013-04-04
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多