WordPress使用经验(一)独立的Description 和 Keywords
你下载的WordPress主题提供的keywords和description这两个meta标签一般都做得很差,或者根本就不提供,这样不利于SEO。本文将指导你如何给主页、分类、页面以及文章页添加单独的Description 和 Keywords。
很多人都在用All in One SEO插件解决这个问题,但是又有很多人说这个插件不好。大不了咱就自己用代码实现吧。
下面提供露兜博客设置keywords和description的代码,将以下代码添加至WordPress主题header.php的<head></head>之间,最后用UTF-8编码另存为,否则中文会乱码:
<?php
$description = '';
$keywords = '';
if (is_home() || is_page()) {
// 将以下引号中的内容改成你的主页description
$description = "露兜博客描述";
// 将以下引号中的内容改成你的主页keywords
$keywords = "WordPress, 博客, 编程,php,ludou";
}
elseif (is_single()) {
$description1 = get_post_meta($post->ID, "description", true);
$description2 = str_replace("\n","",mb_strimwidth(strip_tags($post->post_content), 0, 200, "…", 'utf-8'));
// 填写自定义字段description时显示自定义字段的内容,否则使用文章内容前200字作为描述
$description = $description1 ? $description1 : $description2;
// 填写自定义字段keywords时显示自定义字段的内容,否则使用文章tags作为关键词
$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, ', ');
}
}
elseif (is_category()) {
// 分类的description可以到后台 - 文章 -分类目录,修改分类的描述
$description = category_description();
$keywords = single_cat_title('', false);
}
elseif (is_tag()){
// 标签的description可以到后台 - 文章 - 标签,修改标签的描述
$description = tag_description();
$keywords = single_tag_title('', false);
}
$description = trim(strip_tags($description));
$keywords = trim(strip_tags($keywords));
?>
<meta name="description" content="<?php echo $description; ?>" />
<meta name="keywords" content="<?php echo $keywords; ?>" />
以后在写博客文章时只需添加两个自定义栏目(在文章编辑页面下面,没有就点击右上角的显示选项)即可,第一个自定义栏目名称为keywords,栏目值写上这篇文章的关键字。接着再添加第二个自定义栏目,自定义栏目名称为description,后面的栏目值写上这篇日志的描述。自定义栏目用过一次后,以后再写日志只需在下拉框中选择即可。这样每篇文章都有你自定义的keywords和description了,你完全可以抛弃All in One SEO插件了。(如果你嫌自定义字段麻烦,可以添加一个自定义字段面板,录入更简单:详见:WordPress添加自定义字段面板)
主页(home)和页面(page)的description和keywords是用PHP代码直接写的,你可将上面的露兜博客的描述改成你的。
分类(category)页和标签页(tag)的description直接取分类或标签的描述,这个可以根据需要在WordPress管理后台更改,keywords则取分类或标签的名称。如果你想手动给每个分类定义description和keywords,可以将第27-28行代码改成:
if (is_category('音乐')) {
$description = '这里填音乐分类的描述';
$keywords = '这里填音乐分类的关键字,半角逗号隔开';
}
elseif (is_category('电影')) {
$description = '这里填电影分类的描述';
$keywords = '这里填电影分类的关键字,半角逗号隔开';
}
elseif (is_category('戏剧')) {
$description = '这里填戏剧分类的描述';
$keywords = '这里填戏剧分类的关键字,半角逗号隔开';
}
// 多个分类,复制9-12行代码,粘贴到13后面行,类似5-12行,改一下分类名称即可
// 使用UTF-8编码另存为,替换原来的文件,否则可能会乱码
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-exp-1.html
发现用有Portfolio做分类的主题,这个Portfolio分类的category没办法实现效果,不知道如何判断Portfolio分类页,is_category()不成功,兜兜帮忙看看。
@hello 现在18年了,有说不用写这个keywords对seo没多大影响,你怎么看?欢迎到我的www.tearl.club杂货铺留言。
博主你好,我才开始学代码,按照你的方法弄后有重复内容,可以删除吗?我比较小白,不是很了解,请博主指点,非常感谢!!!!
<meta name="description" content="苏堤断桥边,西湖长椅上,对于了解中国传统文化的人来说,在这样的宜人景色中,在这样的繁华都市里,似乎每天都上演着一个又一个纯美的爱情故事,一如白素贞与许仙,一如梁山伯与祝英台。“上有天堂,下有苏杭”这句话我们从小听到大,几百年前,白居易的“江南忆,最忆是杭州”,更是道出了大多数国人心中的“苏杭情结”。" />
<meta name="keywords" content="亚洲,旅游,旅游攻略,杭州西湖,西湖旅游" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="keywords" content=" " />
<meta name="description" content="苏堤断桥边,西湖长椅上,对于了解中国传统文化的人来说,在这样的宜人景色中,在这样的繁华都市里,似乎每天都上演着一个又一个纯美的爱情故事,一如白素贞与许仙,一如梁山伯与祝英台。“上有天堂,下有苏杭”这句话我们从小听到大,几百年前,白居易的“江南忆,最忆是杭州”,更是道出了大多数国人" />
请问,多加一个$description3,下面的$description=怎么判断?
如果$description1多加一个article,分类描述失效
为什么在你的网站逛的时候老是会自动跳到个股免费义诊的广告网页,,是你承接的么,还是浏览器的问题。。。
@Fay030 你的浏览器问题或者被电信运营商劫持了。
@Fay030 试试使用114DNS或者打电话给运营商投诉
太好了,就是要找这个~~~~~
谢谢
楼主,非常感谢能解决描述问题,这个解决了~~
还有个问题,能不能自定义分类目录的title这一块?
分类目录我新建了“电影”,title就是电影,想自定义SEO标题,这个可以实现吗?
受用了 已用效果还不错
请问下 怎么去除keywords的空格,description的换行,自定义的归档页怎么判断,用上了is_archive好像不行,是这个post_type的总归档页,新的post_type的分类页可以用taxonomy_exists判断,但归档页就不知道了。
反馈一个注意事项,有部分人在安装代码后可能会和我一样出现文章页页面空白的问题。
这很可能是因为没有安装、开启PHP的php-mbstring扩展,导致mb_strimwidth()函数无法使用。
如果是VPS:
1.执行yum install php-mbstring
2.修改php.ini文件 `echo ‘extension=mbstring.so’`
#根据自身php安装目录而定(一般默认情况下就是/etc/php.ini)
3.重启Web服务器如果是Apache: httpd -K restart
如果是虚拟主机的话自己就没有权限去更改了。
遇到这种情况只能用其它的方法来替代这个函数了,这个倒也不难,我们重新定义一个截取字符串的函数方法即可,代码如下:
“`
//自定义截断函数
function dm_strimwidth($str ,$start , $width ,$trimmarker ){
$output = preg_replace('/^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$start.'}((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$width.'}).*/s','\1',$str);
return $output.$trimmarker;
}
“`
将函数方法定义好后,在需要的地方直接调用就可以了,代码如下:
“`
echo dm_strimwidth(strip_tags($post->post_content),0,200,'…');
“`
这个函数实现的效果和 mb_strimwidth() 函数实现的效果是一样的,用法也一模一样,假如你的主机不支持 mb_strimwidth() 函数,就可以用以上的方法来替换了。
学到了~~~感谢~~~~
遇到以下报错,请问怎么修改?
因在wp-content/themes/zerif-lite/header.php文件的39行有错误,您对PHP代码的修改已被回滚。请修复并重试。
syntax error, unexpected '$description' (T_VARIABLE)
@Simon header.php文件的39行不知道是什么样的代码
谢谢楼主,这篇文字对我有很大帮助
如果是分类法呢?
例如:taxonomy=collection
这样写吗?
elseif (is_collection()) {
$description = category_description();
}
感谢分享
一直都想用代码方式实现这些,因为不想用插件 all in one seo pack。但是标题后面的 – 却无法去除。