山仔'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. 用代码挺好,插件多了也不好。

    朵未 2012-06-19    回复
  2. 个人感觉用插件和在模版里加代码的话对效率没什么影响啊,反正该跑跑的东西都得跑,现在机器的配置应该察觉不到其中的差异了吧,用插件反而更省事点。

    貌似楼主是属于有代码洁癖的人啊。

    Popptise 2012-06-20    回复
  3. 自定义字段是相当的神奇哦

    集趣 2012-07-12    回复
  4. @一戾
    不光是Louis Han 还有 屠龙网赚 .有博客的地方,评论就有他们

    潜行者m 2012-08-28    回复
  5. 技术贴,按个自定义字段很霸气,谢谢分享

    锻铜雕塑 2012-09-12    回复
  6. 我也用的相同的方法

    互联网宝藏 2012-09-21    回复
  7. 这是个好东东,插件能不用就不用

    coach purses 2012-10-07    回复
  8. 支持一下

    起重机车轮 2015-04-02    回复