wordpress功能函数add_rewrite_tag(),添加一个新的重写标记(如%postname%)。

用法:

add_rewrite_tag( string $tag, string $regex, string $query = '' )

描述:

$query参数是可选的。如果它被省略了,你必须确保你在' init '钩子上或之前调用它。这是因为$query默认为$tag=,为了使其工作,必须添加一个新的query var。

参数:

$tag

(string) (必需) Name of the new rewrite tag.

$regex

(string) (必需) Regular expression to substitute the tag for in rewrite rules.

$query

(string) (可选) String to append to the rewritten query. Must end in '='.

默认值: ''

更多信息

这个函数可以让WordPress知道自定义的querystring变量。通常,它与add_rewrite_rule()结合使用,为具有自定义模板的页面创建重写规则。

如果您使用这个函数声明一个已经存在的重写标记,那么现有的标记将被覆盖。

这个函数必须在init或更早的时候调用。

它的功能

通过剥离标签名称中的%符号来获取一个查询var名称:

使用名称、生成的QV名称和正则表达式调用$wp_rewrite->add_rewrite_tag()。

将QV添加为一个查询var(同样,这可以通过过滤query_vars来实现,但是向WP类中添加一个像上面那样存储“额外的”QV的函数可能会更好)

来源:

文件: wp-includes/rewrite.php

function add_rewrite_tag( $tag, $regex, $query = '' ) {

// Validate the tag's name.

if ( strlen( $tag ) < 3 || '%' !== $tag[0] || '%' !== $tag[ strlen( $tag ) - 1 ] ) {

return;

}

global $wp_rewrite, $wp;

if ( empty( $query ) ) {

$qv = trim( $tag, '%' );

$wp->add_query_var( $qv );

$query = $qv . '=';

}

$wp_rewrite->add_rewrite_tag( $tag, $regex, $query );

}

更新日志:
WordPress功能函数add_rewrite_tag() (https://www.wpzt.net/) WordPress开发教程 第1张
用户贡献的笔记

(bcworkz - 5年前贡献)

在下面的例子中,想象一个站点有一个自定义的分类“位置”,所有的帖子都被分配一个位置术语,如“巴黎”或“马德里”。我们添加了一个重写标记“%location%”来建立位置查询var。我们还添加了一个重写规则,以便正确处理诸如example.com/goto/madrid/budget-lodging/这样的URL。

add_action('init', 'add_my_rewrites');

function add_my_rewrites() {

add_rewrite_tag('%location%', '([^&]+)', 'location=');

add_rewrite_rule('^goto/([^/]*)/([^/]*)/?','index.php?location=$matches[1]&name=$matches[2]','top');

}

即使重写标签看起来就像永久链接结构标签,如果你试图在永久链接结构中使用重写标签,由WordPress生成的url将看起来像example.com/goto/%location%/budget-lodging/。正确的术语并不像您所期望的那样替代重写标记。要使您的标记表现得像一个结构标记,请使用“post_link”过滤器用适当的术语替换标记。

// Assign value to %location% rewrite tag

add_filter('post_link', 'my_filter_post_link', 10, 2 );

function my_filter_post_link( $permalink, $post ) {

// bail if %location% tag is not present in the url:

if ( false === strpos( $permalink, '%location%'))

return $permalink;

$terms = wp_get_post_terms( $post->ID, 'location');

// set location, if no location is found, provide a default value.

if ( 0 < count( $terms ))

$location = $terms[0]->slug;

else

$location = 'timbuktu';

$location = urlencode( $location );

$permalink = str_replace('%location%', $location , $permalink );

return $permalink;

}

任何时候您更改与重写API相关的东西,不要忘记刷新重写规则!这可以通过进入永久链接设置并单击Save Changes来实现,无需代码。您实际上不需要在设置屏幕上做任何更改。

(由立花明- 4个月前贡献)

(从法典)

例子

下面将注册一个名为' film_title '的标签:

function custom_rewrite_tag() {

add_rewrite_tag('%film_title%', '([^&]+)');

}

add_action('init', 'custom_rewrite_tag', 10, 0);

?>

当您使用自定义页面模板进行重写时,这一点尤其重要。

检索重写后的URL的值

定义了重写标记之后,您现在可以使用WordPress的$wp_query变量来检索重写后的querystring变量的值。为了从重写中获得上述标记的值,你可以在你的页面模板中使用以下方法:

$wp_query->query_vars['film_title']

注意,在重写的URL上使用$_GET将不起作用,即使重写包含querystring变量。您必须使用$wp_query。