去掉分类链接中category方法
复制下面我们提供的代码,粘贴到你网站使用的主题的模板函数文件 functions.php 文件中即可:
//去除分类标志代码 add_action('load-themes.php', 'no_category_base_refresh_rules'); add_action('created_category', 'no_category_base_refresh_rules'); add_action('edited_category', 'no_category_base_refresh_rules'); add_action('delete_category', 'no_category_base_refresh_rules'); 功能 no_category_base_refresh_rules() { 全局$wp_rewrite; $wp_rewrite -> flush_rules(); } // register_deactivation_hook(__FILE__, 'no_category_base_deactivate'); // 函数 no_category_base_deactivate() { // remove_filter('category_rewrite_rules', 'no_category_base_rewrite_rules'); // // 我们不想再次插入我们的自定义规则 // no_category_base_refresh_rules(); // } // 移除类别库 add_action('init', 'no_category_base_permastruct'); 功能 no_category_base_permastruct() { 全局$wp_rewrite,$wp_version; if (version_compare($wp_version, '3.4', '<')) { // 对于 3.4 之前的支持 $wp_rewrite -> extra_permastructs['category'][0] = '%category%'; } 别的 { $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%'; } } // 添加我们的自定义类别重写规则 add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules'); 功能 no_category_base_rewrite_rules($category_rewrite) { //var_dump($category_rewrite); // 用于调试 $category_rewrite = 数组(); $categories = get_categories(array('hide_empty' => false)); foreach ($categories as $category) { $category_nicename = $category -> 蛞蝓; if ($category -> parent == $category -> cat_ID)// 递归递归 $category -> 父级 = 0; elseif ($category -> parent != 0) $category_nicename = get_category_parents($category -> parent, false, '/', true) 。$category_nicename; $category_rewrite['(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed =$matches[2]'; $category_rewrite['(' . $category_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[ 2]'; $category_rewrite['(' . $category_nicename . ')/?$'] = 'index.php?category_name=$matches[1]'; } // 从旧类别库重定向支持 全局$wp_rewrite; $old_category_base = get_option('category_base') ?get_option('category_base') : '类别'; $old_category_base = trim($old_category_base, '/'); $category_rewrite[$old_category_base 。'/(.*)$'] = 'index.php?category_redirect=$matches[1]'; //var_dump($category_rewrite); // 用于调试 返回 $category_rewrite; } // 添加 'category_redirect' 查询变量 add_filter('query_vars', 'no_category_base_query_vars'); 函数 no_category_base_query_vars($public_query_vars) { $public_query_vars[] = 'category_redirect'; 返回 $public_query_vars; } // 如果设置了 'category_redirect' 则重定向 add_filter('request', 'no_category_base_request'); 功能 no_category_base_request($query_vars) { //print_r($query_vars); // 用于调试 if (isset($query_vars['category_redirect'])) { $catlink = trailingslashit(get_option('home')) 。user_trailingslashit($query_vars['category_redirect'], 'category'); 状态标头(301); header("位置:$catlink"); 出口(); } 返回 $query_vars; }
原理介绍:
这段去掉分类链接中category的代码,就是WP No category Base 插件的主体代码,我们可以不安装这个插件,直接通过主题函数来解决这个问题。
注意事项:
不管安装插件或者用代码可能会出现404页面,即%post_id%.html(本站设置的固定链接)的伪静态失效了!
解决方法:登录后台→设置→固定链接设置页面,随意改一下固定链接格式,然后再改回自己正常用的符合网站伪静态规则的固定链接格式,可以解决这个bug,不行就反复多改几次。