Flector

Как автогенерировать тег meta description с обрезкой по словам?

Примеры генерированного description с разной длиной

Для прописывания мета-тега description я крайне рекомендую воспользоваться каким-нибудь SEO-плагином. Однако, если использование SEO-плагинов по каким-то причинам вас не устраивает, то их можно заменить небольшой функцией, которая сгенерирует мета-тег description из указанного числа символов записи. Функция "умная", а поэтому описание не будет обрезано посреди слова.

Добавьте в файл functions.php вашей темы следующий код:

//автогенерирование мета-тега description start
function wph_add_meta_description() {
    global $post;
    if ( is_single() ) {
        $meta = strip_tags($post->post_content);
        $meta = strip_shortcodes($meta);
        $meta = str_replace(array("\n", "\r", "\t"), ' ', $meta);
        $maxlen = 90;
        $len = (mb_strlen($meta) > $maxlen)? mb_strripos(mb_substr($meta, 0, $maxlen), ' ') : $maxlen;
        $cutStr = mb_substr($meta, 0, $len);
        $temp = (mb_strlen($meta) > $maxlen)? $cutStr. '...' : $cutStr;
        echo '<meta name="description" content="' . $temp . '" />' . "\n";
    }
}
add_action('wp_head', 'wph_add_meta_description', 2);
//автогенерирование мета-тега description end

Где '90' это число необходимых символов. Можно оставить себе лазейку для ручного указания мета-тега description с помощью произвольного поля записи:

//автогенерирование мета-тега description start
function wph_add_meta_description() {
    global $post;
    $my_meta = get_post_meta(get_the_ID(), "my_meta", true);
    if ( is_single() ) {
        if (!$my_meta) {
            $meta = strip_tags($post->post_content);
            $meta = strip_shortcodes($post->post_content);
            $meta = str_replace(array("\n", "\r", "\t"), ' ', $meta);
            $maxlen = 90;
            $len = (mb_strlen($meta) > $maxlen)? mb_strripos(mb_substr($meta, 0, $maxlen), ' ') : $maxlen;
            $cutStr = mb_substr($meta, 0, $len);
            $temp = (mb_strlen($meta) > $maxlen)? $cutStr. '...' : $cutStr;
            echo '<meta name="description" content="' . $temp . '" />' . "\n";
        } else {
            echo '<meta name="description" content="' . $my_meta . '" />' . "\n";
        }
    }
}
add_action('wp_head', 'wph_add_meta_description', 2);
//автогенерирование мета-тега description end

Теперь если вы заполните в записи произвольное поле 'my_meta', то в мета-теге description будет выведено именно его содержимое.


Написать комментарий

Для вставки кода воспользуйтесь кнопкой "Код". Используйте предпросмотр!