Typecho具有非常简洁的后台管理界面,自带Markdown编辑器,让写作变得更加简单,作为许多程序员建站的首选,Typecho可谓深受程序员的青睐,另外许多个人博客站长也非常喜欢使用Typecho进行创作。虽然Typecho向来以简洁出名,但其官方的开发文档也是简单到爆,几乎没有过多的说明,以至于许多开发者都是在摸索中前进。Typecho的文章分类页面标题、关键词、描述主要是以分类名称作为页面标题和关键词,分类描述作为网页描述标签内容。这种设置对于百度等搜索引擎非常不友好,对于网站优化人员而言,有时需要对文章分类进行优化,从而使之得到良好的排名,如果仅仅是官方的文章分类设置,无法进行更好的优化工作。因此,需要对Typecho的文章分类进行自定义标题、关键词及描述,遗憾的是安阳seo找遍所有方法均没有实质性的解决方法,于是决定二开Typecho来实现自定义设置文章分类的标题、关键词及描述。
第一步,首先查找用于控制分类设置页面的文件,该文件位于var->Widget->Metas->Category->Edit.php
,打开此文件找到
/** 取出数据 */ $category = $this->request->from('name', 'slug', 'description', 'parent'); $category['slug'] = Common::slugName(empty($category['slug']) ? $category['name'] : $category['slug']); $category['type'] = 'category'; $category['order'] = $this->getMaxOrder('category', $category['parent']) + 1;
替换为
$category = $this->request->from('name', 'seoname', 'seocatkeywords', 'slug', 'description', 'parent'); $category['slug'] = Common::slugName(empty($category['slug']) ? $category['name'] : $category['slug']); $category['type'] = 'category'; $category['order'] = $this->getMaxOrder('category', $category['parent']) + 1;
眼尖的人可以发现增加了seoname和seocatkeywords,这两个一个代表分类seo标题,另一个代表seo分类关键词
接下来我们再找到
/** 分类名称 */ $name = new FormElementText('name', null, null, _t('分类名称') . ' *'); $form->addInput($name);
在其下方添加
/** SEO分类名称 */ $seoname = new FormElementText('seoname', null, null, _t('SEO分类名称') . ' *'); $form->addInput($seoname); /** SEO分类关键词 */ $seocatkeywords = new FormElementText('seocatkeywords', null, null, _t('SEO分类关键词') . ' *'); $form->addInput($seocatkeywords);
找到
if (!$meta) { $this->response->redirect(Common::url('manage-categories.php', $this->options->adminUrl)); } $name->value($meta['name']); $slug->value($meta['slug']); $parent->value($meta['parent']); $description->value($meta['description']); $do->value('update'); $mid->value($meta['mid']); $submit->value(_t('编辑分类')); $_action = 'update'; } else { $do->value('insert'); $submit->value(_t('增加分类')); $_action = 'insert'; }
替换为
if (!$meta) { $this->response->redirect(Common::url('manage-categories.php', $this->options->adminUrl)); } $name->value($meta['name']); $seoname->value($meta['seoname']); $seocatkeywords->value($meta['seocatkeywords']); $slug->value($meta['slug']); $parent->value($meta['parent']); $description->value($meta['description']); $do->value('update'); $mid->value($meta['mid']); $submit->value(_t('编辑分类')); $_action = 'update'; } else { $do->value('insert'); $submit->value(_t('增加分类')); $_action = 'insert'; }
找到
/** 取出数据 */ $category = $this->request->from('name', 'slug', 'description', 'parent'); $category['mid'] = $this->request->mid; $category['slug'] = Common::slugName(empty($category['slug']) ? $category['name'] : $category['slug']); $category['type'] = 'category'; $current = $this->db->fetchRow($this->select()->where('mid = ?', $category['mid'])); if ($current['parent'] != $category['parent']) { $parent = $this->db->fetchRow($this->select()->where('mid = ?', $category['parent'])); if ($parent['mid'] == $category['mid']) { $category['order'] = $parent['order']; $this->update([ 'parent' => $current['parent'], 'order' => $current['order'] ], $this->db->sql()->where('mid = ?', $parent['mid'])); } else { $category['order'] = $this->getMaxOrder('category', $category['parent']) + 1; } }
替换为
/** 取出数据 */ $category = $this->request->from('name', 'seoname', 'seocatkeywords', 'slug', 'description', 'parent'); $category['mid'] = $this->request->mid; $category['slug'] = Common::slugName(empty($category['slug']) ? $category['name'] : $category['slug']); $category['type'] = 'category'; $current = $this->db->fetchRow($this->select()->where('mid = ?', $category['mid'])); if ($current['parent'] != $category['parent']) { $parent = $this->db->fetchRow($this->select()->where('mid = ?', $category['parent'])); if ($parent['mid'] == $category['mid']) { $category['order'] = $parent['order']; $this->update([ 'parent' => $current['parent'], 'order' => $current['order'] ], $this->db->sql()->where('mid = ?', $parent['mid'])); } else { $category['order'] = $this->getMaxOrder('category', $category['parent']) + 1; } }
改好后进行保存并替换掉该文件。
第二步、修改数据库,使用PHPMyadmin打开对应的数据库,点击typecho_metas
表,并切换为结构,在字段name
后添加两个字段分别为seoname和seocatkeywords设置类型选择VARCHAR
、长度150(根据需求自己设置)
、默认选择NULL
、排序规则选择utf8mb4_general_ci
、属性留空
、勾选
空复选框
和调整权限复选框
之后点击保存,最后的样子应该是这样
下面我们一起来测试下成果吧,新建分类你会发现相比之前的表单,增加了 SEO分类标题和SEO分类关键词输入框
当填写好SEO分类标题和SEO分类关键词后,我们来测试下前台的显示结果,可以看到Typecho自定义设置文章分类的标题、关键词及描述的效果已经实现,开心的去优化网站分类吧。
解释说明:
判断页面
<?php if($this->is('index')): ?> 是首页 显示 内容 <?php else: ?> 不是首页显示 内容 <?php endif; ?>
嵌套使用
<?php if($this->is('index')): ?> 是首页 显示 内容 <?php else: ?> <?php if($this->is('category')): ?> 是文章分类显示内容 <?php else: ?> 不是首页和分类显示内容 <?php endif; ?> <?php endif; ?>
各页面判断
/* 判断各个页面,可判断当前页面是否为首页、分类、文章、页面当是的时候显示内容 当不是的时候显示另外的内容 index 首页 article 判断文章归档页 category 判断分类页 tag 判断标签页 date 判断时间页 single 判断内容页 post 判断内容页 page 判断独立页面 attachment 是否为附件 */