Как сделать мета-теги для категорий Woocommerce с помощью ACF

Для чего это вообще нужно?

Как вы уже наверняка знаете, мета-теги нужны для SEO-продвижения, и если вы пишите свою тему на WordPress или дорабатываете какую-то чужую, то у вас есть два варианта добавить теги. Либо плагином, либо самому подключить поля для мета-тегов на нужные страницы.

Чаще всего я вижу на клиентских сайтах плагины Yast SEO и All in One SEO Pack. На мой взгляд, они добавляют ненужный функционал, часть которого я и так добавляю вставкой заготовленного кода в functions.php. Тем более я хочу также влиять на последний узел в хлебных крошках.

Приведу пример:

  • Title: "Купить расширительный бак для отопления в Москве"
  • Заголовок H1: "Расширительные баки для отопления"
  • Хлебные крошки: "_Бренд_ / Расширительные баки / для отопления"

Согласитесь, смотрелось бы не очень красиво, если бы я подргужал в хлебные крошки заголовок, как это делают большинство плагинов.

Поэтому я предпочитаю самостоятельно добавить поля для мета-тегов через Advanced Custom Fields. Установка описана здесь - (Установка Advanced Custom Fields).

Для этого нужно:

  1. Добавить группу полей
  2. Добавить вывод полей в шаблоне

Добавить поля ACF для мета тегов на карточки товаров и категории

В админке на вкладке "Группы полей" добавьте следующие поля.

типы полей ACF
На скриншоте пример моих полей. Достаточно при создании указать Ярлык, Имя, Тип.

И выбрать Условия отображения:

Условия показа ACF для Woocommerce
"Категории" находятся в "Формы -> Таксономия"

В итоге поля должны появиться в админке в том числе на страницах Категорий и Товаров.

Вывод полей ACF на странице категории товаров woocommerce

Добавляем вывод полей ACF в шаблон

В Title я использую следующую логику. Сначала для данной страницы проверяется, существует ли тайтл из поля категории. Если его нет, то происходит поиск поля со страницы/записи, если его нет, то подставляется Заголовок страницы.

В шаблон это нужно вставить в файл header.php перед тегом title:

$queried_object = get_queried_object(); 
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;

Внутрь тега title:

if( get_field( 'wc_title', $taxonomy . '_' . $term_id ) ) {
  the_field( 'wc_title', $taxonomy . '_' . $term_id );
} elseif ( get_field('wc_title') ) {
  the_field( 'wc_title' );
} else {
  wp_title( '',true );
}

Для description и keywords такая же логика, только мы не подгружаем туда заголовок. Вообще keywords можно не делать, так как он в ранжировании поисковиками не участвует, но это другая история.

if( get_field( 'wc_description', $taxonomy . '_' . $term_id ) ) {
  the_field( 'wc_description', $taxonomy . '_' . $term_id );
} else {
  the_field( 'wc_description' );
}

Keywords:

if( get_field( 'wc_keywords', $taxonomy . '_' . $term_id ) ) { 
  the_field( 'wc_keywords', $taxonomy . '_' . $term_id);
} else {
  the_field( 'wc_keywords' );
}

© 2016 — 2020. При копировании материалов обязательна активная индексируемая ссылка на источник.