新闻中心

Magento 2 插件中获取商品最终价格的正确方法

2025-11-17
浏览次数:
返回列表

magento 2 插件中获取商品最终价格的正确方法

本文旨在解决在 Magento 2 插件中获取商品最终价格(包括目录价格规则折扣)时遇到的问题。通过示例代码,详细讲解了如何使用 `getPriceInfo()` 方法获取简单商品和可配置商品的常规价格和最终价格,并强调了在获取可配置商品最终价格时需要注意的细节。 确保在插件中正确获取并使用商品最终价格,避免价格计算错误。

在 Magento 2 开发插件时,正确获取商品最终价格至关重要,尤其是在存在目录价格规则等折扣的情况下。 直接使用 vendor/magento/module-catalog/Model/Product/Type/Price::getFinalPrice() 方法可能无法如预期计算出包含折扣的价格。本文将介绍一种更可靠的方法,通过 getPriceInfo() 获取商品的常规价格和最终价格,并针对不同类型的商品(简单商品和可配置商品)提供相应的代码示例。

获取简单商品的价格

对于简单商品,可以使用以下代码获取常规价格和最终价格:

<?php

namespace Vendor\Module\Helper;

use Magento\Catalog\Model\Product;

class PriceHelper
{
    /**
     * 获取简单商品的价格信息
     *
     * @param Product $product
     * @return array
     */
    public function getSimpleProductPrices(Product $product): array
    {
        $regularPrice = $product->getPriceInfo()->getPrice('regular_price')->getValue();
        $specialPrice = $product->getPriceInfo()->getPrice('special_price')->getValue();

        return [
            'regular_price' => $regularPrice,
            'final_price' => $specialPrice, // 这里实际上已经包含了目录价格规则的折扣
        ];
    }
}

代码解释:

  • $product->getPriceInfo()->getPrice('regular_price')->getValue(): 获取商品的常规价格。
  • $product->getPriceInfo()->getPrice('special_price')->getValue(): 获取商品的最终价格,它已经考虑了目录价格规则等折扣。

获取可配置商品的价格

对于可配置商品,获取价格的方式略有不同,需要区分常规价格和最终价格:

Zyro AI Background Remover Zyro AI Background Remover

Zyro推出的AI图片背景移除工具

Zyro AI Background Remover 145 查看详情 Zyro AI Background Remover
<?php

namespace Vendor\Module\Helper;

use Magento\Catalog\Model\Product;

class PriceHelper
{
    /**
     * 获取可配置商品的价格信息
     *
     * @param Product $product
     * @return array
     */
    public function getConfigurableProductPrices(Product $product): array
    {
        if ($product->getTypeId() == 'configurable') {
            $basePrice = $product->getPriceInfo()->getPrice('regular_price');

            $regularPrice = $basePrice->getMinRegularAmount()->getValue();
            $finalPrice = $product->getFinalPrice();

            return [
                'regular_price' => $regularPrice,
                'final_price' => $finalPrice,
            ];
        }

        return [
            'regular_price' => 0,
            'final_price' => 0,
        ];
    }
}

代码解释:

  • $product->getTypeId() == 'configurable': 判断商品类型是否为可配置商品。
  • $basePrice = $product->getPriceInfo()->getPrice('regular_price'): 获取常规价格信息对象。
  • $regularPrice = $basePrice->getMinRegularAmount()->getValue(): 获取可配置商品中最低的常规价格。
  • $finalPrice = $product->getFinalPrice(): 获取可配置商品的最终价格,这个价格已经包含了目录价格规则的折扣。

注意: 获取可配置商品最终价格时,直接使用 $product->getFinalPrice() 方法是更简洁有效的方式。

使用示例

以下是如何在你的插件中使用上述代码的示例:

<?php

namespace Vendor\Module\Plugin;

use Magento\Catalog\Model\Product;
use Vendor\Module\Helper\PriceHelper;

class MyPlugin
{
    private $priceHelper;

    public function __construct(PriceHelper $priceHelper) {
        $this->priceHelper = $priceHelper;
    }

    public function afterGetName(Product $product, $result)
    {
        $productType = $product->getTypeId();
        if ($productType == 'simple') {
            $prices = $this->priceHelper->getSimpleProductPrices($product);
        } elseif ($productType == 'configurable') {
            $prices = $this->priceHelper->getConfigurableProductPrices($product);
        } else {
            $prices = ['regular_price' => 0, 'final_price' => 0];
        }

        $regularPrice = $prices['regular_price'];
        $finalPrice = $prices['final_price'];

        // 使用价格进行后续操作
        return $result . " (Regular Price: " . $regularPrice . ", Final Price: " . $finalPrice . ")";
    }
}

总结

通过使用 getPriceInfo() 方法,可以更准确地获取 Magento 2 中商品(包括简单商品和可配置商品)的常规价格和最终价格,尤其是在存在目录价格规则等折扣的情况下。 请务必根据商品类型选择正确的方法,并确保在你的插件中正确使用这些价格信息。 此外,定期清理缓存和重新索引数据也是确保价格信息准确性的重要步骤。

以上就是Magento 2 插件中获取商品最终价格的正确方法的详细内容,更多请关注php中文网其它相关文章!


# 多维  # 是在  # 键值  # 情况下  # 转数  # 包含了  # 相关文章  # php  # 网络营销推广怎么引流  # 浙江网站建设公司排名  # 邹城网站建设方案  # 上海快速营销推广中心  # 丽水抖音seo推广招聘  # 大连最好的网站推广公司  # 中医理疗馆营销推广方式  # 唐山海外网站优化  # 网站建设 客户拜访  # 绵竹旅游网站建设  # 解决问题  # 中文网  # 要注意 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 必由学网页版入口 必由学官方平台直接访问  UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台  搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具  如何在CSS中使用浮动制作导航栏_float实现水平菜单  J*aScript打印功能_j*ascript输出控制  J*aScript数组对象转换:按指定键分组与值收集  Excel Power Pivot如何处理XML数据源 构建高级数据模型  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  单12V-2&#215;6实现为RTX 5090供电750W!甚至都没敢跑分  QQ官网正版登录链接 QQ在线登录入口最新  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  Composer如何在生产环境安全地执行composer update  R星幕后开发视频泄露 包含《GTA6》等多款大作  谷歌邮箱注册显示错误Gmail服务器异常与延迟处理  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程  C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法  wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法  php源码怎么看淘宝客系统_看php源码淘宝客系统技巧  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  qq游戏免费畅玩入口_qq游戏电脑版快速启动  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址  极兔快递快件信息查询系统 极兔快递官网运单号追踪  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  整合Supabase认证与Django模型:跨模式迁移的解决方案  抓大鹅无需下载版 抓大鹅秒玩版入口  美团外卖商家服务中心入口 美团商家版官网入口  千牛数据看板网页版_千牛数据看板网页版访问方法  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明  windows10怎么关闭系统提示音_windows10彻底静音设置方法  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  顺丰快件物流信息 官方网站查询入口  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图  反效果?《战地6》免费试玩开启后玩家数不升反降  微信网页版官方快速登录入口 微信网页版网页版账号直达  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  多闪网页版在线观看免费入口_多闪官网访问入口  怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  J*aScript中向JSON对象添加新属性的正确姿势  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析  微信聊天记录怎么加密_微信聊天记录加密方法  C++指针和引用有什么区别_C++内存管理核心概念深度解析 

搜索