| Hook | displayProductExtraContent | 
|---|---|
| Locations | FO  | 
| Type | display | 
| Origin | core | 
| Aliases | |
| Description | Adds new field / content to the FO product page | 
| Origin | File | 
|---|---|
| classic | templates/catalog/product.tml | 
| core | src/Core/Product/ProductExtraContent.php | 
| core | src/Core/Product/ProductExtraContentFinder.php | 
protected $hookName = 'displayProductExtraContent';
protected $expectedInstanceClasses = ['PrestaShop\PrestaShop\Core\Product\ProductExtraContent'];
This hook has been implemented as an example in our example-modules repository - demoproductextracontent.
This hook is a little more complicated than the other ones. It renders the provided content on the theme level. By default, it uses Bootstrap tabs to display it:
{foreach from=$product.extraContent item=extra key=extraKey}
    <div class="tab-pane fade in {$extra.attr.class}" id="extra-{$extraKey}" role="tabpanel" {foreach $extra.attr as $key => $val} {$key}="{$val}"{/foreach}>
        {$extra.content nofilter}
    </div>
{/foreach}
In the front office, ProductController fetches all extra content using a ProductExtraContentFinder.
class ProductExtraContentFinder extends HookFinder
{
    protected $hookName = 'displayProductExtraContent';
    protected $expectedInstanceClasses = ['PrestaShop\PrestaShop\Core\Product\ProductExtraContent'];
The ProductExtraContentFinder will look for modules hooked into displayProductExtraContent  with the corresponding existing method, and will expect ProductExtraContent to be returned.
return (new PrestaShop\PrestaShop\Core\Product\ProductExtraContent())
    ->setTitle('example field')
    ->setContent('example content')
This content will be shown in a dedicated tab on the product page:
