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

 5年前     883  

文章目录

    这两天,站长的一个客户向站长请教关于移除分类目录中的 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 标签!

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

    您可能感兴趣的

    暂无评论

    暂无评论...