WordPress去掉链接中的category

2018年7月1日07:42:52 发表评论 29 views

使用WordPress建站的站长都会遇到,分类链接中都会无缘无故多出一个 /category标签,这对于网站的SEO来说是非常不利的,同时对网站的链接结构也很不美观。网上有很多如何去掉category的教程,这里简单总结分享一下,并对比一下优缺点,仅供参考。

 

方法一:修改固定连接

进入WordPress后台 -> 设置 -> 固定链接,将【分类目录前缀】选项的值设置为“.”(输入半角字符),如下图:

WordPress去掉链接中的category

 

优点:设置简单。适用于初建成的博客,不用修改代码,升级没有顾虑,不会增加运行负担。

缺点:无法打开原链接,会出现404错误。被搜索引擎收录良好或有较多外链的博客,需要小心使用。不要因为操作简单而损失了外链及权重。

 

方法二:使用插件

插件:No Category Base (WPML)

 

WordPress去掉链接中的category

 

优点:安装简单,安装启用后自动生效。无论是初建成的博客,还是被搜索引擎收录良好的博客都可以使用。它对原来的分类地址做了301跳转,对SEO优化有好处,把降权风险降到最低,防止原链接打不开。用不着修改代码,升级没有顾虑。

不足:插件可能会造成服务器负担,但是微乎其微,不应该算缺点。

 

方法三:添加代码到functions.php文件

  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.          // For pre-3.4 support
  22.          $wp_rewrite -> extra_permastructs['category'][0] = '%category%';
  23.      } else {
  24.          $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';
  25.      }
  26.  }
  27.  // Add our custom category rewrite rules
  28.  add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
  29.  function no_category_base_rewrite_rules($category_rewrite) {
  30.      //var_dump($category_rewrite); // For Debugging
  31.      $category_rewrite = array();
  32.      $categories = get_categories(array('hide_empty' => false));
  33.      foreach ($categories as $category) {
  34.          $category_nicename = $category -> slug;
  35.          if ($category -> parent == $category -> cat_ID)// recursive recursion
  36.              $category -> parent = 0;
  37.          elseif ($category -> parent != 0)
  38.              $category_nicename = get_category_parents($category -> parent, false, '/', true) . $category_nicename;
  39.          $category_rewrite['(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
  40.          $category_rewrite['(' . $category_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
  41.          $category_rewrite['(' . $category_nicename . ')/?$'] = 'index.php?category_name=$matches[1]';
  42.      }
  43.      // Redirect support from Old Category Base
  44.      global $wp_rewrite;
  45.      $old_category_base = get_option('category_base') ? get_option('category_base') : 'category';
  46.      $old_category_base = trim($old_category_base, '/');
  47.      $category_rewrite[$old_category_base . '/(.*)$'] = 'index.php?category_redirect=$matches[1]';
  48.      //var_dump($category_rewrite); // For Debugging
  49.      return $category_rewrite;
  50.  }
  51.  // Add 'category_redirect' query variable
  52.  add_filter('query_vars', 'no_category_base_query_vars');
  53.  function no_category_base_query_vars($public_query_vars) {
  54.      $public_query_vars[] = 'category_redirect';
  55.      return $public_query_vars;
  56.  }
  57.  // Redirect if 'category_redirect' is set
  58.  add_filter('request', 'no_category_base_request');
  59.  function no_category_base_request($query_vars) {
  60.      //print_r($query_vars); // For Debugging
  61.      if (isset($query_vars['category_redirect'])) {
  62.          $catlink = trailingslashit(get_option('home')) . user_trailingslashit($query_vars['category_redirect'], 'category');
  63.          status_header(301);
  64.          header("Location: $catlink");
  65.          exit();
  66.      }
  67.      return $query_vars;
  68.  }

 

优点:加入代码,性能影响忽略不计,适用于对代码稍熟悉的博客。

缺点:博客升级需要重新修改。

Liwei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: