Как создать настраиваемые маршруты URL?

У меня очень своеобразное требование, надеюсь, я могу объяснить это, не будучи слишком запутанным. Я создал шаблон страницы, где я перечисляю некоторые свойства, которые я получаю из внешнего XML-файла, до сих пор нет проблем, скажем, URL-адрес выглядит следующим образом: http://www.mysite.com/properties/

Каждое свойство имеет ссылку, которая должна перенаправлять пользователя на страницу «Единственное свойство», которая отображает больше информации об этом, что мне было интересно, если есть способ сделать ссылку вроде этого http://www.mysite.com/properties/123 ? Где «123» будет идентификатором свойства, в основном, если у меня есть url like properties /some_id, я хочу иметь возможность загружать файл вида (например, файлы single.php или page.php), но специфичные для этого условия URL-адреса .

Возможно ли это? Спасибо заранее!

41 голос | спросил javiervd 20 AM00000020000000831 2011, 02:24:08

2 ответа


48

Добавьте это в функции functions.php вашей темы или поместите его в плагин .

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;
}

Это добавляет правило перезаписи, которое направляет запросы на /properties/ с любой комбинацией чисел, следующих для свойств pagename properties, с запросом var property_id set. Просто не забудьте посетить страницу настроек постоянных ссылок и сохранить, чтобы сбросить правила перезаписи, поэтому это новое правило будет включено.

В вашем шаблоне page-properties.php get_query_var('property_id') вернет идентификатор свойства, если он был установлен, если он не показывает свойства по умолчанию стр.

ответил Milo 20 AM00000030000002331 2011, 03:44:23
8

Другой способ сделать это:

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);

Codex Rewrite API /добавить правило перезаписи

Codex Rewrite API /добавить тег rewrite

ответил Christian Lescuyer 21 Maypm17 2017, 12:24:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132