Добавление метатегов в секцию head через functions.php

2 февр. 2018 г., 23:45:25
Просмотры: 47.1K
Голосов: 17

У меня есть собственная тема, которую я разработал - это по сути 4-страничный сайт-брошюра для клиента. Мне удалось избавиться от нескольких плагинов, создав собственные типы записей, настроив gzip-сжатие через .htaccess и минификацию через gulp и т.д.

Я оставлю плагин безопасности на сайте, но хотел бы убрать Yoast, так как единственная его польза, учитывая насколько оптимизирован сайт, заключается в том, что он позволяет добавлять meta теги и сниппеты для каждой страницы в целях SEO.

Существует ли функция, которую можно добавить в файл functions.php, чтобы добавлять <meta> теги на разные страницы по их ID?

Когда ищешь информацию по этой теме в Google, находятся только статьи про плагины или общая информация о мета-тегах в WordPress.

Буду благодарен за любую помощь.

Павел.

0
Все ответы на вопрос 3
1
30

Хук, который вам нужен, это конкретно wp_head, который может выглядеть примерно так:

function theme_xyz_header_metadata() {
    
    // Объект поста, если нужен
    // global $post;
    
    // Условие для страницы, если нужно
    // if( is_page() ){}
    
  ?>
    
    <meta name="abc" content="xyz" />
    
  <?php
    
}
add_action( 'wp_head', 'theme_xyz_header_metadata' );

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

2 февр. 2018 г. 23:51:53
Комментарии

Я думаю, Yoast не позволяет добавлять несколько мета-тегов бесплатно

Imad Imad
28 янв. 2022 г. 05:53:22
0

SEO своими руками:

1: В редакторе записи/страницы для страницы или записи: Добавьте пользовательские поля (метаданные) с необходимыми значениями для ваших SEO-метатегов.

  • Например, откройте страницу "Условия и положения" в редакторе страниц и добавьте пользовательское поле "my_noindex" со значением "y".
  • Примечание: если поле для пользовательских полей не отображается под редактором, нажмите на выпадающий список "Параметры отображения" в верхней части страницы, а затем отметьте галочкой пункт "Пользовательские поля".

2: В functions.php (или лучше в вашем собственном плагине site_functions, независимом от темы): Добавьте свою SEO-функцию (которая будет вызываться через wp_head), берущую эти значения для текущей страницы и вставляющую их в HTML <head>.

// выводим тег noindex, если запись или страница имеет пользовательское поле "my_noindex" со значением "y"|"Y"|"yes" ...
function my_meta_tags() {
   $noindex = (get_post_meta( get_queried_object_id(), 'my_noindex', true ));
   if (strtolower(substr($noindex,0,1)) == 'y') { 
     ?><meta name="robots" content="noindex" />
     <?php return; // noindex, поэтому нет смысла делать другие SEO-действия
   }

   // другие SEO-действия

}
add_action( 'wp_head', 'my_meta_tags', 2);

Статья Джеффа Старра о создании собственного SEO-кода (включая title и description) может помочь. Она требует наличия пользовательской/дочерней темы, так как код размещается в header.php, однако большую часть кода можно адаптировать для функции my_meta_tags, приведённой выше. Возможно, она не реализует SEO именно так, как вам нужно, но в этом и прелесть DIY: если вы хотите использовать тщательно составленное описание из пользовательского поля (при его наличии), иначе - пользовательский отрывок, иначе - первые n символов описания, вы можете написать соответствующий код. Я тоже собирался написать статью на эту тему - если успею, добавлю ссылку.

Пропуски в коде статьи:

  • Предотвращение дублирования title-тегов (так как некоторые темы добавляют свои). Современные, правильно разработанные темы должны позволять вам удалять title-тег темы при добавлении следующего кода в functions.php вашего сайта.

    function my_remove_stuff() {
      remove_theme_support( 'title-tag' ); 
    }
    add_action('after_setup_theme', 'my_remove_stuff', 15);
    
  • Канонические теги. Добавьте следующее в первую функцию выше:

    // если запись или страница имеет пользовательское поле "my_canon"
    $my_canon = get_post_meta( get_queried_object_id(), 'my_canon', true );
    if ( ! empty($my_canon)) :
       echo '<link rel="canonical" href="' . $my_canon . '" />';
       remove_action('wp_head', 'rel_canonical'); // предотвращает вставку канонического тега WordPress - нам не нужно два
    endif;
    

SEO-плагин - правильный выбор для многих пользователей. Однако если вам комфортно писать собственный код, это даёт множество преимуществ: избегание раздувания кода, избегание зависимости от плагина, избегание (в некоторых случаях) оплаты поддержки, SEO работает именно так, как вы хотите; отсутствие конфликтов SEO с вашими собственными динамическими пользовательскими страницами и т.д.

3 февр. 2018 г. 03:29:05
0
-1

Вы можете добавить мета-теги непосредственно в файл functions.php вашей темы WordPress, подключившись к действию wp_head. Вот как можно добавить пользовательские мета-теги для разных страниц, используя их ID:

Добавьте этот код в файл functions.php вашей темы:

function custom_meta_tags() {
    if (is_page()) {
        global $post;
        $page_id = $post->ID;

        switch ($page_id) {
            case 2: // Замените на реальный ID страницы
                echo '<meta name="description" content="Описание для Страницы 2">';
                echo '<meta name="keywords" content="ключевое1, ключевое2, ключевое3">';
                break;
            case 5: // Замените на реальный ID страницы
                echo '<meta name="description" content="Описание для Страницы 5">';
                echo '<meta name="keywords" content="ключевое4, ключевое5, ключевое6">';
                break;
            // Добавьте больше условий по мере необходимости
            default:
                echo '<meta name="description" content="Описание по умолчанию">';
                echo '<meta name="keywords" content="ключевые, слова, по умолчанию">';
                break;
        }
    }
}
add_action('wp_head', 'custom_meta_tags');
3 февр. 2018 г. 12:14:10