WordPress去掉分类url中category字段的方法(推荐使用)

WordPress 做网站起初优化都应该考虑的一个地方,WordPress默认的链接结构中,分类目录的链接结构中包含了“category”字段,大家都知道seo的优化是尽可能的减少目录层级,所以我们想要把url的结构变换成xxx.com/sss,而不是现在的xxx.com/category/sss。那么我们应该怎么操作呢?这里推荐以下几种方法!

方法一:使用 No Category Base插件去掉

WordPress去掉分类url中category字段的方法(推荐使用)

作者给他的介绍(翻译版本):顾名思义,这个插件将从你的类别永久链接中完全删除强制的“类别库”(例如“my site . com/Category/my-Category/”到“mysite.com/my-category/”)。 该插件不需要设置或修改核心wordpress文件,也不会破坏任何链接。它还会将旧的类别链接重定向到新的类别。 特征 更好的逻辑永久链接,如“mysite.com/my-category/”和’mysite.com/my-category/my-post/’。 简单的插件——几乎没有增加任何开销。 开箱即用,无需设置。 不需要修改WordPress文件。 不需要其他插件工作。 与网站地图插件兼容。 与WPML兼容。 处理多个子类别。 使用WordPress Multisite。 重定向旧的类别永久链接到新的类别(301重定向,有利于搜索引擎优化)。

No Category Base 插件的使用方法非常简单,只需要安装启动就行,完后打开你的首页分类,发现分类的url中的category字段已经被去除了。强烈推荐此方法,推荐新手使用此方法,网上流传的暂用资源、免插件版本的怎么好怎么的,大可不必在意,因为真的微乎其微,插件还方便管理。

方法二:在主题functions.php文件底部添加代码

把下面的代码复制粘贴到你当前主题的functions.php文件中保存即可,建议先备份。

/*
 Plugin Name: WP No Category Base
 Plugin URI: http://blinger.org/wordpress-plugins/no-category-base/
 Description: Removes '/category' from your category permalinks.
 Version: 1.1.1
 Author: iDope
 Author URI: http://efextra.com/
 */

// Refresh rules on activation/deactivation/category changes
register_activation_hook(__FILE__, '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;
}

// For Debugging
//add_filter('rewrite_rules_array', 'no_category_base_rewrite_rules_array');
//function no_category_base_rewrite_rules_array($category_rewrite) {
//	var_dump($category_rewrite); // For Debugging
//}

// 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;
}

为了不安装插件使用这个方法的,有一个弊端就是每次换主题都需要修改下才行,这串代码也是移植No Category Base插件

方法三:修改WordPress函数

在wp-includes文件夹找那个找到category-template.php,修改里面的函数。

搜索(get_category_link()函数里)的以下代码:

$catlink = $wp_rewrite->get_category_permastruct();

在后面,另起一行加入

$catlink = str_replace(‘/category’ ,  , $catlink);

代码作用是,使用字符串替换函数,把获取分类链接函数的分类链接里的/category替换掉。达到去掉分类链接前缀/category的目的。

使用这种方法当博客升级的时候需要重新修改,而且原地址仍可以访问,这样就会造成同样一个页面有两个URL,不利于SEO。如果你是一个新手建议别用这种方法。

方法四:修改固定链接设置

具体步骤如下:

WordPress后台—设置—固定链接—分类目录前缀里输入半角字符: “.”。保存即可去掉分类前缀category。

WordPress去掉分类url中category字段的方法(推荐使用)

这种方法在实际使用过程的时候,可能会出现发现调出来地址是:https://site url/./mulu,而且原链接无法打开,会出现404错误。这种方法小编不推荐使用。

当你用以上方法设置完成后,在此访问网站的时候可能会出现404错误,解决方法非常简单,只需登陆后台,找到设置 > 固定链接,重新保存即可。

原创文章,作者:草根站长,如若转载,请注明出处:https://www.jianzhanben.com/wordpress/228.html

(2)
上一篇 2023年4月26日 上午12:12
下一篇 2023年4月26日 下午11:20

相关推荐