去掉 WordPress 分类目录 URL 中的 category 最佳方法
WordPress 默认的分类目录 URL 中是带 category 的,比如下载帮的 WordPress 的分类目录的 URL:
https://www.xzb.cc/category/wordpress/
有些用户博客的分类就是二级目录,希望去掉分类目录 URL 中的 category,实现这样的 URL:
https://www.xzb.cc/wordpress/
这个如何实现呢?
方式一:使用插件
网上有很多这方面功能的 WordPress 插件,都可以去掉分类目录 URL 中的 category,这些插件的实现方式是把所有的分类都写入 WordPress 的 rewrite 规则。
这样虽然可以解决问题,但是也会造成 rewrite 规则会非常臃肿,反而会使得 WordPress 变慢,并且每次添加分类都要去刷新 rewrite 规则。
方式二:设置分类目录前缀
另外 WordPress 还有一个非常方便的方法,可以说是最简化去掉分类目录 URL 中的 category。
只需要在 WordPress 后台,点击「设置」菜单下的「固定链接」子菜单,将「分类目录前缀」设置为 . 就可以:
方式三:最佳方法
如果仔细观察一下去掉 category 的分类目录和 WordPress 的页面的 URL:
去掉 category 的分类目录 URL:
https://www.xzb.cc/wordpress/
WordPress 的页面 URL:
https://www.xzb.cc/about/
是不是这两种页面的页面rewrite 规则是不是一样的,那么我们可以直接使用页面的 rewrite 规则来处理了。
当 WordPress 进入页面 rewrite 规则的时候,我们首先判断一下,当前的 pagename 是不是某个分类的 slug,如果是,就把当前的 query_var 中的 pagename 换成 category_name,这样就可以实现了分类目录页面的正确跳转。
add_filter('request', function($query_vars) {
if(!isset(!---->
GET['page_id']) && !isset(!---->
GET['pagename']) && !empty($query_vars['pagename'])){ $pagename = $query_vars['pagename']; $categories = get_categories(['hide_empty'=>false]); $categories = wp_list_pluck($categories, 'slug'); if(in_array($pagename, $categories)){ $query_vars['category_name'] = $query_vars['pagename']; unset($query_vars['pagename']); } } return $query_vars; });
WPJAM Basic 的「优化设置」中的「功能增强」也集成了这个功能,并且还额外增加一个选项,如果博客自定义了其他的自定义分类模式,可以选择设置哪个分类模式应用该功能:
相关文章
- 表单生成插件 Ninja Forms 严重漏洞,WordPress 官方强制推送更新
- WordPress 官方要求主题作者切换到本地托管字体
- 如何限制或取消wordpress自动清空回收站功能
- 一键将织梦(DedeCMS)文章数据无损迁移到WordPress系统
- WordPress 主循环和全局变量
- WordPress 6.0 扩展修改内容中图片标签的能力
- WordPress刚安装后报502以及后台报502的解决方法
- WordPress 修改后台登入网址,提升安全性? (WPS Hide Login 教学)
- wordpress 表格插件-wordpress插件大全「只需要输入域名建站」
- 移除 WordPress 5.9 登录页面中的语言切换框