Intereting Posts
Вызов функции PHP в Javascript Заполнение многих флажков в древовидной структуре внутри раскрывающегося списка «Существует ошибка» при нажатии на некоторые страницы администрирования Silverstripe .htaccess переписать правило со статическими файлами дает мне 404, что мне не хватает? Laravel 5.1 – сводная таблица между тремя таблицами, лучший вариант? Больше параметра, чем ожидалось: нет ошибки в PHP? PHP – не удалось открыть поток: нет такого файла или каталога в wordpress woocommerce – показать и изменить поля учетной записи на странице проверки Проблемы cURL и Facebook Как заставить работать ссылки, независимо от местоположения в структуре каталогов? Синтаксис Symfony2 для вывода XML-данных Неожиданная ошибка T_STRING в PHP Создание SOAP-вызова с использованием PHP с телом XML Есть ли плагин PHP для разрешения входа через основные OpenIds и API входа? .htaccess сделать папку действовать как root?

Как передать дополнительные переменные в URL с помощью WordPress

У меня возникли проблемы с попыткой передать дополнительную переменную в URL-адрес моей установки wordpress.

Например /news?c=123

По какой-то причине он работает только на корневом сайте www.example.com?c=123 но он не работает, если URL-адрес содержит больше информации www.example.com/news?c=123 . У меня есть следующий код в файле functions.php в каталоге тем.

 if (isset($_GET['c'])) { setcookie("cCookie", $_GET['c']); } if (isset($_SERVER['HTTP_REFERER'])) { setcookie("rCookie", $_SERVER['HTTP_REFERER']); } 

Есть идеи?

Решение этой проблемы довольно мало. Сначала вы можете использовать плагин, если хотите:

  • WordPress Quickie: настраиваемый плагин строки запроса

Или код вручную, проверьте этот пост:

  • Передача параметров строки запроса в URL-адрес WordPress

Также проверьте:

  • add_query_arg

Чтобы сделать путешествие в оба конца «WordPress Way» на «front-end» (не работает в контексте wp-admin ), вам нужно использовать 3 функции WordPress:

  • add_query_arg () – для создания URL с новой переменной запроса ('c' в вашем примере)
  • фильтр query_vars – изменить список переменных публичного запроса , о которых знает WordPress (это работает только в интерфейсе, поскольку запрос WP Query не используется на задней панели – wp-admin – поэтому это также будет недоступно в admin-ajax )
  • get_query_var () – для получения значения переменной пользовательского запроса, переданной в вашем URL-адресе.

Примечание: нет необходимости даже касаться суперглобалов ( $_GET ), если вы это сделаете.

пример

На странице, где вам нужно создать ссылку / установить переменную запроса:

если это ссылка на эту страницу, просто добавив переменную запроса

<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c ) )?>">

если это ссылка на другую страницу

<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c, site_url( '/some_other_page/' ) ) )?>">

В вашем файле functions.php или в каком-либо файле плагина или пользовательском классе (только для интерфейсов):

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

На странице / функции, где вы хотите получить и работать с запросом var, указанным в URL-адресе:

$my_c = get_query_var( 'c' );

На заднем конце ( wp-admin )

На задней панели мы никогда не запускаем wp() , поэтому основной запрос WP не запускается. В результате нет query vars и query_vars не запускается.

В этом случае вам нужно вернуться к более стандартным подходам к проверке $_GET . Лучший способ сделать это, вероятно:

$my_c = filter_input( INPUT_GET, "c", FILTER_SANITIZE_STRING );

хотя в крайнем случае вы могли бы сделать испытанное и истинное

$my_c = isset( $_GET['c'] ? $_GET['c'] : "";

или его вариант.

добавьте следующий код в function.php

 add_filter( 'query_vars', 'addnew_query_vars', 10, 1 ); function addnew_query_vars($vars) { $vars[] = 'var1'; // var1 is the name of variable you want to add return $vars; } 

то вы сможете использовать $ _GET ['var1']

Поскольку это часто посещаемый пост, я решил опубликовать свое решение, если оно поможет кому угодно. В WordPress наряду с использованием запросов vars вы также можете изменить permalinks так же, как это

 www.example.com?c=123 to www.example.com/c/123 

Для этого вам нужно добавить эти строки кода в файл functions.php или ваш основной файл плагина.

От пользователя shankhan's anwer

 add_filter( 'query_vars', 'addnew_query_vars', 10, 1 ); function addnew_query_vars($vars) { $vars[] = 'c'; // c is the name of variable you want to add return $vars; } 

Кроме того, это сократилось, чтобы добавить пользовательские правила перезаписи.

 function custom_rewrite_basic() { add_rewrite_rule('^c/([0-9]+)/?', '?c=$1', 'top'); } add_action('init', 'custom_rewrite_basic'); 

В случае, когда вам нужно добавить правила перезаписи для страницы с конкретными значениями, вы можете использовать этот пул страниц для написания правила перезаписи для этой конкретной страницы. Как и в вопросе О. П. спросил о

 www.example.com/news?c=123 to www.example.com/news/123 

Мы можем изменить его на желаемое поведение, добавив небольшую модификацию к нашей предыдущей функции.

 function custom_rewrite_basic() { add_rewrite_rule('^news/([0-9]+)/?', 'news?c=$1', 'top'); } add_action('init', 'custom_rewrite_basic'); 

Надеюсь, что это станет полезным для кого-то.

 <?php $edit_post = add_query_arg('c', '123', 'news' ); ?> <a href="<?php echo $edit_post; ?>">Go to New page</a> 

Вы можете добавить любую страницу в «новости».

Это был единственный способ заставить это работать

 add_action('init','add_query_args'); function add_query_args() { add_query_arg( 'var1', 'val1' ); } 

http://codex.wordpress.org/Function_Reference/add_query_arg

для добавления параметра для почтового URL (к perma link), я использую это:

 add_filter( 'post_type_link', 'append_query_string', 10, 2 ); function append_query_string( $url, $post ) { return $url.'?my_pid='.$post->ID; } 

вывод:

http://yoursite.com/pagename?my_pid=12345678

Одна из проблем, которые могут возникнуть, – is_home() возвращает true, когда зарегистрированный запрос_var присутствует в домашнем URL-адресе. Например, если http://example.com отображает статическую страницу вместо блога, http://example.com/?c=123 вернет блог.

См. https://core.trac.wordpress.org/ticket/25143 и https://wordpress.org/support/topic/adding-query-var-makes-front-page-missing/ для получения дополнительной информации об этом.

Что вы можете сделать (если вы не пытаетесь повлиять на запрос), используйте add_rewrite_endpoint() . Он должен запускаться во время действия init поскольку он влияет на правила перезаписи. Например.

 add_action( 'init', 'add_custom_setcookie_rewrite_endpoints' ); function add_custom_setcookie_rewrite_endpoints() { //add ?c=123 endpoint with //EP_ALL so endpoint is present across all places //no effect on the query vars add_rewrite_endpoint( 'c', EP_ALL, $query_vars = false ); } 

Это должно дать вам доступ к $_GET['c'] когда URL-адрес содержит больше информации, например, www.example.com/news?c=123 .

Не забудьте сбросить правила перезаписи после добавления / изменения этого параметра.