欢迎光临赢聚网
我们致力于更稳定的主机环境

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

这两天,站长的一个客户向站长请教关于移除分类目录中的category的方法,站长使用了最老的办法:修改固定链接!

打开WP后台-设置-固定链接,

然后在分类目录那一栏里写入英文半角的点,

但是,此时问题发生了:因为这样的设置需要网站是全新的,没有分类栏目和文章,这样才不会出错,但是此刻用户网站已有文章,这样的方法修改后,使用户的文章和分类栏目直接404报错了!

为此,站长只好使用了另一种方法:

我们直接将 WP No category Base 插件的主体代码插入到function.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;
 }

将以上代码,放入到主题的function.php文件中以后,重新保存固定链接设置!就这样,终于安全有效的移除了分类目录链接url中的category标签!

赞(1) 打赏
未经允许不得转载:赢聚网 » 如何去掉WordPress分类目录url链接中的category

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

赢聚网 致力于更稳定的主机环境

QQ 咨询加入 QQ 群

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