如何免插件实现WordPress网站去掉分类链接中category目录?折腾WordPress的朋友都知道在分类链接中会出现一个/category/目录,网上也出现了各种去除category目录的类似插件,比如WP No category Base 插件。但安装过多插件对wordpress网站加载很不友好。可以通过不用插件来实现WordPress去掉分类链接中category目录,将下面代码添加到你当前用的wordpess主题的functions.php 文件中保存即可:
//WordPress免插件去除分类category if (git_get_option('git_category_b')) { 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(); } // 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', '<')) { } 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; }
保存后,你打开目录链接时有可能显示404等打不开情况。请在登录后台-设置-固定链接设置,点击一下那个“保存更改”,即可。
默认wordpress链接伪静态后首页分页是:你的域名/page/页数,内页是:域名/category/分类别名/page/页数。链接目录太深对搜索引擎蜘蛛抓取不太好,还越短越好。
以上就是WordPress纯代码去掉分类目录前缀URL链接中自带category的方法。
评论