Коды для functions.php для настройки SEO (title, description, h1) без плагинов
Ниже приведены готовые решения для вывода SEO-мета-данных (title, description, h1) на главной, в категориях и записях WordPress через файл functions.php.
1. Мета-тег Description для главной, категорий и записей
Добавьте этот код в functions.php вашей темы:
function custom_meta_description() { if (is_front_page()) { // Для главной страницы echo '<meta name="description" content="' . esc_attr(get_bloginfo('description')) . '">' . "\n"; } elseif (is_category()) { // Для категории: берём описание категории $cat = get_queried_object(); $desc = strip_tags(category_description($cat->term_id)); echo '<meta name="description" content="' . esc_attr($desc) . '">' . "\n"; } elseif (is_singular()) { // Для записи или страницы: используем excerpt или первые 160 символов контента global $post; $desc = has_excerpt($post->ID) ? get_the_excerpt($post->ID) : mb_substr(strip_tags($post->post_content), 0, 160, 'UTF-8'); echo '<meta name="description" content="' . esc_attr($desc) . '">' . "\n"; } } add_action('wp_head', 'custom_meta_description');
Этот код автоматически выводит <meta name="description">
на главной, в категориях и в записях, используя описание сайта, описание категории или excerpt/контент записи
.
2. Title (SEO-заголовок) — если нужен особый вывод
WordPress корректно формирует <title>
через функцию wp_get_document_title()
. Если хотите переопределять title через произвольные поля, используйте такой код:
function custom_seo_title() { if (is_singular()) { $custom_title = get_post_meta(get_the_ID(), 'seo_title', true); if ($custom_title) { echo '<title>' . esc_html($custom_title) . '</title>'; return; } } elseif (is_category()) { $cat = get_queried_object(); $custom_title = get_term_meta($cat->term_id, 'seo_title', true); if ($custom_title) { echo '<title>' . esc_html($custom_title) . '</title>'; return; } } elseif (is_front_page()) { echo '<title>' . esc_html(get_bloginfo('name')) . ' - ' . esc_html(get_bloginfo('description')) . '</title>'; return; } // По умолчанию стандартный title echo '<title>' . wp_get_document_title() . '</title>'; } add_action('wp_head', 'custom_seo_title', 1);
Для работы с произвольными полями (seo_title
) их нужно добавить вручную в редакторе записи или категории
.
3. H1 для категорий и записей
В шаблоне (например, archive.php или single.php) используйте:
<?php if (is_category()) { $cat = get_queried_object(); $h1 = get_term_meta($cat->term_id, 'seo_h1', true); echo '<h1>' . ($h1 ? esc_html($h1) : single_cat_title('', false)) . '</h1>'; } elseif (is_singular()) { $h1 = get_post_meta(get_the_ID(), 'seo_h1', true); echo '<h1>' . ($h1 ? esc_html($h1) : get_the_title()) . '</h1>'; } ?>
Для категорий мета-поля (seo_h1
) можно добавить через код в functions.php, используя хуки category_edit_form_fields
и edited_category
.
4. Добавление произвольных полей для категорий (пример)
// Поля в админке категории
add_action('category_edit_form_fields', function($term) { ?> <tr class="form-field"> <th scope="row"><label for="seo_h1">SEO H1</label></th> <td> <input name="seo_h1" id="seo_h1" type="text" value="<?php echo esc_attr(get_term_meta($term->term_id, 'seo_h1', true)); ?>"> <p class="description">SEO H1 для категории</p> </td> </tr> <?php }); add_action('edited_category', function($term_id) { if (isset($_POST['seo_h1'])) { update_term_meta($term_id, 'seo_h1', sanitize_text_field($_POST['seo_h1'])); } });
Этот код добавит поле «SEO H1» в настройках категории в админке
.
Этот код добавит поле «SEO H1» в настройках категории в админке
.
Итог
-
Для description используйте функцию с хуком
wp_head
и условиями для главной, категорий и записей. -
Для title можно использовать аналогичный подход с возможностью задавать произвольные значения.
-
Для H1 используйте произвольные поля и выводите их в шаблоне.
-
Все коды добавляются в functions.php вашей темы.
Результат: SEO-мета-данные (title, description, h1) можно задавать и выводить без плагинов, только средствами WordPress и кастомного кода