WordPress如何去掉分类链接中的category目录

在我们给博客做WordPress优化时,很多细节都不可忽视,例如:分类链接中的category:https://www.meigui.uk/category/theme

WordPress分类的链接地址是程序中自带category目录, 这种结构的url其实还有优化的余地的,url优化是相对来说比较重要的环节, 如果能够去掉分类链接中的category无疑也是对网站seo优化有利。
WordPress如何去掉分类链接中的category目录
那么我们改如何去掉分类链接中的category呢?下面主题君分享一段去掉分类链接中的category的WordPress代码:

  1. //去掉分类链接中的category  
  2. add_action( 'load-themes.php', 'no_category_base_refresh_rules');  
  3. add_action('created_category', 'no_category_base_refresh_rules');  
  4. add_action('edited_category', 'no_category_base_refresh_rules');  
  5. add_action('delete_category', 'no_category_base_refresh_rules');  
  6. function no_category_base_refresh_rules() {  
  7.         global $wp_rewrite;  
  8.         $wp_rewrite -> flush_rules();  
  9. }  
  10. // register_deactivation_hook(__FILE__, 'no_category_base_deactivate');  
  11. // function no_category_base_deactivate() {  
  12. // remove_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');  
  13. //// We don't want to insert our custom rules again  
  14. // no_category_base_refresh_rules();  
  15. // }  
  16. // Remove category base  
  17. add_action('init', 'no_category_base_permastruct');  
  18. function no_category_base_permastruct() {  
  19.         global $wp_rewrite$wp_version;  
  20.         if (version_compare($wp_version, '3.4', '<')) {  
  21.                   
  22. // For pre-3.4 support  
  23.                 $wp_rewrite -> extra_permastructs['category'][0] = '%category%';  
  24.         } else {  
  25.                 $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';  
  26.         }  
  27. }  
  28. // Add our custom category rewrite rules  
  29. add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');  
  30. function no_category_base_rewrite_rules($category_rewrite) {  
  31.           
  32. //var_dump($category_rewrite);// For Debugging  
  33.         $category_rewrite = array();  
  34.         $categories = get_categories(array('hide_empty' => false));  
  35.         foreach ($categories as $category) {  
  36.                 $category_nicename = $category -> slug;  
  37.                 if ($category -> parent == $category -> cat_ID)  
  38. // recursive recursion  
  39.                         $category -> parent = 0;  
  40.                 elseif ($category -> parent != 0)  
  41.                         $category_nicename = get_category_parents($category -> parent, false, '/', true) . $category_nicename;  
  42.                 $category_rewrite['(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';  
  43.                 $category_rewrite['(' . $category_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';  
  44.                 $category_rewrite['(' . $category_nicename . ')/?$'] = 'index.php?category_name=$matches[1]';  
  45.         }  
  46.           
  47. // Redirect support from Old Category Base  
  48.         global $wp_rewrite;  
  49.         $old_category_base = get_option('category_base') ? get_option('category_base') : 'category';  
  50.         $old_category_base = trim($old_category_base, '/');  
  51.         $category_rewrite[$old_category_base . '/(.*)$'] = 'index.php?category_redirect=$matches[1]';  
  52.           
  53. //var_dump($category_rewrite);// For Debugging  
  54.         return $category_rewrite;  
  55. }  
  56. // Add 'category_redirect' query variable  
  57. add_filter('query_vars', 'no_category_base_query_vars');  
  58. function no_category_base_query_vars($public_query_vars) {  
  59.         $public_query_vars[] = 'category_redirect';  
  60.         return $public_query_vars;  
  61. }  
  62. // Redirect if 'category_redirect' is set  
  63. add_filter('request', 'no_category_base_request');  
  64. function no_category_base_request($query_vars) {  
  65.           
  66. //print_r($query_vars);// For Debugging  
  67.         if (isset($query_vars['category_redirect'])) {  
  68.                 $catlink = trailingslashit(get_option('home')) . user_trailingslashit($query_vars['category_redirect'], 'category');  
  69.                 status_header(301);  
  70.                 header("Location: $catlink");  
  71.                 exit();  
  72.         }  
  73.         return $query_vars;  
  74. }  
未经允许不得转载:玫瑰屋工作室 » WordPress如何去掉分类链接中的category目录