后台把Wholesale组价格从80改成75,保存成功,登录批发客户后商品页仍是80;无痕游客价格却正常。Group Price最终进入价格索引,并按Website与Customer Group形成维度,错一层就会读到旧值。

确认源数据和索引结果

SELECT * FROM catalog_product_entity_tier_price
WHERE entity_id=<product_id> ORDER BY website_id,customer_group_id,qty;

SELECT entity_id,customer_group_id,website_id,price,final_price,min_price
FROM catalog_product_index_price
WHERE entity_id=<product_id> ORDER BY website_id,customer_group_id;

后台的Group Price在数据库里通常与tier price共用表。核对customer_group_id、website_id、qty和all_groups,尤其不要把All Websites的旧行与指定Website的新行同时保留。

只重建相关Indexer

bin/magento indexer:status catalog_product_price
bin/magento indexer:reset catalog_product_price
bin/magento indexer:reindex catalog_product_price

若索引设为Update by Schedule,检查changelog和cron是否消费。reset前先确认没有正在运行的价格索引进程。

数据库已是75,页面还是80

用curl比较匿名和登录响应,再检查Varnish或FPC是否把客户组上下文混在一起。自定义登录、SSO或headless前端如果没有正确更新customer-data,可能仍展示旧缓存。

  • 登录后customer_group_id是否正确;
  • X-Magento-Vary是否在登录后变化;
  • price-box JSON中的amount是75还是80;
  • GraphQL请求是否携带正确customer token;
  • CDN是否错误缓存带Authorization的请求。

验收

用General、Wholesale和游客三个会话同时打开同一SKU,并测试两个Website、可配置子商品和购物车价格。商品页、分类页、搜索结果、购物车和GraphQL返回必须一致;只修商品页模板不算完成。