Чтение значения параметра из 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
)
)