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.
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:
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.
@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.
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 developersThe module developer guide covers the new actionCheckoutBuildProcess hook and payment and carrier compatibility. The theme developer guide covers the template, DOM, and styling contract.
You can read the project discussion and share feedback here: One Page Checkout.
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.
Related pull requests: Improved B2B feature flag, B2B foundation.
The product condition enum has been extended with three new values, in addition to the existing new, used, and refurbished:
open_boxdamagednew_with_defectsModules 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.
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:
config/services.phpconfig/services-{major}.{minor}.yml (for example services-9.2.yml)config/services-{major}.yml (for example services-9.yml)config/services.ymlThis 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.
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.
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 |
If your module modifies one of these pages through grid or form hooks, test it against the migrated version.
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). |
PrestaShop 9.2 adds several Symfony console commands. See the console commands reference for the full 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
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!'
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
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.
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