使用帖子的标签、摘录和内容向帖子添加元标签

时间:2012-11-06 作者:Amanda Duke

我运行了一个多作者平台,在该平台上,我添加了一些条件,迫使作者将标签添加到他们的帖子中。为了提高SEO,我想在帖子中添加元标签。理想情况下,通过功能或自定义插件提供轻松的解决方案(具有高流量)。

我想添加两个元标记,第一个是description:

<meta name="description" content="Description should be no more than 150 characters" />
对于描述,我想抓取这篇文章的节选,并将其最多剥离到150个字符(包括空格)。如果帖子没有摘录,那么抓取正文的前150个字符(不包括短代码,如果有)。

对于keywords:

<meta name="keywords" content="Keyword, Keyword 2, Keyword 3" />
每个关键字或关键字短语需要用逗号分隔,然后用空格分隔。我想抓住文章的类别和标签,并将其添加到这里。例如,如果我的帖子的类别是Movie, 标签是Oldboy, RevengeSouth Korean - 那么元关键字将是:content="Movie, Oldboy, Revenge, South Korean"

而且,很明显,代码只需要在Post页面上执行。我猜<head> HTML标记远远早于实际循环,因此我需要的不是global $post.

如果您选择回答,请详细说明并在代码中添加注释,以便我能够理解并向您学习。

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

我会远离你的header.php &;将以下内容添加到functions.php 或封装为插件:

add_action( \'wp_head\', \'wpse_71766_seo\' );

/**
 * Add meta description & keywords for single posts.
 */
function wpse_71766_seo()
{
    if ( is_single() && $post_id = get_queried_object_id() ) {

        if ( ! $description = get_post_field( \'post_excerpt\', $post_id ) )
            $description = get_post_field( \'post_content\', $post_id );

        $description = trim( wp_strip_all_tags( $description, true ) );
        $description = substr( $description, 0, 150 );

        $keywords = array();    
        if ( $categories = get_the_category( $post_id ) ) {
            foreach ( $categories as $category )
                $keywords[] = $category->name;
        }

        if ( $tags = get_the_tags( $post_id ) ) {
            foreach ( $tags as $tag )
                $keywords[] = $tag->name;
        }

        if ( $description )
            printf( \'<meta name="description" content="%s" />\' . "\\n\\t", esc_attr( $description ) );
        if ( $keywords )
            printf( \'<meta name="keywords" content="%s" />\' . "\\n\\t", esc_attr( implode( \', \', $keywords ) ) );

    }   
}
这钩住了wp_head 操作(&A);仅当当前查看单个帖子时,才输出所需的meta。

编辑:修复了缺少的两个相等符号。

结束