Я пытаюсь получить add_rewrite_rule
работу, чтобы извлечь параметр из URL и передать его на запрос. Посмотрел несколько постов об этом, но не могу заставить его работать.
Если URL-адрес начинается с определенной строки, я хотел бы удалить его из URL-адреса и передать в качестве параметров запроса.
Пример запроса URL:
http://domain.com/foo/my_page
Это будет преобразовано в
http://domain.com/my_page?param=foo
Если 'foo' отсутствует, он должен просто пройти как обычный запрос. Эта логика должна применяться к любому URL-адресу страницы или пользовательскому типу записи на моем сайте (обычно это foo / *). Думая, что это будет действовать как проход, если у URL есть «foo», удалите его, а затем просто перейдите к Wordpress, чтобы это стало нормой.
У меня уже есть «param» в качестве разрешенного query_vars.
В целом, это должно было бы работать для следующего:
- / foo / my_page (Page)
- / foo / my_folder / my_page (дополнительная страница)
- / foo / example_type (Пользовательский почтовый архив)
- / foo / example_type / example_post (Пользовательская запись, одиночная)
page
тип сообщения или просто какая-либо страница? как насчет родительских / дочерних страниц в иерархии?Ответы:
Основное правило, которое будет работать для вашего примера:
Это берет все, что приходит после,
foo/
и устанавливает это какpagename
для запроса, а затемparam
получает статическое значениеfoo
. Если вам нужны разные шаблоны URL, вам потребуются дополнительные правила для каждого уникального шаблона. Обратитесь кWP_Query
документации для различных вариантов запросов, которые могут быть установлены в правилах перезаписи. Не забудьте сбросить правила перезаписи после добавления новых. Это можно сделать, посетив страницу настроек постоянных ссылок.Теперь посещая ваш пример URL:
загрузит правильную страницу, но она не будет вести себя так же, как посещение:
потому что при использовании внутренних перезаписей,
param
устанавливается внутри$wp_query
объекта запроса, а не$_GET
суперглобальный. Если вам нужно работать с кодом, который ищет значение$_GET
, вам потребуется дополнительный шаг для установки этого значения:Другой метод, который следует рассмотреть, - это использование конечных точек, поэтому они
/foo/
должны быть в конце URL, а не в качестве префикса. Преимущество этого заключается в том, что APIadd_rewrite_endpoint
упрощает добавление всех необходимых вам правил, включая включение нумерации страниц.источник
Хорошо, я получил рабочие примеры для всех 3 типов запросов. Чтобы заставить их работать, потребовалось множество экспериментов и возни. Полагаю, Майло умеет подталкивать людей к ответам на их собственные вопросы.
После бесчисленных изменений и обновления постоянных ссылок я понял, что гораздо проще выяснить URL-адреса вне add_rewrite_url и, как только они сработают, определить перезапись. Примером является
index.php?param=foo&post_type=example_type
.Еще одна очевидная вещь, но добавление ее сюда, чтобы она могла помочь кому-то еще. Вы должны определить пользовательские правила типа add_rewrite_rule ПРЕЖДЕ ЧЕМ вы определяете правила подстановки для вашей страницы / подстраницы. Я потратил немало времени на это и думаю, что это главное, что заставило меня не понять, почему правила не сработали.
Вот 3 правила, которые работают во всех моих нуждах. Правило Page / Sub-Page было объединено в одно.
Кроме того, я создал цикл для добавления нескольких пользовательских правил типа записей. Помните, что вы должны определить пользовательские правила типа add_rewrite_rule ПРЕЖДЕ ЧЕМ вы определяете правила подстановки для вашей страницы / подстраницы.
Перепишите анализатор , который Майло прошел вдоль был весьма полезным при попытке лучше понять , как Wordpress запросов для страниц / сообщений.
источник