Skip to content

Special prices not displayed in 2.4.8 due to hasSpecialPrice() method change in final_price.phtml template #40002

@dstreit0106

Description

@dstreit0106

Preconditions and environment

  • Magento version: 2.4.8
  • Upgrade path: Upgraded from Magento 2.4.6 or earlier
  • Environment: Any (development, staging, production)
  • Theme: Any theme using default Magento pricing templates
  • Product type: All product types with special prices configured
  • Special price configuration: Products with valid special prices set via Admin Panel > Catalog > Products > [Product] > Advanced Pricing

Steps to reproduce

  1. Upgrade Magento installation from 2.4.6 (or earlier) to 2.4.8
  2. Configure a product with a special price in Admin Panel:
  • Go to Catalog > Products
  • Edit any product
  • Click "Advanced Pricing" under Price field
  • Set a "Special Price" lower than the regular price
  • Save the product
  1. View the product on category pages or product listing pages
  2. Observe the price display

Expected result

  • Special price should be displayed prominently
  • Regular price should be shown crossed out or with "Regular Price" label
  • Both prices should be visible to indicate the discount to customers

Actual result

  • Only the regular price is displayed
  • Special price is not shown at all
  • No visual indication of any discount or special offer
  • The hasSpecialPrice() method returns false even when a valid special price exists

Additional information

Root cause analysis:
The issue stems from changes made to the hasSpecialPrice() method in Magento 2.4.8. The method now uses a performance optimization with special_price_map for product listings, but this map is not properly initialized in many contexts, causing the method to return false even when products have valid special prices.

Code location:

  • Affected template: vendor/magento/module-catalog/view/base/templates/product/price/final_price.phtml
  • Affected method: hasSpecialPrice() in pricing render blocks

Temporary workaround:
Replace the hasSpecialPrice() check in templates with direct price comparison:
// Instead of: if ($block->hasSpecialPrice()) $displayRegularPrice = $priceModel->getAmount()->getValue(); $displayFinalPrice = $finalPriceModel->getAmount()->getValue(); if ($displayFinalPrice < $displayRegularPrice)

Impact:

  • Critical business impact: Special prices/discounts not visible to customers
  • Affects sales and marketing strategies
  • Reduces conversion rates due to invisible promotions

Release note

Fixed: Special prices are now correctly displayed on product listing and category pages after the pricing performance optimization introduced in 2.4.8. The hasSpecialPrice() method now properly handles cases where the special_price_map is not initialized, ensuring consistent special price visibility across all store contexts.

Triage and priority

  • Severity: S0 - Affects critical data or functionality and leaves users without workaround.
  • Severity: S1 - Affects critical data or functionality and forces users to employ a workaround.
  • Severity: S2 - Affects non-critical data or functionality and forces users to employ a workaround.
  • Severity: S3 - Affects non-critical data or functionality and does not force users to employ a workaround.
  • Severity: S4 - Affects aesthetics, professional look and feel, “quality” or “usability”.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area: PricingComponent: CatalogIssue: ConfirmedGate 3 Passed. Manual verification of the issue completed. Issue is confirmedPriority: P2A defect with this priority could have functionality issues which are not to expectations.Reported on 2.4.8Indicates original Magento version for the Issue report.Reproduced on 2.4.xThe issue has been reproduced on latest 2.4-develop branch

    Type

    No type

    Projects

    Status

    Ready for Development

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions