山仔's blog山仔's blog

代码实现自动添加keywords及description

今天终于下定决心抛弃了All in one seo插件,全部改用代码实现了自动添加keywords及description,不知道谁说的,能用代码实现的决不用插件。正因如此,花了我一下午的时间终于搞掂了,包括博客标题也优化了。在网上看了很多文章教程,基本满足一个需求却不能满足另外的需求,集合各方所长和请教高人之后,得出自己的代码,下面分享给大家。

首先是博客标题的优化,将代码添加到主题模板header.php里面,替换原来的<title></title>标签。

<title><?php
    // 如果是文章详细页面和独立页面, 显示文章标题
     if(is_single() || is_page()) {
        wp_title( '-', true, 'right' );

    // 如果是类目页面, 显示类目表述
    } else if(is_category()) {
        printf('%1$s 分类的文章存档 - ', single_cat_title('', false) );

    // 如果是标签页面, 显示标签表述
    } else if(is_tag()) {
        printf('%1$s 标签的文章存档 - ', single_tag_title('', false) );

    // 如果是搜索页面, 显示搜索表述
    } else if(is_search()) {
        printf('%1$s 的搜索结果', wp_specialchars($s, 1));

    // 如果是日期页面, 显示日期范围描述
    } else if(is_date()) {
        $title = '';
        if(is_day()) {
            $title = get_the_time('Y年n月j日');
        } else if(is_year()) {
            $title = get_the_time('Y年');
        } else {
            $title = get_the_time('Y年n月');
        }
        printf('%1$s 的文章存档 - ', $title);

    } else if(is_404()) {
        echo "404错误页面 - ";
    } 
    // 添加博客名.
    bloginfo('name');
    // 在首页添加博客描述.
    $site_description = get_bloginfo( 'description', 'display' );
    if ( $site_description && ( is_home() || is_front_page() ) )
        echo " - $site_description";
    // Add a page number if necessary:
    if ( $paged >= 2 || $page >= 2 )
        echo ' - ' . sprintf( __( 'Page %s', 'hillboy' ), max( $paged, $page ) );
    ?></title>

我设置的是“标题 - 网站名”这样的方式,所以你会看见标题后面都有“空格-空格”,这个请自行按需设置。

再来就是自动添加关键词及description,这个可是花了我很长时间才搞掂的,将代码添加到主题模板header.php里的</head>标签前面。

<?php
if ( is_home() ) {
    $description = "好明显,呢个只不过系一个普普通通的个人博客,得闲写下个人日记,同埋一D闲杂野,对一D野既睇法观后感咁咯.";
    $keywords = "山仔,博客,山仔博客,hillboy,blog,日记,杂谈,观后感,资讯";
}
// 分类和标签页面使用描述(后台分类目录中设置)作为description,使用名字作为keywords。
elseif ( is_category() || is_tag() ) {
    $description = is_category() ? category_description() : tag_description();
    $description = substr( strip_tags($description) ,0,-1 );
    $keywords = single_cat_title(”, false);
}
// 文章和页面使用摘要作为description,没有的话就使用自定义字段的内容,否则使用内容前220个字符作为description。
elseif ( is_single() || is_page() ) {
    if ( $post->post_excerpt ) {
        $description = strip_tags($post->post_excerpt);
    } else {
        $description1 = get_post_meta($post->ID, "description", true);
        $description2 = mb_strimwidth( strip_tags( apply_filters( 'the_content', $post->post_content ) ), 0, 220 );
        $description = $description1 ? $description1 : $description2;
    }
    // 填写自定义字段keywords时显示自定义字段的内容,否则使用文章tags作为keywords
    $keywords = get_post_meta($post->ID, "keywords", true);
    if($keywords == '') {
        $tags = wp_get_post_tags($post->ID);    
        foreach ($tags as $tag ) {        
        $keywords = $keywords . $tag->name . ",";    
        }
        $keywords = rtrim($keywords, ',');
    }
}
?>
// 输出description和keywords
<meta name="description" content="<?php echo $description; ?>" />
<meta name="keywords" content="<?php echo $keywords; ?>" />
// 判断是什么页面输出搜索引擎抓取信息
<?php if ( is_single() || is_page() || is_home()&&!is_paged() ) { ?>
<meta name="robots" content="index,follow" />
<?php } else { ?>
<meta name="robots" content="noindex,follow" />
<?php }; ?>

补充一下,自定义字段的意思就是你编辑文章或页面的时候里面的那个自定义栏目,将设置的字段值填好,这样就可以直接调用,等于自定义description和keywords了,如图:
自定义栏目
至此大功告成,不懂的话不要问我,因为我也是不懂的,只是这里抄点那里抄点集合而成,然后大概看得明白是什么意思,但具体这个语句表示什么我就不懂了。

2012.5.8  修复摘要输入代码

本文遵循 BY-NC-SA 3.0 协议. 转载请注明转自 | 当前页面:山仔's blog » 代码实现自动添加keywords及description

评论 28

  1. 又是自定义域的完美应用啊

    Louis Han 2012-05-05    回复
  2. @Louis Han
    对喔,这个之前翻译是自定义域,反正我是今天才懂。

    2012-05-05    回复
  3. 嘿嘿,我也是刚刚从网上学习然后改的keywords及description。
    但是,直到现在才知道有自定义区域,学习了。

    黑米粥 2012-05-05    回复
  4. 对于我们这种在手机更新的人来说,选项太多不行啊

    up 2012-05-06    回复
  5. 其实描述可以用摘要,或者截取文章前200个字符,用自定义域反而将问题复杂化了,
    还有关键词可以抓取tag

    翔子 2012-05-07    回复
  6. @翔子
    有呀,这给的代码就是这样的,首先用摘要,没有就用自定义域,再没有就前200个字符。

    2012-05-07    回复
  7. 又是个搞代码的啊。

    wmtimes 2012-05-08    回复
  8. @wmtimes
    看见网上的都说用代码好,那就搞个用了。

    2012-05-08    回复
  9. All in one seo插件挺方便的,自己写自定义字段来实现keywords和description,挺麻烦的。

    新号外 2012-05-09    回复
  10. 我始终喜欢代码解决一切。
    能不要插件,就不要插件。
    顶你!

    Gang 2012-05-11    回复
  11. 博主你好强大啊!刀下留人亲看看这好吗!
    http://www.mydll.org
    http://www.rabbit8.com

    bonley 2012-05-14    回复
  12. @bonley
    好吧,让你通过一下,漫画那个站还可以,dll那个还不行。

    2012-05-14    回复
  13. @Louis Han 真是在哪里都能见到你啊。

    一戾 2012-05-14    回复
  14. 不错,完美实现,用插件不如用代码

    屠龙 2012-05-15    回复
  15. 用插件不如用代码

    屠龙 2012-05-15    回复
  16. 省力、傻瓜化,但效果嘛。。

    Firm 2012-05-21    回复
  17. 楼上的你好强大啊
    居然带了两个连接。。
    我发誓 我只带一个
    http://www.aalun.com

    艾伦网 2012-05-30    回复
  18. @艾伦网
    怎么你的没有头像呢~

    2012-05-31    回复
  19. @臻
    头像我没有去设置! 暂时懒得去弄这个。。
    不过贵站应该有默认头像才对啊

    艾伦网 2012-05-31    回复
  20. Keywords可以不用了……上次看到谷歌官方频道上谷歌的开发人员表示谷歌完全考虑,也不计划读取Keyword信息

    热狗狗 2012-06-11    回复