Custom Category H1: setup and help
Quick start
- Upload and install the mprcustomcategoryh1 ZIP in Module Manager.
- Click Configure and open Configuration. Keep Enable set to Yes.
- Open Category Headings and click Add category heading.
- Choose the intended shop context and select one or more existing storefront categories under Category.
- Enter Custom H1 for the required languages, set Active to Yes and click Save.
- Open a selected category page and confirm the visible heading; check the original category name in Catalog > Categories.
- Test another language, pagination and an AJAX listing refresh if your theme uses one.
Requires PrestaShop 1.6 or later and PHP 7.1 or later.
Setup manual
Install and first configuration
Follow the steps in Quick start.
Create a heading
Open Custom Category H1 > Category Headings. Click Add category heading. In Category, select one or more categories. The selector supports specific categories, condition groups and exclusions. A new form starts with nothing selected. Root categories cannot be selected because they do not render ordinary storefront category pages.
Enter Custom H1 in each required language. The stored field is limited to 255 characters. Set Active to Yes and save. One override can assign the same text or pattern to multiple categories. A category cannot have two assignments in the same shop context. If the editor reports an existing assignment, edit that override instead.
You can also open Catalog > Categories and use Custom H1 heading on the category edit form. When a category belongs to a shared override, editing it here detaches only that category. The other categories retain their shared assignment. Empty values can still resolve through the enabled language, shop or parent fallbacks.
Configure replacement
Open Configuration. Settings are organized into four tabs. Defaults below are installed values; an existing shop can have different saved values.
General
| Setting | Default | What to change |
|---|---|---|
| Enable | Yes | Set No to stop custom heading replacement. |
Back office
| Setting | Default | What to change |
|---|---|---|
| Show field on category edit page | Yes | Set No to hide the extra field on native category forms while using Category Headings for management. |
Front office
| Setting | Default | What it does |
|---|---|---|
| Replace category name on category page | Yes | Replaces the displayed category name. Keep enabled for stock themes. Disable only if your custom theme uses the supplied mpr_custom_h1 heading directly. |
| Apply to product-listing label | Yes | Updates the product search label for themes and AJAX flows that use it. |
| Fallback to default language | Yes | If the requested translation is empty, try the default language, then any nonempty translation on that override. Disable when untranslated headings should not borrow another language. |
| Fallback to all-shops override | Yes | Use an all-shops assignment when no current-shop row exists. An existing shop row takes precedence even if inactive or empty. |
| Fallback to parent category override | No | Try the nearest applicable ancestor when no heading resolves for this category. Enable only if inherited headings are intended. |
| Append page number automatically | No | On later pages, append a space and - Page N unless the pattern already includes {page} or {page_label}. |
| Heading tag hint | h1 | Exposes mpr_custom_h1_tag as h1, h2, h3 or span for custom templates. It does not rewrite the theme's HTML tag. |
Safety
| Setting | Default | What to change |
|---|---|---|
| Strip HTML from custom H1 values | Yes | Removes pasted tags when normalizing text. Keep enabled for plain heading content. |
| Normalize whitespace | Yes | Collapses repeated spaces and line breaks. Keep enabled unless you need to preserve stored whitespace. |
Save after changing settings. The module stores headings in mprcustomcategoryh1_override, mprcustomcategoryh1_override_lang and mprcustomcategoryh1_override_category, using your database prefix. It does not update native category names in the database.
Use dynamic text
| Placeholder | Value |
|---|---|
{category_name} |
Current category's original name |
{nb_products} |
Product count supplied in the hooked category/listing data; it can be empty if that data is unavailable |
{page} |
Page number above page 1, otherwise empty |
{page_label} |
- Page N above page 1, otherwise empty; the Page label is translated |
{shop_name} |
Current shop name |
{lang} |
Uppercase language ISO code |
Examples:
Buy {category_name} Online
{category_name} - {nb_products} Products
{category_name} {page_label}
{category_name} for {shop_name}
{category_name} - {lang}
With category name Shower Trays, {category_name} {page_label} gives Shower Trays - Page 3 on page 3. On the first page, whitespace normalization removes the trailing space. Include the space before {page_label} yourself.
Check storefront output
The module replaces category headings and product-listing labels on the server. It does not replace headings through JavaScript. Your theme must display the category heading or listing label supplied by the module.
The original category name remains saved. After enabling replacement, review menus, breadcrumbs and other theme locations: custom templates that reuse the category heading can also show the replacement.
For a custom theme, a developer can use the supplied variables directly:
{if isset($category.mpr_custom_h1) && $category.mpr_custom_h1}
<{$category.mpr_custom_h1_tag|default:'h1'}>{$category.mpr_custom_h1|escape:'html':'UTF-8'}</{$category.mpr_custom_h1_tag|default:'h1'}>
{else}
<h1>{$category.name|escape:'html':'UTF-8'}</h1>
{/if}
This module does not edit meta titles, meta descriptions, URLs, canonical tags or category descriptions.
Troubleshoot
If the normal name remains, check Enable, the override's Active state, category selection, current shop, translation and fallback settings. For a stock theme, keep Replace category name on category page enabled. Check other modules that also change category output.
If the heading changes after filtering, check Apply to product-listing label and the theme's AJAX templates. If a heading repeats across child categories, review Fallback to parent category override. If a translation unexpectedly uses another language, review Fallback to default language.
Use Integrity for module setup checks. Configuration, License, Support and Update are separate module admin pages.
Disable or uninstall
Set Enable to No to stop replacement, or set an override's Active switch to No for a narrower change. You can delete an assignment from Category Headings. Fallback rules can still supply another heading.
Use Uninstall in Module Manager to remove the module. Its uninstall removes its schema tables, configuration and admin menu. Save a database copy of your heading assignments first if you need to retain them. Native category names remain available after removal.
Questions
No questions about this module yet
Ask anything about installation, compatibility or setup. Answers appear here.
Known Issues
7
Page suffix stayed in English
Protected packages could not be installed
Administration labels stayed in English
Module could not load on PHP 7.1
Untouched selectors could target every category
Multiple category selection did not work
Category selection rules were not respected
Feature Requests
6
Implemented
Independent category headings
Grouped category assignments
Heading placeholders
Heading on the category form
One-click updates and release history
Multilingual administration
Changelog
v1.3.182026-09-21
- AddedRun integrity snapshot on install
- AddedSplit direct category H1 overrides
- AddedRelease support service workspace
- AddedShip updater release history UI
- AddedStore category H1 as grouped assignments
- Addedcomplete FR/DE/ES/IT/PL translations
- ImprovedUse shared additional form field component
- FixedSync entity selector package
- FixedRelease category form compatibility
- FixedKeep clean install integrity state green
- FixedComplete install integrity verification
Demo
Test the full module
- Ready demo shop Explore a ready demo shop in your browser.
- No registration No account, email or store domain needed.
By opening this demo you accept the demo terms and the privacy policy.