代码实现自动添加keywords及description

2012年5月5日 | 分类: | 标签: ,

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<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>标签前面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?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 协议. 转载请注明转自: 代码实现自动添加keywords及description
支持本博发展,请勿过滤广告。
  1. 2012年5月5日21:29

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

  2. 2012年5月5日21:41

    @Louis Han
    对喔,这个之前翻译是自定义域,反正我是今天才懂。

  3. 2012年5月5日22:10

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

  4. 2012年5月6日13:48

    对于我们这种在手机更新的人来说,选项太多不行啊

  5. 2012年5月7日22:48

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

  6. 2012年5月7日22:51

    @翔子
    有呀,这给的代码就是这样的,首先用摘要,没有就用自定义域,再没有就前200个字符。

  7. 2012年5月8日23:36

    又是个搞代码的啊。

  8. 2012年5月8日23:38

    @wmtimes
    看见网上的都说用代码好,那就搞个用了。

  9. 2012年5月9日00:35

    All in one seo插件挺方便的,自己写自定义字段来实现keywords和description,挺麻烦的。

  10. 2012年5月11日15:27

    我始终喜欢代码解决一切。
    能不要插件,就不要插件。
    顶你!

  11. 2012年5月14日22:32

    博主你好强大啊!刀下留人亲看看这好吗!
    http://www.mydll.org
    http://www.rabbit8.com

  12. 2012年5月14日23:00

    @bonley
    好吧,让你通过一下,漫画那个站还可以,dll那个还不行。

  13. 2012年5月14日23:44

    @Louis Han 真是在哪里都能见到你啊。

  14. 2012年5月15日10:08

    不错,完美实现,用插件不如用代码

  15. 2012年5月15日10:08

    用插件不如用代码

  16. 2012年5月21日19:56

    省力、傻瓜化,但效果嘛。。

  17. 2012年5月30日13:23

    楼上的你好强大啊
    居然带了两个连接。。
    我发誓 我只带一个
    http://www.aalun.com

  18. 2012年5月31日00:01

    @艾伦网
    怎么你的没有头像呢~

  19. 2012年5月31日00:38

    @臻
    头像我没有去设置! 暂时懒得去弄这个。。
    不过贵站应该有默认头像才对啊

  20. 2012年6月11日13:28

    Keywords可以不用了……上次看到谷歌官方频道上谷歌的开发人员表示谷歌完全考虑,也不计划读取Keyword信息

  21. 2012年6月19日17:04

    用代码挺好,插件多了也不好。

  22. 2012年6月20日15:42

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

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

  23. 2012年7月12日10:39

    自定义字段是相当的神奇哦

  24. 2012年8月28日20:52

    @一戾
    不光是Louis Han 还有 屠龙网赚 .有博客的地方,评论就有他们

  25. 2012年9月12日11:21

    技术贴,按个自定义字段很霸气,谢谢分享

  26. 2012年9月21日15:00

    我也用的相同的方法

  27. 2012年10月7日23:45

    这是个好东东,插件能不用就不用

  28. 2015年4月2日09:24

    支持一下

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。