西门的后花园

一个热爱网络的年轻人的博客

Typecho 0.9版自定义文章页、独立页面的关键字和描述

20140504更新

刚刚过去的双12,Typecho发布了最新版0.9,时隔3年重新出发,做博客的朋友可以关注一下这个程序。我『主机格调』那边一直都是Typecho,打算升级到最新版,所以就研究了一下关键字和描述。

Typecho 0.8的时候,除了首页,其他页面是无法自定义关键字和描述的。首页的关键字和描述是在后台基本设置里,关键词和站点描述来控制。文章页自动生成这两个标签,关键字是自动调用文章标签,描述是自动调用文章第一段。这个问题一直困扰着我,而Typecho 0.9终于有了自定义字段,所以就琢磨着用这个来手动实现。

在论坛搜到管理员回答自定义字段调用的回复:

用以下代码就可以取到:$field = $this->fields->fieldName;

输出可以用:$this->fields->fieldName();

按照他说的,加上之前我写过WordPress关键字描述的方法,综合如下:

打开主题文件夹里的header.php,编辑,找到

<?php $this->header(); ?>

按照官方文档的说法,我们先把关键字和描述禁掉。所以把上面一段改成

<?php $this->header('keywords=&description='); ?>

下面是本文重点,加代码。切记,这段代码应该加在head标签里面,别加错了。

<?php
if($this->is('index')){
	$keywords = "这里填首页的关键字";
	$description = "这里填首页的描述";
}else{
	if(isset($this->fields->keywords)){
		$keywords = $this->fields->keywords;
	}
	if(isset($this->fields->description)){
		$description = $this->fields->description;
	}
}
?>
<meta name="keywords" content="<?php echo $keywords; ?>" />
<meta name="description" content="<?php echo $description; ?>" />

首页的关键字和描述在上面代码里改即可,文章页和独立页面,需要在编辑文章的时候,在下面“自定义字段”里添加,如下图:

图压得有点厉害,将就着看哈。keywords和description两个不分前后顺序。当然,如果你英文不好,也可以把这2个都换掉,不过也得稍微修改下上面的代码了。

注:因为一开始就把网站自带的关键字和描述给禁掉了,所以首页的需要在代码里填写,后台基本设置里的无效。

20140504更新:

今天正好有个需求,加上评论有网友反馈,所以就又改进了下。

需求是首页的关键字和描述,依旧用后台设置的,其他页面还是默认的。文章页和独立页面,如果设置自定义字段,就用自定义字段,如果没设置,依旧用默认的。因为SEO这东西不能随便改以前文章的关键字和描述,所以这种改动影响是最小的,几乎为零。

<?php
if(($this->is('single') || $this->is('post')) && (isset($this->fields->keywords) || isset($this->fields->description))){
	$this->header('keywords='.$this->fields->keywords.'&description='.$this->fields->description);
} else {
	$this->header();
} ?>

主要改进是官方函数header()里是可以拼接的,直接把自定义字段拼接一下,这样就不需要像我上面那样定义,然后插入link标签了。

评论列表

  1. 沙发?呵呵,先抢在说。

  2. 再来一个板凳,继续关注。

  3. 来个三连发吧,typecho是个不错的博客程序,当初有在用,现在没用,不折腾了,还是wordpress更新比较频繁,功能比较强大些。

  4. 暂时没用到 😀

  5. 一直没搞明白自定义字段会在哪里应用。。

  6. 没用过…有空装个玩玩

  7. 我也在用,0.9出来马上升级了,爱的就是tp的简洁

  8. 😎 😎 感觉keywords不怎么管用了…..

  9. ❗ 感谢分享,学会了哈。

  10. 不错呢,这样有利于SEO

  11. 久闻这个博客程序,一直没有机会试用

  12. 判断用的有点多 不知道会不会影响速度 🙁

  13. psy

    我是搭建在SAE上面,不支持自定义字段~~ ❓

  14. 字段这个东西还是不是很理解,哈哈,暂时没用这个功能~

  15. 相当炫酷啊,我也写了个typecho主题,官方文档真是垃圾,基本没有任何帮助

  16. xifang

    西门,你的网站模板哪里有下载啊?可以发给我一份吗?还有评论的插件

  17. 其实可以更简单就2句代码
    <pre><code>
    <?php
    if ( $this -> is('index') ) {
    $this -> header();
    }
    if ( $this -> is('post') ) {
    $this -> header( 'keywords=' . $this -> fields -> keywords );
    }
    ?>
    </code></pre>
    http://www.blogzhong.com/2014/03/01/1.html

  18. mark一下,马上的新主题考虑靠自定义字段来判断文章类型

  19. 周董

    我想要把首页的副标题跟描述分开设置,应该怎么弄?
    (我不会PHP,求现成代码 😀 )

  20. Turandot

    请教博主,如何在实现这个需求的前提下屏蔽其他不需要的meta呢?屏蔽代码应该怎么加?不会PHP ❓ ❓

  21. <?php $this->header(Content::exportGeneratorRules($this)); ?>
    我用的typecho1.2 handsome主题
    里面的描述和关键词都用这一句调用了
    应该怎么修改

    • 打开主题文件夹里的header.php,编辑,找到

      <?php $this->header(); ?>
      按照官方文档的说法,我们先把关键字和描述禁掉。所以把上面一段改成

      <?php $this->header('keywords=&description='); ?>

      然后把下面这段加在<?php $this->header('keywords=&description='); ?>前面
      <?php
      if(($this->is('single') || $this->is('post')) && (isset($this->fields->keywords) || isset($this->fields->description))){
      $this->header('keywords='.$this->fields->keywords.'&description='.$this->fields->description);
      } else {
      $this->header();
      } ?>

  22. 打开主题文件夹里的header.php,编辑,找到

    <?php $this->header(); ?>
    按照官方文档的说法,我们先把关键字和描述禁掉。所以把上面一段改成

    <?php $this->header('keywords=&description='); ?>

    然后把下面这段加在<?php $this->header('keywords=&description='); ?>前面
    <?php
    if(($this->is('single') || $this->is('post')) && (isset($this->fields->keywords) || isset($this->fields->description))){
    $this->header('keywords='.$this->fields->keywords.'&description='.$this->fields->description);
    } else {
    $this->header();
    } ?>

发表评论

分类目录