WordPress功能函数add_rewrite_tag()

WordPress功能函数add_rewrite_tag(),添加一个新的重写标记(如postn**e)。

用法:

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

描述:

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

参数:

$tag

(string) (必需) N**e of the new rewrite tag.

$regex

(string) (必需) Regular e**ression 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 n**e.

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。我们还添加了一个重写规则,以便正确处理诸如ex**ple.com/goto/**drid/budget-lodging/这样的URL。

add_action(‘init’, ‘add_my_rewrites’);

function add_my_rewrites() {

add_rewrite_tag(‘location’, ‘([^&**p;]+)’, ‘location=’);

add_rewrite_rule(‘^goto/([^/]*)/([^/]*)/?’,’index.php?location=$**tches[1]&**p;n**e=$**tches[2]’,’top’);

}

即使重写标签看起来就像永久链接结构标签,如果你试图在永久链接结构中使用重写标签,由WordPress生成的url将看起来像ex**ple.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( $per**link, $post ) {

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

if ( false === strpos( $per**link, ‘location’))

return $per**link;

$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 );

$per**link = str_replace(‘location’, $location , $per**link );

return $per**link;

}

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

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

(从法典)

例子

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

<?php

function cus***_rewrite_tag() {

add_rewrite_tag(‘film_title’, ‘([^&**p;]+)’);

}

add_action(‘init’, ‘cus***_rewrite_tag’, 10, 0);

?>

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

检索重写后的URL的值

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

$wp_query->query_vars[‘film_title’]

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

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容