Intereting Posts
Где я должен хранить отключенные плагины? Добавить gravatar в список авторов Отображение конкретных виджетах боковой панели на определенной странице Де-вздутие классов страниц Программно создавать страницу при сохранении персонализированного сообщения типа post Запрос по нескольким категориям Как установить статус сообщения в черновик, если он старше, чем сегодня Сортировка массива настраиваемого типа сообщений Повторно обрабатывать изображения API настроек – дезинфекция URL-адресов, адресов электронной почты и текста Получить URL-адреса для всех размеров изображения через панель администратора Параметры темы WP Editor Резервное копирование другой базы данных с помощью плагина BackUpWordPress Получение таблицы пользователей для одного сайта в многопользовательском режиме Как я могу получить список комментариев по целевым

Пользовательские параметры URL в файлах шаблонов

НАСТРОИТЬ

Я хочу вытащить переменную запроса из URL-адреса и использовать ее в моем единственном шаблоне публикации (single.php). Например: mysite.com/2011/07/29/testPost/?myvar=someValue

Для этого я добавил переменную пользовательского запроса в functions.php следующим образом:

add_filter('query_vars', 'parameter_queryvars' ); function parameter_queryvars( $qvars ) { $qvars[] = 'myvar'; return $qvars; } 

Затем в single.php и index.php я добавил следующий код, чтобы проверить, была ли установлена ​​настраиваемая переменная и эхо-строка, если true. Я также распечатал содержимое $ wp_query-> query_vars, чтобы я мог видеть, была ли моя пользовательская переменная:

 <?php global $wp_query; if( isset( $wp_query->query_vars['myvar'] )) { echo 'custom variable recognized'; } print_r($wp_query->query_vars); ?> 

ПРОБЛЕМА

Когда я получаю доступ к URL-адресу, например mysite.com/2011/07/29/testPost/?myvar=someValue, который использует шаблон single.php, команда echo не отображается, а вывод print_r () показывает, что мой 'myvar' отсутствует в списке query_vars.

Выход из single.php:

 Array ( [p] => 0 [page] => 0 [year] => 2011 [monthnum] => 7 [day] => 29 [name] => testpost [error] => [m] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [static] => [pagename] => [page_id] => 0 [second] => [minute] => [hour] => [w] => 0 [category_name] => [tag] => [cat] => [tag_id] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [fields] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [post_type] => [posts_per_page] => 150 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC [orderby] => wp_posts.post_date DESC ) 

Однако, когда я получаю доступ к URL-адресу, например mysite.com/?myvar=someValue, который использует шаблон index.php, выводится команда echo, и вы можете видеть первый вывод переменной print_r () – это «myvar», который я ищу для:

 Array ( [myvar] => someValue [error] => [m] => 0 [p] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [name] => [static] => [pagename] => [page_id] => 0 [second] => [minute] => [hour] => [day] => 0 [monthnum] => 0 [year] => 0 [w] => 0 [category_name] => [tag] => [cat] => [tag_id] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [fields] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [meta_query] => Array ( ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [post_type] => [posts_per_page] => 150 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC [orderby] => wp_posts.post_date DESC ) 

ВОПРОС

Зачем правильно настраивать пользовательскую переменную запроса на странице index.php, но не на single.php?

Я тестировал все отключенные плагины и пытался использовать постоянные ссылки по умолчанию, но получил те же результаты.

Solutions Collecting From Web of "Пользовательские параметры URL в файлах шаблонов"

global $wp_query объект global $wp_query не является тем, что вы ищете к моменту получения файла single.php. Вместо этого используйте global $wp объект global $wp . Попробуйте изменить свой код на это:

  global $wp; if (array_key_exists('myvar', $wp->query_vars) && isset($wp->query_vars['myvar'])){ echo 'custom variable recognized'; } print_r($wp->query_vars); 

Я сделал легкий выход и просто использовал что-то вроде этого:

 $user_id = $_GET['user_id']; $user = new WP_User($user_id); 

В шаблоне. Затем я мог бы вызвать этот шаблон с URL-адресом, подобным http://site.com/profile/?user_id=4 и он работает везде. Не как «полностью WordPress» в качестве фильтров, но он работает и довольно чист.

Я работаю над одной и той же проблемой, и я думаю, нам также нужно использовать add_query_arg для встраивания myvar = someValue в новый URL-адрес, который вы хотите вызвать (например, изнутри

$url_with_param = add_query_arg( 'myvar', 'someValue', site_url('/index.php/') ); <a href='$url_with_param'>Click Here</a>";

Add_filter просто делает ваш myvar доступным для чтения в цели, используя

$wp_query->query_vars['myvar']

Я знаю, что это не полное решение, но это важный шаг.