Notable changes in PrestaShop 9.2.x

This documentation is being continuously improved. If you notice any missing or incomplete information, please help us by creating an issue on our GitHub repository.

This section provides a list of the most significant changes in PrestaShop 9.2.x for module and theme developers. If you notice any missing or incorrect information, please help us improve by creating an issue on our GitHub repository.

As a minor version, PrestaShop 9.2 strives to maintain backward compatibility with 9.1.x. Breaking changes are only introduced when absolutely necessary. For more details, see our Backward Compatibility Promise.
PrestaShop 9.2 is currently available as a beta release. The features described below are still under active development, and details may change before the final release. For an overview of this version, read the announcement: PrestaShop 9.2 Beta is open for feedback.

New Features

Extra Properties

PrestaShop 9.2 introduces Extra Properties: a new native system for attaching extra fields to PrestaShop entities, without creating your own tables or wiring up the persistence logic by hand.

Until now, storing additional data on a core entity such as a Product, Combination, Customer, or Order meant creating custom tables, managing the relations yourself, and repeating the same persistence logic in every module. Extra Properties replaces that boilerplate with a single native extension point.

A module can register a new field on any supported entity. Each field has its own type and validation rules, and it understands languages and shops out of the box. Once registered, the field is available everywhere automatically:

  • In the Back Office forms and grids.
  • On the Front Office.
  • In the Admin API.

This is achieved with no overrides and no extra wiring. The system provides built-in support for multistore, multilang, Back Office forms and grids, Front Office access, and the Admin API.

We are finalizing the Extra Properties system during the beta period and aim to deliver a stable feature. The code is marked as @experimental: this leaves room to introduce a backward compatibility break if there is absolutely no other option, but we have anticipated a wide range of scenarios specifically to avoid that. Detailed developer documentation will be added as the implementation is finalized.

For a working example of registering an extra field, see the demoextrafield example module.

You can follow the development and share feedback on the dedicated GitHub issue: Extra Properties.

The Extra Properties system is the result of a joint effort between Kiwik and the PrestaShop SA teams.

One Page Checkout

PrestaShop 9.2 includes a native One Page Checkout (OPC) module in the bundle, bringing the entire checkout experience together onto a single page.

Until now, PrestaShop shipped only with a native multi-step checkout spread across separate pages. Relying solely on third-party modules for a one-page experience created inter-compatibility issues, so this capability has been brought into the project itself.

This is a major change that affects modules and themes interacting with the checkout flow. Payment modules, carrier modules, and themes should be tested for compatibility with the new single-page flow.

The Checkout section documents how to make your modules and themes compatible with One Page Checkout:

One Page Checkout for module developers One Page Checkout for theme developers

The module developer guide covers the new actionCheckoutBuildProcess hook and payment and carrier compatibility. The theme developer guide covers the template, DOM, and styling contract.

We encourage module and theme developers to explore the new checkout flow and ensure compatibility during the beta period.

You can read the project discussion and share feedback here: One Page Checkout.

Improved B2B Mode

PrestaShop 9.2 lays the foundation for an improved B2B mode, introducing native business entities, B2B customer profiles, business identifiers, B2B addresses, and role-based access for B2B users.

The feature is behind the improved_b2b feature flag, which is in beta and disabled by default. To use it, enable the flag and activate B2B mode in General Settings.

Work in Progress - The improved B2B mode is under heavy development. Its database schema and APIs are expected to change before the final release. We do not recommend building on it yet. Detailed developer documentation will be added once the implementation is finalized.

Related pull requests: Improved B2B feature flag, B2B foundation.

The improved B2B mode is developed in collaboration with Soledis and the PrestaShop SA teams.

Improvements

Product Conditions

The product condition enum has been extended with three new values, in addition to the existing new, used, and refurbished:

  • open_box
  • damaged
  • new_with_defects

Modules that read or write the product condition, or that list conditions in the Back Office or Front Office, should account for these new values.

Related pull request: Add new product conditions.

Module Service Configuration

