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


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

http://www.example.com/properties/

У каждого свойства есть ссылка, которая должна перенаправить пользователя на страницу "Одно свойство", на которой отображается дополнительная информация о нем. Мне было интересно, есть ли способ сделать ссылку такой:

http://www.example.com/properties/123

Где 123 будет идентификатор объекта недвижимости. Так что, если у меня есть URL-адрес, например properties/some_id Я хочу иметь возможность загружать файл представления (например, файлы single.php или page.php), но с учетом этого условия URL.

Возможно ли это?

Author: Jack Johansson, 2011-08-19

2 answers

Добавьте это в свою тему 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/ с любой комбинацией чисел, следующих за именем страницы properties, с установленным параметром запроса var property_id. Просто обязательно посетите страницу настроек постоянных ссылок и сохраните, чтобы удалить правила перезаписи, чтобы это новое правило было включено.

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

 75
Author: Milo, 2011-08-19 23:44:23

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

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

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

API перезаписи кодекса/добавить тег перезаписи

 10
Author: Christian Lescuyer, 2017-07-08 07:32:28