wordpress去除目录category(亲自验证)

2015年11月15日 1 条评论 4.36k 次阅读 0 人点赞

近期因为修改网站伪静态导致整个nginx配置文件错误,在数据备份过程中导致了数据丢失。在这里表示非常痛心。但是同时的,因为在优化网站的过程中学习到了很多新的知识。比如:伪静态、百度seo优化、网站统计、手机能够直接播放视频等一系列知识。今天就先来聊一聊如何在wordpress中去除目录链接category。在这里要特别感谢“氪星人”提供的解决方案,大家可以详细查看对方原文:http://defcon.cn。
这里就来讲一讲,在解决该问题中经历了哪些。
可能原先一直采用默认链接:www. example.com/?p=123,看了一系列seo文章后发现这种命名方式不利于百度收录,于是...就改成了:www. example.com/%post_id%.html。当然这个里面还有一系列404的问题,这些会单独说明其心酸历程。
由于以前都是采用默认的,所以对整个网址的目录结构从没关心过,自从改了固定链接后发现:每个分类目录的链接为都存在category这个字段,例如:生活分类目录的地址:www.examole.com/category/life 职场分类目录的地址:www.example.com/category/work ,为什么不直接是 www.example.com/life ;熟悉seo的都知道,目录结构越深越不利于百度能够拿到你的目录,于是...开始各种百度方法。看了下最傻瓜的方式就是安装插件去除,但是为了保障网站不因为插件导致累赘,所以这里不采用插件的形式,而直接通过修改主题目录下functions.php的形式来达成这样的目的。

functions.php位置

/wp-content/themes/主题文件夹名/functions.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;
}

 

用了该代码后可能会出现404错误,不用慌张。直接在“固定链接”设置页面随意更改下链接的格式,改完之后再改回原先自己用的链接形式即可。
如果依旧一直出现404,就把浏览器缓存清除后再尝试。

Dawn

这个人太懒什么东西都没留下

文章评论(1)

  • スーパーコピーエルメスベルト

    超好評に持った2018ブランドコピー老舗!
    2018 新作が満載!皆様を歓迎して当店をご光臨賜ります。
    主要取扱商品 :ヴィトン、シャネル、エルメスなどのブランドの美品。
    ◆当店の保証:
    スタイルが多い、品質がよい、価格が低い!
    安心、安全にお届けします。
    品数豊富、色々な選択があります。
    ブランドコピー 代引きの商品が満載!
    100%品質保証!到着保障!
    スーパーコピーエルメスベルト http://www.sbagshop.com/brand-34-copy-0.html

    2018年8月5日