Modules can now provide their Symfony service definitions as a PHP file and as version-specific YAML files, in addition to the classic services.yml. The loading priority is:

  1. config/services.php
  2. config/services-{major}.{minor}.yml (for example services-9.2.yml)
  3. config/services-{major}.yml (for example services-9.yml)
  4. config/services.yml

This lets you adopt Symfony PHP service configuration in PrestaShop 9 while keeping YAML fallbacks for older PrestaShop versions, or branch on _PS_VERSION_ from services.php. Existing modules using only services.yml continue to work unchanged.

See the Services documentation for details.

Related pull request: Support services.php and version-specific services files.

Core-Side Structured Data

PrestaShop 9.2 introduces a core-side approach to rendering JSON-LD structured data on the Front Office. Instead of assembling microdata in templates, structured data can be provided as arrays through the actionFrontControllerSetVariables hook and a getStructuredData() method, then rendered from the theme.

This makes it easier for modules to add, override, or remove structured data (for example AggregateRating, MerchantReturnPolicy, or ContactPoint) without editing templates.

For a working example of providing structured data from a module, see the demoseo example module.

Related pull request: Render structured data on core side.

Symfony Migrations

The long-running migration of legacy Back Office pages to the Symfony framework continues in PrestaShop 9.2. Migrated pages rely on Symfony routing, forms, and security, and they are easier to extend through the grid and form hook system.

In 9.2 another batch of migrated pages reaches stable. Each page is controlled by a feature flag, so you can switch to the migrated version and report any issue before it becomes the default:

Page Feature flag
Countries country
Merchandise Return merchandise_return
Hook a module hook_module_v2
Quick Access quick_access
Email body translations email_body_translation
Tax rules tax_rules_group
What is a feature flag? A feature flag is a switch that turns a specific capability on or off in your shop. Some features and migrated pages ship behind a flag so you can opt in and test them before they become the default. You will find these switches on the New & Experimental Features page, under the Advanced Parameters menu in the Back Office.

If your module modifies one of these pages through grid or form hooks, test it against the migrated version.

Feature Flag Changes

Beyond the migration flags above, the following feature flags are notable in PrestaShop 9.2:

Feature flag State in 9.2 Notes
tag Stable Tag page migrated to Symfony. #40238
new_pricing Beta Introduced in beta. #41032
improved_b2b Beta Introduced in beta (see Improved B2B Mode above).

New CLI Commands

PrestaShop 9.2 adds several Symfony console commands. See the console commands reference for the full list.

prestashop:module:list

List shop modules from the CLI. By default it prints a table of installed modules (name, version, status). Scope filters --active, --disabled, --not-installed, and --all narrow or widen the listing, and --simple prints only technical names, one per line, for use in pipelines. The existing prestashop:module command is unchanged.

php bin/console prestashop:module:list
php bin/console prestashop:module:list --simple --disabled

prestashop:employee:create-admin and prestashop:employee:change-password

Provision a back-office SuperAdmin employee, or reset an existing employee’s password, from the CLI. Both commands are interactive by default and also accept options for non-interactive provisioning (CI, recovery).

php bin/console prestashop:employee:create-admin
php bin/console prestashop:employee:change-password [email protected] --password='S0meStr0ngP@ss!'

prestashop:htaccess:generate

Regenerate the .htaccess file from the CLI without accessing the Back Office. If the file already exists, the command stops unless --force is passed.

php bin/console prestashop:htaccess:generate --force

Behavior Changes

Automatic removal of the install folder

After a successful installation, the installer now removes the install/ folder automatically instead of asking the merchant to delete it manually. Only a folder named exactly install at the project root is targeted: the install-dev/ folder used in development environments is left untouched. If removal fails (permissions, file locks), the failure is logged as a warning and does not break the installation.

Related pull request: Automatically remove install/ folder after a successful installation.

Database Changes

PrestaShop 9.2 includes database schema changes to support new features such as Extra Properties and the improved B2B mode, the extended product condition enum, and feature flag updates.

You can review all database changes in the upgrade SQL file: 9.2.0.sql