WordPress移除分类目录固定链接前缀
WordPress分类页面的固定链接默认是携带category前缀的,另外子分类固定链接还会附加父分类的slug名称,并不是很美观。现提供一种简易的,不需要插件,不通过rewrite规则来实现去除分类固定链接前缀,包括父级slug前缀。
将下述代码添加至主题functions.php文件中
add_filter('request', function ($query_vars) { global $wp; global $wp_query; $pagename = ''; if (!empty($query_vars['error']) && $query_vars['error'] == '404' && !empty($wp->request)) { // %postname%模式 $pagename = $wp->request; } elseif (!empty($query_vars['pagename'])) { // %post_id%模式 $pagename = $query_vars['pagename']; } if (!empty($pagename)) { $pagename = $pagename; $categories = get_categories(['hide_empty' => false]); $categories = wp_list_pluck($categories, 'slug'); if (in_array($pagename, $categories)) { $query_vars['category_name'] = $pagename; unset($query_vars['error']); unset($query_vars['pagename']); $wp_query->is_home = false; $wp_query->is_404 = false; $wp_query->is_category = true; } } return $query_vars; }, 1, 1); add_filter('pre_term_link', function ($term_link, $term) { if ($term->taxonomy == 'category') { return $term->slug; } return $term_link; }, 10, 2);
其中,第一个filter是针对去除前缀后的链接可访问性处理,第二个filter是修改获取分类链接的方法,得到的链接都是去除前缀的。
Tint主题3.1.3以上版本已附带该功能,且提供主题选项供开启。