Неправильная маршрутизация с переписыванием WordPress - PullRequest
0 голосов
/ 29 июня 2018

У меня есть настройка страницы с постоянной ссылкой mydomain.com/events, в которой используется шаблон страницы. На этой странице отображаются все мои события, извлеченные из внешнего источника (поэтому не может быть пользовательским типом записи). Затем я настроил переписывание для обработки параметра категории в URL, а затем для отдельных событий.

add_action('init', 'mydomain_events_rewrite');
function mydomain_events_rewrite()
{
    add_rewrite_rule(
        '^events/categories/?$',
        'index.php?category=$matches[1]',
        'top'
    );

    add_rewrite_rule(
        '^events/?$',
        'index.php?event=$matches[1]',
        'top'
    );
}

add_filter('query_vars', 'mydomain_events_rewrite_var');
function mydomain_events_rewrite_var($vars)
{
    $vars[] = 'events';
    $vars[] = 'categories';
    return $vars;
} 

Таким образом, идея состоит в том, что категории просто предоставляют переменную категории на страницу событий, например mydomain.com/events/categories/film. И тогда отдельные события будут mydomain.com/events/123/my-epic-film.

Как есть, если я перехожу на mydomain.com/events, он просто перенаправляет меня на домашнюю страницу. Но если я использую URL перезаписи, mydomain.com/events/categories/film он переходит к 404. Где я тут ошибаюсь?

Спасибо!

1 Ответ

0 голосов
/ 29 июня 2018

Так что мне не хватало правильного регулярного выражения и страницы

add_rewrite_rule(
    '^events/category/([^/]*)/?',
    'index.php?pagename=events&category=$matches[1]',
    'top'
);

add_rewrite_rule(
    '^events/([^/]*)?',
    'index.php?pagename=events&event=$matches[1]',
    'top'
);
...