Как запретить Wordpress убирать знак «@» (@) из строки запроса URL? - PullRequest
2 голосов
/ 08 ноября 2011

Я пытаюсь передать адрес электронной почты на страницу WordPress следующим образом:

http://www.website.com/?email=fakeemail@yeahwho.com

Однако Wordpress превращает это в следующее:

http://www.website.com/?email=fakeemailyeahwho.com 

Я даже пытаюсь URL-кодировать еговот так:

http://www.website.com/?email=fakeemail%40yeahwho.com

Но Wordpress слишком умен и все равно удаляет% 40.

Я понимаю, что @ - это зарезервированный символ, но я все еще могу использовать версию в кодировке URL.Увы, Wordpress не хочет, чтобы это было так.

Как заставить Wordpress уважать знак @?Думаю, мне придется либо взломать внутренности, либо заняться магией mod_rewrite.

Ответы [ 4 ]

2 голосов
/ 09 ноября 2011

от http://www.webopius.com/content/137/using-custom-url-parameters-in-wordpress

Сначала добавьте это в файл functions.php вашей темы (или создайте для этого специальный плагин):

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

Затем попробуйте передать ?email=fakeemail-AT-yeahwho.com в URL, а затем преобразовать его обратно примерно так:

global $wp_query;
if (isset($wp_query->query_vars['email']))
{
    $getemail = str_replace( '-AT-', '@', $wp_query->query_vars['email']);
}
// now use $getemail

Это не будет работать только в очень редких случаях, когда электронное письмо содержит «-at-». Если вы обеспокоены этим, вы можете заменить его еще более непонятной строкой, например, -AT6574892654738-.

Каким бы ни было ваше окончательное решение, не взламывайте ядро, чтобы оно заработало. :)

1 голос
/ 14 февраля 2013

У меня была похожая проблема, и я смог изолировать проблему с плагином SEO.Я уверен, что плагин добавил фильтр к functions.php, но так как плагин не использовался, удаление плагина также решило проблему.

0 голосов
/ 01 мая 2015

У меня была похожая проблема сегодня, когда я пытался передать данные Mailchimp в Gravity Form в Wordpress.Я нашел решение.В первоначальном вопросе говорилось, что Wordpress также удалил% 40, но в данном случае это не для меня.

1) В Mailchimp создайте новый тег Merge.Я назвал мой 'Email Param' и * | EMAIL2 |*

2) Экспорт списка подписчиков

3) Скопируйте содержимое обычного столбца «email» в новый столбец «Параметр электронной почты».

4) Выполните поиск и замену всех символов @ на% 40

5) Импортируйте свой список и установите флажок «Автообновления» этого списка

6) ОбновитьВаш URL, чтобы включить новый параметр * | EMAIL2 |*

Это сработало для меня.

0 голосов
/ 07 мая 2013

У меня тоже была эта проблема, но она не была вызвана плагином. Это было результатом перенаправления 301, которое WordPress делает в отношении URL вашего сайта, имеющего или не имеющего www. в нем.

Если URL моего сайта был определен как http://www.mydomain.com, то это сработало бы, как и ожидалось: http://www.mydomain.com/?email=user@domain.com

Если пользователь зашел на сайт как: http://mydomain.com/?email=user@domain.com (ПРИМЕЧАНИЕ: нет www), тогда WordPress перенаправит на это: http://www.mydomain.com/?email=userdomain.com (ПРИМЕЧАНИЕ: символ @ с разделителями)

Мое решение заключалось в том, чтобы жестко закодировать редирект www в файле htaccess, чтобы у WordPress никогда не было возможности возиться с моим URL. На этой странице приведены примеры строк htaccess для перенаправления не www на www и наоборот: http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/

...