Как создать собственные URL-маршруты?
2 ответ
- голосов
-
- 2011-08-19
Добавьте его в файлfunctions.php своей темы или поместите его в плагин .
add_action ('init','wpse26388_rewrites_init'); function wpse26388_rewrites_init () { add_rewrite_rule ( 'свойства/([0-9] +)/? $', 'index.php?pagename=properties & amp;property_id=$ соответствует [1]', 'Топ' ); } add_filter ('query_vars','wpse26388_query_vars'); function wpse26388_query_vars ($ query_vars) { $ query_vars []='property_id'; вернуть $ query_vars; }
Это добавляет правило перезаписи,которое направляет запросы к
/properties/
с любой комбинацией чисел,следующих заpagenameproperties
,с запросом varproperty_id
установить. Просто не забудьте посетить страницу настроек постоянных ссылок и сохранить,чтобы очистить правила перезаписи,чтобы это новое правило было включено.В вашем шаблоне
page-properties.php
get_query_var ('property_id')
вернет идентификатор свойства,если он был установлен,если он не был установлен,тогда отобразятся свойства по умолчанию страница.Add this to your theme's functions.php, or put it in a plugin.
add_action( 'init', 'wpse26388_rewrites_init' ); function wpse26388_rewrites_init(){ add_rewrite_rule( 'properties/([0-9]+)/?$', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); } add_filter( 'query_vars', 'wpse26388_query_vars' ); function wpse26388_query_vars( $query_vars ){ $query_vars[] = 'property_id'; return $query_vars; }
This adds a rewrite rule which directs requests to
/properties/
with any combination of numbers following to pagenameproperties
, with the query varproperty_id
set. Just be sure to visit your permalinks settings page and save to flush rewrite rules, so this new rule will be included.In your
page-properties.php
template,get_query_var('property_id')
will return the property id if it was set, if it's not then show the default properties page.-
Это было БЛИЗКО для меня,но мне нужно было добавить: add_filter ('инициализация','flushRules'); functionflushRules () { глобальный $ wp_rewrite; $ wp_rewrite->flush_rules (); }This was CLOSE to working for me but I needed to add: add_filter('init','flushRules'); function flushRules(){ global $wp_rewrite; $wp_rewrite->flush_rules(); }
- 5
- 2012-11-13
- tooshel
-
@tooshel,вы определенно не хотите сбрасывать правила при каждом запросе,это дорогостоящая операция,которая замедлит сканирование вашего сайта.вам нужно очистить правила только один раз,при активации плагина или просто посетив страницу настроек постоянных ссылок.@tooshel you definitely don't want to flush rules on every request, it is an expensive operation and will slow your site to a crawl. you only need to flush rules once, on plugin activation, or just by visiting the permalinks settings page.
- 23
- 2012-11-13
- Milo
-
Да,я понял...но когда вы тестируете,приятно,что он есть!Yeah, I get that . . . but when you are testing it's nice that it's in there!
- 1
- 2012-11-14
- tooshel
-
Более умным регулярным выражением URL-адреса для перезаписи может быть `` ^properties/([0-9] +)/? ``.В противном случае это будет соответствовать чему-то вроде ``example/properties/1``A smarter rewrite url regexp might be ```^properties/([0-9]+)/?```. Otherwise it would match something like ```example/properties/1```
- 3
- 2014-12-12
- Ryan Taylor
-
@RyanTaylor,ты в этом уверен?он не захватывает `example/properties/1`,когда я его тестирую.@RyanTaylor are you sure about that? it doesn't capture `example/properties/1` when I test it.
- 0
- 2014-12-12
- Milo
-
Где находится файлpage-properties.php?Я положил его в каталог плагинов.Это правильно?What is location of page-properties.php file? I put it inside plugin directory. Is that right?
- 0
- 2016-06-30
- Farid Movsumov
-
Файлы темы @FeridMovsumov всегда загружаются из текущего каталога активной темы,если только вы [не добавите фильтр] (https://developer.wordpress.org/themes/basics/template-hierarchy/#filter-hierarchy),чтобы загрузить их из другого места.@FeridMovsumov theme files are always loaded from the current active theme directory, unless you [add a filter](https://developer.wordpress.org/themes/basics/template-hierarchy/#filter-hierarchy) to load them from elsewhere.
- 0
- 2016-06-30
- Milo
-
Привет @Milo,это прекрасный фрагмент кода.Вы знаете,как предотвратить конфликты при использовании $paged=(get_query_var ('paged'))?get_query_var ('paged'): 1;?Функция захватывает $page (и оставляет ее пустой),и я не могу продолжить разбиение на страницы.Hello @Milo, this is a beautiful piece of code. Do you know how to make this not clash when using $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ? The function is capturing $page (and leaving it blank) and I'm not able to continue paginating.
- 0
- 2017-08-08
- Jaypee
-
- 2017-05-21
Другой способ:
add_action('init', function() { add_rewrite_rule( '^properties/([0-9]+)/?', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); }, 10, 0); add_action('init', function() { add_rewrite_tag( '%property_id%', '([^&]+)' ); }, 10, 0);
Another way to do it:
add_action('init', function() { add_rewrite_rule( '^properties/([0-9]+)/?', 'index.php?pagename=properties&property_id=$matches[1]', 'top' ); }, 10, 0); add_action('init', function() { add_rewrite_tag( '%property_id%', '([^&]+)' ); }, 10, 0);
-
Принятый ответ работает с 4.7 (и 4.8),не знаю,почему вы думаете,что это не так.Ваш код по существу делает то же самое: add_rewrite_tag добавляет переменную запроса в тот же массив,что и фильтр query_vars.The accepted answer works with 4.7 (and 4.8), not sure why you think it doesn't. Your code is essentially doing the same thing, `add_rewrite_tag` adds the query var to the same array as the `query_vars` filter.
- 2
- 2017-07-07
- Milo
-
@Milo,наверное,у меня не сработало,но у меня под рукой нет 4.7,так что проверить не могу.Отредактирую свой ответ.@Milo it probably didn’t work for me, but I don’t have a 4.7 handy anymore so I can’t check. I will edit my answer.
- 0
- 2017-07-08
- Christian Lescuyer
-
@Milo Хотя я лично предпочитаю перезаписывать тег,но все же протестировал принятый ответ,и он работает.Но это лишь некоторые личные вкусы.@Milo Although I personally prefer rewrite tag, but still tested the accepted answer and it works. Just some personal tastes, though.
- 0
- 2017-07-08
- Jack Johansson
-
Теги перезаписи @JackJohansson необходимы,когда вы используете его [вpermastruct] (https://codex.wordpress.org/Function_Reference/add_permastruct).Это просто лишний бит данных,который WordPress никогда не использует в этом случае.@JackJohansson rewrite tags are necessary when you're using it [in a permastruct](https://codex.wordpress.org/Function_Reference/add_permastruct). It's just an extra bit of data that WordPress never uses in this case.
- 1
- 2017-07-08
- Milo
-
оба правила могут быть добавлены к одному и тому же методу,в результате чего получится более чистая и полезная функция,к которой можно вернуться и выяснить,выполняются ли работы по техническому обслуживанию.both rules can be added to the same method, ending up in a cleaner and more useful function to come back to and figure out if doing maintenance work
- 0
- 2018-07-14
- eballeste
У меня очень своеобразное требование,надеюсь,я смогу объяснить его,не слишком запутавшись.Я создал шаблон страницы,в котором перечисляю некоторые свойства,которые я получаю из внешнего XML-файла,пока нет проблем,допустим,URL-адрес такой:
У каждого свойства есть ссылка,которая должна перенаправлять пользователя на страницу «Отдельного свойства»,на которой отображается дополнительная информация о нем.Мне было интересно,есть ли способ сделать такую ссылку:
Где
123
- это идентификатор свойства.Поэтому,если у меня есть URL-адрес типаproperties/some_id
,я хочу иметь возможность загрузить файл представления (например,single.php
илиpage.php
файлы),но специфичны для этого условия URL.Возможно ли это?