当前位置:首页 > CMS教程 > WordPress > 列表

去除WordPress固定链接中category路径方法

发布:smiling 来源: PHP粉丝网  添加日期:2015-10-15 15:44:49 浏览: 评论:0 

在WordPress固定链接中,如果是分类的话会有一个默认的category路径了,从seo角度来讲没有category路径比有category路径要好,下面我们就来给各位介绍去除WordPress固定链接中category路径方法,大家一起来看看.

解决方法网上也有提供,有使用插件,有使用伪静态的,下面小峰来说一下,能处理的几种方法.

注:以下部分代码来源于网上。

方法一:在functions.php文件中添加如下代码,然后到wp后台-设置-固定链接-保存一次即可生效.

  1. /** 
  2.  * 去除固定链接中的/category/路径,记得在后台保存一次固定链接 
  3.  */ 
  4. add_action('init''inlo_no_category'); 
  5. function inlo_no_category() { 
  6.  global $wp_rewrite
  7.  $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%'
  8. //phpfensi.com 

方法二:来源插件WP No Category Base上的代码,也是放到functions.php里面,然后到wp后台-设置-固定链接-保存一次即可生效.

  1. /** 
  2.  * 去除固定链接中的/category/路径,添加后在后台保存一次固定链接 
  3.  * 基于 WP No Category Base 插件 
  4.  */ 
  5.  
  6. add_action( 'load-themes.php',  'no_category_base_refresh_rules'); 
  7. add_action('created_category''no_category_base_refresh_rules'); 
  8. add_action('edited_category''no_category_base_refresh_rules'); 
  9. add_action('delete_category''no_category_base_refresh_rules'); 
  10. function no_category_base_refresh_rules() { 
  11.     global $wp_rewrite
  12.     $wp_rewrite -> flush_rules(); 
  13.  
  14. // register_deactivation_hook(__FILE__, 'no_category_base_deactivate'); 
  15. // function no_category_base_deactivate() { 
  16. //  remove_filter('category_rewrite_rules', 'no_category_base_rewrite_rules'); 
  17. //  // We don't want to insert our custom rules again 
  18. //  no_category_base_refresh_rules(); 
  19. // } 
  20.  
  21. // Remove category base 
  22. add_action('init''no_category_base_permastruct'); 
  23. function no_category_base_permastruct() { 
  24.     global $wp_rewrite$wp_version
  25.     if (version_compare($wp_version'3.4''<')) { 
  26.         // For pre-3.4 support 
  27.         $wp_rewrite -> extra_permastructs['category'][0] = '%category%'
  28.     } else { 
  29.         $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%'
  30.     } 
  31. // Add our custom category rewrite rules 
  32. add_filter('category_rewrite_rules''no_category_base_rewrite_rules'); 
  33. function no_category_base_rewrite_rules($category_rewrite) { 
  34.     //var_dump($category_rewrite); // For Debugging 
  35.  
  36.     $category_rewrite = array(); 
  37.     $categories = get_categories(array('hide_empty' => false)); 
  38.     foreach ($categories as $category) { 
  39.         $category_nicename = $category -> slug; 
  40.         if ($category -> parent == $category -> cat_ID)// recursive recursion 
  41.             $category -> parent = 0; 
  42.         elseif ($category -> parent != 0) 
  43.             $category_nicename = get_category_parents($category -> parent, false, '/', true) . $category_nicename
  44.         $category_rewrite['(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]'
  45.         $category_rewrite['(' . $category_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]'
  46.         $category_rewrite['(' . $category_nicename . ')/?$'] = 'index.php?category_name=$matches[1]'
  47.     } 
  48.     // Redirect support from Old Category Base 
  49.     global $wp_rewrite
  50.     $old_category_base = get_option('category_base') ? get_option('category_base') : 'category'
  51.     $old_category_base = trim($old_category_base'/'); 
  52.     $category_rewrite[$old_category_base . '/(.*)$'] = 'index.php?category_redirect=$matches[1]'
  53.  
  54.     //var_dump($category_rewrite); // For Debugging 
  55.     return $category_rewrite
  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. // Redirect if 'category_redirect' is set 
  62. add_filter('request''no_category_base_request'); 
  63. function no_category_base_request($query_vars) { 
  64.     //print_r($query_vars); // For Debugging 
  65.     if (isset($query_vars['category_redirect'])) { 
  66.         $catlink = trailingslashit(get_option('home')) . user_trailingslashit($query_vars['category_redirect'], 'category'); 
  67.         status_header(301); 
  68.         header("Location: $catlink"); 
  69.         exit(); 
  70.     } 
  71.     return $query_vars

方法三:基于伪静态,编写.htaccess的301重定向规则,使用与主机系统为linux,将带有/category/的链接重定向至没有它的链接.

  1. RewriteEngine On 
  2. RewriteBase / 
  3. RewriteRule ^category/(.+)$ http://www.phpfensi.com /$1 [R=301,L] 

将上面峰尚博客的网址替换为你的网址.

Tags: WordPress路径 WordPress链接

分享到: