末尾有2022-04-21更新内容

情况

  • 原版Typecho的description和keywords标签无法自定义,对SEO不够友好。
  • Handsome版本:8.4.0
  • Typecho版本:1.2.0

操作

修改文章撰写页自定义字段菜单

  • 打开usr/themes/handsome/functions_mine.php文件,在第676行(function themeFields(Typecho_Widget_Helper_Layout $layout)函数内即可)增加如下代码:
$description = new Typecho_Widget_Helper_Form_Element_Text('description', NULL, NULL, _t('描述'), _t('简单一句话描述'));$description->input->setAttribute('class', 'text w-100');
    $layout->addItem($description);
    $keywords = new Typecho_Widget_Helper_Form_Element_Text('keywords', NULL, NULL, _t('关键词'), _t('多个关键词用英文下逗号隔开'));$keywords->input->setAttribute('class', 'text w-100');
    $layout->addItem($keywords);
  • 如图:

1648920391(1).jpg

解释

  • 就是在原来的菜单最前面加上description和keywords两个菜单项

修改修改Typecho内容文章基类的description和keywords来源

  • 打开var/Widget/Archive.php文件,在第1071行($allows = [...]后一行)增加如下代码:
if(!is_null($this->fields->description)){
            $allows['description'] = $this->fields->description;
        }
        if(!is_null($this->fields->keywords)){
            $allows['keywords'] = $this->fields->keywords;
        }
  • 如图:

1648920366(1).jpg

解释

  • 大概原理是如果为空就使用默认的description和keywords标签,不为空就使用文章撰写时设置的标签

完成

  • 现在去刷新即可看到效果

2022-04-21 更新

情况

  1. 经反馈存在首页description和keywords存在问题,会自动获取第一页文章最后一篇文章的description和keywords。
  2. 上一个方法是直接修改的Typecho源码,这次增加个修改Handsome源码的方法。

操作

修复首页description和keywords显示BUG

具体方法

  • 打开var/Widget/Archive.php,在与上文同样的位置将增加的代码改为如下即可:
if(($this->is('index') == False)AND($this->is('tag') == False)AND($this->is('category') == False)){
            if((!is_null($this->fields->description))AND(strcmp($this->fields->description,'') != 0)){
                $allows['description'] = $this->fields->description;
            }
            if((!is_null($this->fields->keywords))AND(strcmp($this->fields->keywords,'') != 0)){
                $allows['keywords'] = $this->fields->keywords;
            }
        }

解释

  • 增加了一个判断语句判断当前页面是否首页/标签/分类,非首页、标签和分类才执行。
  • 再增加了一个判断语句判断description和keywords是否为空字符串,如果是空字符串也使用原方法。

修改Handsome源码的方法

  • 经过简单测试没有问题,实际使用请自测。
  • 已经修复一开始提到的首页BUG。
  • 没加标签和分类判断,参考上面的代码看着加就是了,用AND连接。
  • 参考header.php使用官方文档:自定义头部信息输出 - Typecho Docs

具体方法

  • 打开usr/themes/handsome/component/header.php,找到第54行,也就是<?php $this->header(Content::exportGeneratorRules($this)); ?>这一行,将这一行替换成如下内容:
<?php
        if($this->is('index')){
            $this->header(Content::exportGeneratorRules($this));
        }else{
            $custom_headerb = '';
            if(!is_null($this->fields->description)){
                $custom_headerb .= 'description=';
                $custom_headerb .= $this->fields->description;
            }
            if(!is_null($this->fields->keywords)){
                if(strcmp($custom_headerb,'') == 0){
                    $custom_headerb .= 'keywords=';
                    $custom_headerb .= $this->fields->keywords;
                }else{
                    $custom_headerb .= '&keywords=';
                    $custom_headerb .= $this->fields->keywords;
                }
            }
            if(strcmp($custom_headerb,'') == 0){
                $this->header(Content::exportGeneratorRules($this));
            }else{
                $this->header($custom_headerb);
            }
        }
    ?>

解释

  • 先判断是不是首页,如果是首页就用原方法。
  • 如果不是首页,就分别判断descriptionkeywords是否填写,将他们拼起来。
  • 如果descriptionkeywords都没填写依旧用原方法。
  • 最后送到header()函数中去。
最后修改:2022 年 04 月 21 日
如果觉得我的文章对你有用,请随意赞赏