add_query_arg

Добавляет указанные параметры GET запроса в текущий или указанный URL.

Функция позволяет удобно создавать URL, добавляя в него новые параметры запроса: ?var=val&var_2=val_2.

Если в значении параметра указать false: array('key'=>false), то функция удалит указанный параметр запроса из УРЛ.

Если пропустить второй и третий параметры, функция будет использовать вместо них значения глобального массива $_SERVER['REQUEST_URI'].

 Важно! Функция не использует esc_url(), т.е. не очищает результат. Поэтому, если вы не указываете в функции в какой УРЛ нужно добавить данные, то функция использует $_SERVER['REQUEST_URI'], поэтому перед выводом обязательно нужно очищайте УРЛ с помощью esc_url(). Нужно это, для защиты от XSS атак, т.к. любой пользователь может дописать в УРЛ произвольный параметр запроса, который затем будет выведен в HTML самой страницы.
✈ 1 раз = 0.00016с = быстро | 50000 раз = 1.23с = быстро

Хуков нет.

Возвращает

Строку, новый URL с параметрами запроса.

Использование

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

Шаблон использования

$new_url = add_query_arg( array('key1'=>'value1', 'key2'=>'value2' ), $uri );
$param1(строка/массив/логический) (обязательный)
Новый ключ или ассоциативный массив новых параметров запроса: array( ключ => значение ).
По умолчанию: нет
$param2(строка/массив/логический)
Новое значение параметра (если в первом параметре была указана строка – ключ). Или URL в который нужно добавить параметры, если в первом значении указан массив. По умолчанию, используется текущий УРЛ ($_SERVER[REQUEST_URI]).
По умолчанию: нет
$old_query_or_uri(строка/массив)
Старый запрос или URL.
По умолчанию: $_SERVER[REQUEST_URI]

Примеры

#1. Добавляем параметры в текущий УРЛ страницы

Предположим мы находимся на странице http://example.com/client/?s=word, тогда:

echo esc_url( add_query_arg( 'foo', 'bar' ) );
// вернет: /client/?s=word&foo=bar

$arr_params = array( 'foo' => 'bar', 'baz' => 'tiny' );
echo esc_url( add_query_arg( $arr_params ) );
// вернет: /client/?s=word&foo=bar&baz=tiny


Важно! В таком коде, когда не указан конкретный УРЛ куда добавляются параметры, нужно обязательно использовать <a href=”/function/esc_url”>esc_url()</a> перед выводом результата на экран. Потому что параметры запроса могут быть добавлены пользователем произвольно.

#2. Добавляем параметры в указанный УРЛ

Если нужно обработать не тот УРЛ на котором мы находимся сейчас, а любой другой, то нужно указать его в третьем или втором параметре, см. оба примера.

<?php
function add_query_arg() {
	$args = func_get_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];
	}

	if ( $frag = strstr( $uri, '#' ) )
		$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 ( $v === false )
			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;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *