С add_query_arg()
его помощью можно добавить дополнительные параметры к URL-адресу, а также легко создать правило перезаписи. Все идет нормально. Но проблема заключается в замене URL-адреса в WordPress.
Когда у меня есть URL, например:
www.mysite.com/?page_id=1&myvar=test
и я набираю этот URL в адресной строке браузера с активированными постоянными ссылками. Эта ссылка станет на:
www.example.com/pagename/?myvar=test
НО : что я хотел бы получить:
www.example.com/pagename/test
Наконец, я хотел бы использовать такой код:
<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>
что приведет к:
www.example.com/pagename/test
Как этого достичь? Я часами читал документы и не мог найти решение.
permalinks
url-rewriting
urls
user3114592
источник
источник
Ответы:
Просто столкнулся с такой же ситуацией и наткнулся на этот вопрос, пока гуглил.
Кажется, это невозможно. Само ядро просто добавляет строки в URL, если включены красивые постоянные ссылки, см. Https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571.
Для тех, кто заинтересован в этом: Вы можете сделать что-то подобное в своем коде:
Это решение также было рекомендовано Джоном Кейвом в комментарии к официальному блогу make: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686.
источник
WordPress не позволит вам сделать это легко. На самом деле, правила перезаписи - это ваш единственный способ достичь такого рода вещей в WordPress, а правила переписывания WordPress могут сильно запутаться, когда ваш сайт растет, потому что плагины и темы (и вы тоже) могут добавлять собственные правила перезаписи над существующими правилами в вашем ) установка сайта.
Решение @swissspidy будет работать, если у вас уже есть правило перезаписи для вашего ключа (myvar) и вы используете постоянные ссылки в первом условии, а затем откат к традиционным строкам запроса в отсутствие этих условий. @Johnathan Решение Joosten показывает, как правила переписывания могут стать очень и очень сложными в WordPress (представьте, что вы делаете это для всех ключей и значений строки запроса ...)
Я сталкивался с этой проблемой несколько раз прежде, работая над некоторыми проектами среднего размера для моих клиентов, и я смог добиться чего-то подобного, используя плагин под названием Obfusquer. Согласно веб-сайту, он маскирует все строки запроса WordPress с определенными пользователем секретными ключами, а также предоставляет хуки для расширенных пользовательских требований.
Забавно, его нет в репозитории плагинов WordPress, и я думаю, что вам понадобится подписка (которая, я думаю, действительно доступна, так как 1 единая лицензия будет работать даже при многоузловой установке), но здесь есть ссылка на нее, если вам нужно замаскировать / скрыть строки запроса в установках WordPress. У них также есть документация здесь .
Сейчас я использую плагин почти во всех моих проектах WordPress, надеюсь, он поможет вам. Приветствия.
источник
Решение Wordpress было бы добавить правила переписывания, чтобы сделать что-то вроде этого:
читать дальше: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule
источник