Задача: добавить мета теги description и keywords в заголовок поста на WordPress, без плагинов. В description поместить краткое описание статьи, а в keywords метки (теги) если они имеются у поста.
Не буду банально останавливаться на том зачем эти теги нужны. Отмечу лишь, что по умолчанию WordPress не добавляет эти мета-теги к записи. И при редактировании записи их задать нельзя. Авторы документации ссылаются на то что теги устарели, их использование сомнительно и вообще WordPress «can’t read your mind».
Существует множество SEO плагинов для WordPress которые исправляют ситуацию и добавляют возможность задавать вручную description
и keywords
для каждой записи, но:
- во-первых, нужно стремиться минимизировать количество используемых плагинов с точки зрения «зависимости» и производительности;
- во-вторых, большинство плагинов добавляют лишь дополнительные поля в редактор. А сами значения description и keywords приходится вводить вручную.
Наша же задача, сделать вывод этих мета-тегов автоматически и без дополнительных телодвижений с нашей стороны.
Решение:
Добавьте в header.php
перед вызовом wp_head()
код:
<?php if (is_single() || is_page() ) : if (have_posts() ) : while (have_posts() ) : the_post(); ?> <meta name="description" content="<?php echo cutString(get_the_excerpt(), 140); ?>" /> <meta name="keywords" content="<?php global $post; $tags = wp_get_post_tags($post->ID); foreach ($tags as $tag) { echo $tag->name.", "; } ?>" /> <?php endwhile; endif; elseif (is_home() ): ?> <meta name="description" content="<?php bloginfo('description'); ?>" /> <?php endif; ?>
Алгоритм работы прост: если это запись или страницы добавляем в description краткий анонс статьи, а в keywords теги. Функция get_the_excerpt()
— получает анонс поста и обрезает лишние html теги и изображения. wp_get_post_tags()
— возвращает массив тегов (меток) текущего поста.
cutString()
— простенькая самописная функция которая обрезает строку по словам в пределах заданного количества символов и добавляет ‘…’ в конце. Ее необходимо поместить в funtions.php
. Напоминаю, оптимальная длина title до 70 символов, а Description — до 150 символов. По некоторым данным допускается длина 60-90 символов для title, и 140-190 для description.
Реализация cutString:
function cutString($string, $maxlen) { $len = (mb_strlen($string) > $maxlen)? mb_strripos(mb_substr($string, 0, $maxlen), ' ') : $maxlen; $cutStr = mb_substr($string, 0, $len); return (mb_strlen($string) > $maxlen)? $cutStr.' ...' : $cutStr; }