我运行了一个多作者平台,在该平台上,我添加了一些条件,迫使作者将标签添加到他们的帖子中。为了提高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
,
Revenge
和
South Korean
- 那么元关键字将是:
content="Movie, Oldboy, Revenge, South Korean"
而且,很明显,代码只需要在Post页面上执行。我猜<head>
HTML标记远远早于实际循环,因此我需要的不是global $post
.
如果您选择回答,请详细说明并在代码中添加注释,以便我能够理解并向您学习。
最合适的回答,由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。
编辑:修复了缺少的两个相等符号。