WordPress功能函数add_query_arg()

WordPress功能函数add_query_arg(),检索修改后的URL查询字符串。

用法:

add_query_arg( $args )

描述

您可以使用此函数重新生成URL,并将查询变量追加到URL查询,有两种方式使用这个函数;可以是单个键和值,也可以是关联数组。

使用单个键和值:

add_query_arg( ‘key’, ‘value’, ‘http://example.com’ );

使用关联数组:

add_query_arg( array(

‘key1’ => ‘value1’,

‘key2’ => ‘value2’,

), ‘http://example.com’ );

从任何一个使用中忽略URL都会导致当前使用的URL ($_SERVER[‘REQUEST_URI’]的值)。

值应该使用urlencode()或rawurlencode()进行适当编码。

将任何查询变量的值设置为布尔值false将删除键(请参阅remove_query_arg())。

重要提示:add_query_arg()的返回值默认情况下不转义,输出应该使用esc_url()或类似的方法进行后期转义,以帮助防止跨站点脚本攻击(XSS)的漏洞。

参数:

$key

(string|array) (必需) 查询变量键或查询变量的关联数组。

$value

(string) (可选) 可以是查询变量值,也可以是要操作的URL。

$url

(string) (可选) 要根据的URL。

返回

(string)新的URL查询字符串(未转义)。

更多信息

使用:

// Parameters as separate arguments

add_query_arg( $param1, $param2, $old_query_or_uri );

// Parameters as array of key => value pairs

add_query_arg(

array(

‘key1’ => ‘value1’,

‘key2’ => ‘value2’,

),

$old_query_or_uri

);

来源:

文件: wp-includes/functions.php

function add_query_arg( …$args ) {

if ( is_array( $args[0] ) ) {

if ( count( $args ) < 2 || false === $args[1] ) {

$uri = $_SERVER[‘REQUEST_URI’];

} else {

$uri = $args[1];

}

} else {

if ( count( $args ) < 3 || false === $args[2] ) {

$uri = $_SERVER[‘REQUEST_URI’];

} else {

$uri = $args[2];

}

}

$frag = strstr( $uri, ‘#’ );

if ( $frag ) {

$uri = substr( $uri, 0, -strlen( $frag ) );

} else {

$frag = ”;

}

if ( 0 === stripos( $uri, ‘http://’ ) ) {

$protocol = ‘http://’;

$uri = substr( $uri, 7 );

} elseif ( 0 === stripos( $uri, ‘https://’ ) ) {

$protocol = ‘https://’;

$uri = substr( $uri, 8 );

} else {

$protocol = ”;

}

if ( strpos( $uri, ‘?’ ) !== false ) {

list( $base, $query ) = explode( ‘?’, $uri, 2 );

$base .= ‘?’;

} elseif ( $protocol || strpos( $uri, ‘=’ ) === false ) {

$base = $uri . ‘?’;

$query = ”;

} else {

$base = ”;

$query = $uri;

}

wp_parse_str( $query, $qs );

$qs = urlencode_deep( $qs ); // This re-URL-encodes things that were already in the query string.

if ( is_array( $args[0] ) ) {

foreach ( $args[0] as $k => $v ) {

$qs[ $k ] = $v;

}

} else {

$qs[ $args[0] ] = $args[1];

}

foreach ( $qs as $k => $v ) {

if ( false === $v ) {

unset( $qs[ $k ] );

}

}

$ret = build_query( $qs );

$ret = trim( $ret, ‘?’ );

$ret = preg_replace( ‘#=(&|$)#’, ‘$1’, $ret );

$ret = $protocol . $base . $ret . $frag;

$ret = rtrim( $ret, ‘?’ );

return $ret;

}

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

(由Codex – 6年前贡献)

假设我们在WordPress的URL“http://blog.example.com/client/?”请注意在输出链接之前使用了esc_url(),这是必要的,因为该函数不转义url,如果输出不转义,将使页面容易受到XSS脚本的攻击。

// This would output ‘/client/?s=word&foo=bar’

echo esc_url( add_query_arg( ‘foo’, ‘bar’ ) );

// This would output ‘/client/?s=word&foo=bar&baz=tiny’

$arr_params = array( ‘foo’ => ‘bar’, ‘baz’ => ‘tiny’ );

echo esc_url( add_query_arg( $arr_params ) );

(Ahmad Awais于5年前贡献)

安全地将用户重定向到plugins.php中的自定义页面

// Redirect to Welcome Page.

// Redirects to your-domain.com/wp-admin/plugin.php?page=your_plugin_page.

wp_safe_redirect( add_query_arg( array( ‘page’ => ‘your_plugin_page’ ), admin_url( ‘plugins.php’ ) ) );

(由Codex – 6年前贡献)

由于get_permalink()返回一个完整的URL,所以当您想要向post的页面添加变量时,可以使用它。

/*

* This would output whatever the URL to post ID 9 is, with ‘hello=there’

* appended with either ? or &, depending on what’s needed.

*/

echo esc_url( add_query_arg( ‘hello’, ‘there’, get_permalink( 9 ) ) );

(由Codex – 6年前贡献)

通过关联数组移除值和设置:

$query = ‘http://example.com/link?foo=bar’;

$new_query = add_query_arg( array(

‘foo’ => false,

‘baz’ => ‘qux’

), $query );

print( $new_query );

// http://example.com/link?baz=qux

(由Codex – 6年前贡献)

通常情况下,您可能会发现自己在当前页面中使用以下方法创建url,在这些情况下,可以使用希望影响的URL作为最后一个参数,这里不需要使用esc_url(),因为这个值是安全的。

// This would output ‘http://blog.example.com/2009/04/16/?hello=world’

echo esc_url( add_query_arg( ‘hello’, ‘world’, ‘http://blog.example.com/2009/04/16/’ ) );

(由gardelin贡献- 2个月前)

如果查询字符串值以==结束,则去掉一个=。

add_query_arg( array( ‘something’ => ‘blabla==’ ), ‘https://www.google.com’ );

结果将是

https://www.google.com?something=blabla=

但是应该是

https://www.google.com?something=blabla==

(由janw贡献,5年前)

一种使用add_query_arg获取当前总url的方法

home_url( add_query_arg( null, null ));

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注