В OpenCart Version 3.0.2.0 нет отдельного поля H1 для категорий.
Так как сеошники хотят отдельные заголовки для:
, приходится добавлять дополнительные, кастомные поля в стандартный OpenCart.
Часть 1 - создание поля в админке
Создаем дополнительное поле в таблице oc_category_description
ALTER TABLE `oc_category_description` ADD `seo_h1` TEXT NOT NULL AFTER `meta_keyword`;
Добавляем input в админку opencart. Добавляем не много HTML в файл: \admin\view\template\catalog\category_form.twig
# в любое место, мы поместили в 80 строку
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-keyword-{{language.language_id }}">{{ entry_seo_h1 }}</label>
<div class="col-sm-10">
<textarea name="category_description[{{ language.language_id }}][seo_h1]" rows="5" placeholder="{{ entry_seo_h1 }}" id="input-meta-keyword-{{language.language_id }}" class="form-control">{{ category_description[language.language_id] ? category_description[language.language_id].seo_h1 }}</textarea>
</div>
</div>
Добавляем в ленгвич файл заголовок для инпута \admin\language\ru-ru\catalog\category.php
# в любое место, мы поместили в 72 строку
$_['entry_seo_h1'] = 'SEO H1';
Добавляем в модель нашу новую переменную, так чтобы она могла выводиться и сохраняться: \admin\model\catalog\category.php
#13 строка
, seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'
#271 строка
'seo_h1' => $result['seo_h1'],
#71 строка
, seo_h1 = '" . $this->db->escape($value['seo_h1']) . "'
Часть 2 - вывод поля на сайте
Сначала добавим нашу новую переменную в контроллер, для того чтобы он ее передавал на фронт, в файл category.twig, для этого поправим файл: \catalog\controller\product\category.php
# 98 строка
$data['seo_h1'] = $category_info['seo_h1'];
Теперь укажем где будет выводиться наше новое поле, файл: \catalog\view\theme\default\template\product\category.twig
# в любое место
<h1>{{ seo_h1 }}</h1>