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

 6年前     904  

文章目录

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

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

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

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

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

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

https://www.winrss.com/tutorial/wordpress-permalink.html

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

我们直接将 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 标签!

版权声明:铭创网络 发表于 6年前,共 3184 字。
转载请注明:如何去掉 WordPress 分类目录 url 链接中的 category | 赢聚网

您可能感兴趣的

暂无评论

暂无评论...