WordPress и параметры $_GET

19 мар. 2012 г., 20:36:18
Просмотры: 35.9K
Голосов: 5

Это странная проблема, с которой я раньше никогда не сталкивался в WordPress.

У меня есть сайт с включенными постоянными ссылками.

URL может быть http://mysite.com/page-name/?anyParamName=testing

затем, когда я использую print_r($_GET); или $_GET["anyParamName"], я получаю пустой массив или ничего соответственно.

Обычный PHP-файл работает нормально, так что это не проблема сервера. Делает ли WordPress что-то с перенаправлением GET-параметров? Действительно озадачен этим.

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

Куда вы вставляете print_r( $_GET ) и т.д.? В файл темы?

Boone Gorges Boone Gorges
19 мар. 2012 г. 21:01:01

Я пробовал это в разных местах файла шаблона page.php, даже перед заголовком.

wesbos wesbos
19 мар. 2012 г. 21:03:09

любой код в WordPress может делать $_GET = []; просто так, для развлечения.

Joel M Joel M
21 янв. 2020 г. 06:00:36
Все ответы на вопрос 4
3

Для пользовательских параметров вам необходимо зарегистрировать их в WordPress:

add_action('init','wpse46108_register_param');
function wpse46108_register_param() { 
    global $wp; 
    $wp->add_query_var('anyParamName'); 
}

Затем значение параметра 'anyParamName' можно получить с помощью функции get_query_var

$anyParamNameValue = get_query_var('anyParamName');
19 мар. 2012 г. 21:07:31
Комментарии

это не должно иметь никакого отношения к тому, что $_GET пуст..

Joel M Joel M
21 янв. 2020 г. 06:02:39

Верно, но он может извлечь значение до того, как $_GET будет очищен плагином/темой (предполагая, что именно это и происходит).

Stephen Harris Stephen Harris
24 апр. 2020 г. 22:07:37

этот ответ вводит в заблуждение и может быть воспринят так, будто именно так должны работать URL-параметры в WordPress, что не соответствует действительности

Tom J Nowell Tom J Nowell
17 янв. 2024 г. 19:53:34
0

Знаю, что это старый вопрос, но мы можем свободно получать доступ к любым POST/GET параметрам внутри хука 'init' (до того, как WordPress их изменит), и это задокументировано здесь, смотрите:

add_action( 'init', 'process_post' );

function process_post() {
     if( isset( $_POST['unique_hidden_field'] ) ) {
          // обрабатываем данные $_POST здесь, читаем и изменяем по необходимости
     }
}
24 июн. 2019 г. 10:42:18
0

Для того чтобы иметь возможность добавлять и работать с собственными пользовательскими переменными запроса, которые вы добавляете к URL-адресам (например: "http://example.com/some_page/?my_var=foo" — например, с использованием add_query_arg()), вам необходимо добавить их к публичным переменным запроса, доступным для WP_Query. Они формируются при создании экземпляра WP_Query, но, к счастью, передаются через фильтр 'query_vars', прежде чем будут использованы для заполнения свойства $query_vars класса WP_Query.

Таким образом, чтобы сделать вашу новую пользовательскую переменную запроса доступной для WP_Query, подключитесь к фильтру 'query_vars', добавьте вашу переменную запроса в массив $vars, который передаётся фильтром, и не забудьте вернуть массив в качестве результата вашей функции фильтра. Смотрите пример ниже:

function add_query_vars_filter( $vars ) {
  $vars[] = "my_var";
  return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );

Для получения дополнительной информации обратитесь к https://codex.wordpress.org/Function_Reference/get_query_var

24 июн. 2019 г. 12:56:00
1

У меня была такая же проблема:

  1. Страница, к которой я обращался, имела постоянную ссылку /focus.
  2. В основной папке находилась дочерняя папка с таким же именем (focus).

Загружалась правильная страница (а не папка), но массив _GET был пустым. Я переименовал папку (в файловой системе), и теперь массив _GET заполняется, как ожидалось.

19 янв. 2020 г. 10:30:08
Комментарии

интересно, не знал об этом.

Joel M Joel M
21 янв. 2020 г. 06:05:34