wordpress分类目录链接去掉cateogry

来源:互联网 发布:贪吃蛇寻路算法 编辑:程序博客网 时间:2024/05/16 01:28

  今天我在折腾wordpress主题的时候,发现设置好固定链接以后,分类目录里面的链接是这样的:www.xxx.cn/catetory/xxx/,也就是一个二级目录,而学习过seo优化的朋友应该知道,链接太长并不是什么好事,并不利于优化,所以我们应该把www.xxx.cn/catetory/xxx/改成www.xxx.cn/xxx/为好,也就是要去掉catetory,网上的方法大部分是建议使用wp no catetory插件,而插件是会稍微影响网站加载速度,尤其是插件安装较多的网站,所以可以不用尽量减少使用为好。

  这边介绍一个使用代码实现wordpress主题去掉分类目录catetory的方法,只需要在functiongs.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');

  function no_category_base_refresh_rules() {

  global $wp_rewrite;

  $wp_rewrite -> flush_rules();

  }

  // register_deactivation_hook(__FILE__, 'no_category_base_deactivate');

  // function no_category_base_deactivate() {

  // remove_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');

  // // We don't want to insert our custom rules again

  // no_category_base_refresh_rules();

  // }

  // Remove category base

  add_action('init', 'no_category_base_permastruct');

  function no_category_base_permastruct() {

  global $wp_rewrite, $wp_version;

  if (version_compare($wp_version, '3.4', '<')) {

  // For pre-3.4 support

  $wp_rewrite -> extra_permastructs['category'][0] = '%category%';

  } else {

  $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';

  }

  }

  // Add our custom category rewrite rules

  add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');

  function no_category_base_rewrite_rules($category_rewrite) {

  //var_dump($category_rewrite); // For Debugging

  $category_rewrite = array();

  $categories = get_categories(array('hide_empty' => false));

  foreach ($categories as $category) {

  $category_nicename = $category -> slug;

  if ($category -> parent == $category -> cat_ID)// recursive recursion

  $category -> parent = 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]';

  }

  // Redirect support from Old Category Base

  global $wp_rewrite;

  $old_category_base = get_option('category_base') ? get_option('category_base') : 'category';

  $old_category_base = trim($old_category_base, '/');

  $category_rewrite[$old_category_base . '/(.*)$'] = 'index.php?category_redirect=$matches[1]';

  //var_dump($category_rewrite); // For Debugging

  return $category_rewrite;

  }

  // Add 'category_redirect' query variable

  add_filter('query_vars', 'no_category_base_query_vars');

  function no_category_base_query_vars($public_query_vars) {

  $public_query_vars[] = 'category_redirect';

  return $public_query_vars;

  }

  // Redirect if 'category_redirect' is set

  add_filter('request', 'no_category_base_request');

  function no_category_base_request($query_vars) {

  //print_r($query_vars); // For Debugging

  if (isset($query_vars['category_redirect'])) {

  $catlink = trailingslashit(get_option('home')) . user_trailingslashit($query_vars['category_redirect'], 'category');

  status_header(301);

  header("Location: $catlink");

  exit();

  }

  return $query_vars;

  }

0 0
原创粉丝点击