Чтение значения параметра из URL
Получить из URL значение конкретного параметра
Предположим, что адрес текущей страницы имеет вид http://site.ru/?p=1&s=2
и мы хотим получить значение параметра p
. Проще всего сделать это так:
echo $_GET['p'];
Показать код
Получить из URL все пары параметр-значение
foreach( $_GET as $key => $value ) {
echo $key . ' = ' . $value . '<br>';
}
Показать код
Если адрес текущей страницы имеет вид http://site.ru/?p=1&s=2
, то код выведет следующее:
p = 1
s = 2
Если надо получить параметры из URL в виде переменной, то можно использовать функцию parse_url
:
$url = 'http://site.ru/?p=1&s=2';
$parts = parse_url( $url );
parse_str( $parts['query'], $query );
Показать код
В результате переменная $query
будет содержать такой массив:
Array (
[p] => 1
[s] => 2
)
Если параметры в URL имеют одинаковое название
Допустим URL имеет такой вид https://site.ru/?cat=15&cat=2
и надо прочитать из него все значения для параметра cat
. Способы, описанные выше, вернут только последнее значение этого параметра.
Ниже показано, как правильно извлечь параметры из такого URL при обычном или Ajax-запросе.
if( wp_doing_ajax() ) { // если это Ajax-запрос
$url = $_POST['url'];
$query_string = parse_url( $url, PHP_URL_QUERY );
$params = proper_parse_str( urldecode( $query_string ) );
} else { // если это не Ajax-запрос
$params = '';
if( $_SERVER['QUERY_STRING'] ) $params = proper_parse_str( urldecode( $_SERVER['QUERY_STRING'] ) );
}
function proper_parse_str( $str ) {
$arr = [];
$pairs = explode( '&', $str );
foreach( $pairs as $i ) {
list( $name, $value ) = explode( '=', $i, 2 );
if( isset( $arr[$name] ) ) {
if( is_array( $arr[$name] ) ) {
$arr[$name][] = $value;
}
else {
$arr[$name] = [ $arr[$name], $value ];
}
}
else {
$arr[$name] = $value;
}
}
return $arr;
}
Показать код
На что следует обратить внимание:
- проверка на Ajax-запрос идет с помощью ВП-функции
wp_doing_ajax()
; - при Ajax-запросе предполагается, что URL передается как один из его параметров.
В результате переменная $params
будет содержать такой массив параметров:
Array (
[cat] => Array (
[0] => 15
[1] => 2
)
)