域名将于6月份到期,并且不再续费,届时网站将无法访问。
6月份之前如果服务器到期将提前关闭网站,请改访问模组网社区

WordPress 中自定义 description 和 keywords

玩 WordPress 的应该都会研究 meta 中 description 和 keywords 的定义方式,也就是经常提到的 SEO 中的一个小细节……我个人觉得这里面没有什么特别的目的,只是百度对 WordPress 的抓取太不给力了。然后有些人会选择安装 All in one seo pack 或者类似的 SEO 插件,不过插件总会导致 WordPress 变慢(每次你想装插件时别人总会这么跟你说 = =),玩到最后又会选择放弃插件,并且又到处找寻替代方法。

于是,国内的主题现在几乎都是有自定义 description 和 keywords 的功能的……这么做还有一个好处:作者可以说“针对SEO做了优化”,虽然只是增加了自定义 description 和 keywords 的功能。= =

下面这个方法应该算是最常见的了,在 header.php 添加一下代码:

<?if (is_home()){
     $description = "这边自己定义博客的描述";
     $keywords = "这边自己定义博客的关键词";
} elseif (is_single()){
     if ($post->post_excerpt) {
         $description     = $post->post_excerpt;
     } else {
         $description = substr(strip_tags($post->post_content),0,220);
     }
    $keywords = "";
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
        $keywords = $keywords . $tag->name . ", ";
    }
}
?>
<meta name="keywords" content="<?=$keywords?>" />
<meta name="description" content="<?=$description?>" />

如果是首页的话,description 和 keywords 是用户自己定义的内容。
如果是文章/页面的话,keywords 是文章的标签。description 则从两个方面提取:如果存在文章摘要,则直接使用,如果不存在文章摘要,则截取文章前200个字符。

Mossight 主题更新到 2.1.0 的时候更新了 description 和 keywords 的实现方式,会比上面的方式更完善,但把“文章摘要当作 description”的功能去掉了,所以我就自己修改了一下(其实只是增加了“文章摘要当作 description”的功能)。

下面分享一下我现在正在使用的版本:

找到主题的功能函数文件 functions.php,在 <?php 后面添加

function get_the_description() {
     global $post;

     if (is_home() || is_page()){
          $description = "这边自己定义博客的描述";
     }
     elseif (is_single()) {
         if ($post->post_excerpt) {
             $description  = $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, 200, "……");
             $description = $description1 ? $description1 : $description2;
         }
     }
     elseif (is_category()) {
         $description = category_description();
     }
     elseif (is_tag()){
         $description = tag_description();
     }
         $description_r = explode("\n",trim(strip_tags($description)));
     echo $description_r['0']; }

function get_the_keywords() {
     global $post;

     if (is_home() || is_page()){
          $keywords = "这边自己定义博客的关键词";
      }
     elseif (is_single()) {
         $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()) {
         $keywords = single_cat_title('', false);
     }
     elseif (is_tag()){
         $keywords = single_tag_title('', false);
     }

     $keywords = trim(strip_tags($keywords));
     echo $keywords;
 }

然后在 header.php 找个位置(通常在title后面)添加

<meta name="description" content="<?php get_the_description() ?>" />
<meta name="keywords" content="<?php get_the_keywords() ?>" />

这样子处理后:

  • 如果是首页/页面的话,description 和 keywords 是用户自己定义的内容。
  • 如果是文章页的话,description 先看看是否存在 文章摘要 ,有的话直接调用,没有的话再看看是否存在自定义栏目 description ,有的话调用,没有的话该截取文章前200个字符。keywords 则先看下是否存在自定义栏目 keywords ,没有的话使用文章的标签。
  • 如果是分类目录页面,description 是分类目录的描述,keywords 是分类目录的名称。
  • 如果是标签页面,description 是标签的描述,keywords 是标签的名称。

这以后,用户只要:

  • 完善分类目录的名称和描述;
  • 完善标签的名称和描述;
  • 写文章时,通过填写摘要来实现定义 description meta;
  • 写文章时,通过自定义栏目 description 来定义 description meta;
  • 写文章时,通过填写文章标签来定义 keywords meta;
  • 写文章时,通过自定义栏目 keywords 来定义 keywords meta;

因为现在大部分搜索引擎都无视 keywords 了,所以我们只要继续保留之前填写标签的习惯,至于通过自定义栏目设置 keywords 则可以完全无视。

icedream

About icedream

其实我知道的东西很少,只是翻译了一些东西,悲催的是翻译过后很快就忘了。

,

One Response to WordPress 中自定义 description 和 keywords

  1. Reuel 2012 年 12 月 18 日 at 上午 7:30 #

    要是还能判断出作者页面就好啦。