Axiu Blog
s博客,默认分类目录都是 `axiu.me/category/cat-name` 这样的结构。并且在后台的固定链接里,只能修改category为想要的内容,例如cate、cat等,但是无法删除。这可让我不知道怎么整。 问了问zww大叔,他说我目前使用的文章固定链接和目录结构不太好。逻辑结构上,`category/cat-name`并不简单直观。例如我博客设
在用网站管理工具的时候,遇到这样一个问题:抓取不到(404)页面暴增。按照谷歌的罗列挨个看来,最多出现的是“`axiu.me/cat-name/page/2`”(cat-name为分类的名称)这样的结构。但是据我所知,所有的wordpress博客,默认分类目录都是 `axiu.me/category/cat-name` 这样的结构。并且在后台的固定链接里,只能修改category为想要的内容,例如
在用网站管理工具的时候,遇到这样一个问题:抓取不到(404)页面暴增。按照谷歌的罗列挨个看来,最多出现的是“`axiu.me/cat-name/page/2`”(cat-name为分类的名称)这样的结构。但是据我所知,所有的wordpress博客,默认分类目录都是 `axiu.me/category/cat-name` 这样的结构。并且在后台的固定链接里,只能修改category为想要的内容,例如
去除分类页链接的category/字段以及修复nginx下分类页分页失效
Max

在用网站管理工具的时候,遇到这样一个问题:抓取不到(404)页面暴增。按照谷歌的罗列挨个看来,最多出现的是“axiu.me/cat-name/page/2”(cat-name为分类的名称)这样的结构。但是据我所知,所有的wordpress博客,默认分类目录都是 axiu.me/category/cat-name 这样的结构。并且在后台的固定链接里,只能修改category为想要的内容,例如cate、cat等,但是无法删除。这可让我不知道怎么整。

问了问zww大叔,他说我目前使用的文章固定链接和目录结构不太好。逻辑结构上,category/cat-name并不简单直观。例如我博客设置的固定链接为: axiu.me/cat-name/post-title 这样上一层(分类目录)就应该为 axiu.me/cat-name

但是事实不是这样的,域名到cat-name之间必须要有个东西区别,wordpress叫它做“category base”。如何删除这个category base呢?万能的filter解决了这个问题。

1.删除分类链接中的category/字段

function kill_category_base($string) { $string = str_replace('category/', '', $string); return $string; } add_filter('category_link', 'kill_category_base');

另外,由于主机环境的问题(nginx),我的固定链接设置/%category%/%postname%/ 出现了问题:axiu.me/cat-name和axiu.me/category/cat-name同时起效,并且都被收录(这可不是什么好事),唯一的区别是,axiu.me/cat-name下如果有文章分页的话,进入分页页面,会404。

跟zww大叔商量了一上午,最后搜到了个这个办法(方法摘自插件Category Pagination Fix,感谢原作者):

2.修复固定链接为/%category%/%postname%/下分类页面分页失效(404)的问题

function remove_page_from_query_string($query_string) { if ($query_string['name'] == 'page' && isset($query_string['page'])) { unset($query_string['name']); // 'page' in the query_string looks like '/2', so i'm spliting it out list($delim, $page_index) = split('/', $query_string['page']); $query_string['paged'] = $page_index; }
return $query_string; } add_filter('request', 'remove_page_from_query_string');

// following are code adapted from Custom Post Type Category Pagination Fix by jdantzer function fix_category_pagination($qs){ if(isset($qs['category_name']) && isset($qs['paged'])){ $qs['post_type'] = get_post_types($args = array( 'public' => true, '_builtin' => false )); array_push($qs['post_type'],'post'); } return $qs; } add_filter('request', 'fix_category_pagination');

以上代码需要复制到主题目录下的functions.php文件中才能生效。

通过以上两个步骤,去掉了分类链接中的category字段,并且使nginx下分类目录的分页有效。也算达到了预期的目的。

Comments