17713433920 info@mac163.com
WordPress重写API
WordPress重写API

WordPress有一个非常有用的API,称为“ 重写API ”。我想已经有了“ URL重写”功能,这是使URL更具可读性的过程。例如,这样写的网址http://mysite.com/?page=12&category=12&author=47看起来不太好。很难记住它,搜索引擎也不太喜欢它。因此,几乎每个CMS都具有内置功能,可以“重写” URL,使它们看起来像这样:http://mysite.com/category/business/finance。

重写API和WP_Rewrite类

在WordPress内部,此过程也称为永久链接结构。从默认的永久链接结构切换到自定义结构时,您会自动激活重写API。这是全自动的。但是有时您需要创建自己的自定义重写规则。

在本文中,我们将创建简单的函数来创建简单的自定义重写规则。假设我们要获取一个引荐来源网址的值,该值相当于$ _GET [‘referrer’]。

如果我们看一下Codex,我们可以在rewrite API页面上看到该API具有6个内置函数。重写的最常见用途是使用这些功能,有关此的大量教程,这就是为什么我要使用过滤器代替函数的原因。因为是的,所以重写API也可以与过滤器一起使用!这些过滤器在WP_Rewrite类 Codex页面上列出。

添加一个新的查询变量

首先,我们需要创建一个函数来告诉WordPress设置了新的重写规则。这是  add_rewrite_rule()和  add_rewrite_tag()  函数的工作,但您也可以使用query_vars和  rewrite_rules_array过滤器进行此操作。为此,我们需要创建两个函数和两个过滤器。第一个函数将简单地向query_vars过滤器添加一个新变量,第二个函数将将此新变量注册到全局重写规则中:

/*
|--------------------------------------------------------------------------
| Start Rewrite. Sample: http://mysite.com/referrer/remi
|--------------------------------------------------------------------------
*/

// Register a new var
function rc_add_query_vars( $vars) {
	$vars[] = "referrer"; // name of the var as seen in the URL
return $vars;
}

// Hook our function into query_vars
add_filter('query_vars', 'rc_add_query_vars');

// Add the new rewrite rule to existings ones
function rc_add_rewrite_rules($rules) {
	$new_rules = array('referrer/([^/]+)/?$' => 'index.php?referrer=$matches[1]');
	$rules = $new_rules + $rules;
	return $rules;
}

// Hook the function into rewrite_rules_array
add_filter('rewrite_rules_array', 'rc_add_rewrite_rules');

将代码添加到任何插件文件或主题functions.php文件中后,进入“设置”>“永久链接”,并保存永久链接结构。此操作是必需的。现在,您应该可以使用以下类型或网址访问您的网站:http://mysite.com/referrer/your-name。如果要重定向到特定页面,请通过index.php?pagename = my-page&referrer = $ matches [1]更改index.php?referrer = $ matches [1],其中“ my-page”是要访问的页面重定向到。

检索变量值

设置了重写规则后,您可能要访问变量值。但是,如果您执行简单的$ _GET [‘referrer’],则不会获得任何价值。要检索URL vars值,您需要将函数连接到“ template_redirect”过滤器。连接“ init”过滤器还为时过早。然后,您可以通过$ wp_query对象访问所需的变量。以下是有关操作方法的快速示例:

// Retrieve URL var
function rc_get_my_vars() {
	global $wp_query;
	
	if(isset($wp_query->query_vars['referrer'])) {
		$referrer = get_query_var('referrer');
	}
}

// Hook the function into template_redirect
add_action( 'template_redirect', 'rc_get_my_vars');

接下来,您可以回显$ referrer值,或像使用常规GET变量一样使用它。

您当然可以修改使用多个变量:

// in rc_add_query_vars()
$vars[] = "referrer";
$vars[] = "campaign";

// in rc_add_rewrite_rules()
$new_rules = array('referrer/([^/]+)/([^/]+)/?$' => 'index.php?pagename=my-page&referrer=$matches[1]&campaign=$matches[2]');

不要忘记,需要启用PHP mod_rewrite模块才能使用url重写。


微信二维码

微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!


需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!
回到顶部