Пользовательское правило перезаписи нарушает нумерацию страниц - PullRequest
0 голосов
/ 01 ноября 2019

Я работал на веб-сайте WordPress, где все записи блога показываются на пользовательской странице / blog / с использованием пользовательского шаблона страницы с пользовательским запросом.

Имея это в виду, мне нужно было изменить URL-адрес публикации по умолчанию, чтобы включить в него дополнительный фрагмент. Например, "example.com/post-name/" станет "example.com/blog/post-name/".

. Выполнение этого через стандартную страницу" постоянные ссылки "не было вариантом для этого конкретного веб-сайта,поэтому я сделал это с помощью пользовательского правила перезаписи в моем файле function.php темы.

function add_rewrite_rules( $wp_rewrite ){
    $new_rules = array(
        'blog/(.+?)/?$' => 'index.php?post_type=post&name='. $wp_rewrite->preg_index(1),
    );

    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');

Это работало нормально, но разбило нумерацию страниц на моем / blog / page. Страница работает нормально, но разбиение на страницы на странице не работает с этим правилом перезаписи, поэтому при переходе на страницу «example.com/blog/page/2/» я получаю сообщение об ошибке 404.

Iпонял, что мне нужно обновить мое правило перезаписи до ИСКЛЮЧИТЬ экземпляры, где URL-адрес "/ blog / page / x /", потому что в данный момент мое правило перезаписи применяется ко всему, что является "/ blog / x".

При этом я не могу понять, как изменить свое правило перезаписи по мере необходимости. Я попытался:

function add_rewrite_rules( $wp_rewrite ){
    $new_rules = array(
        'blog/(.+?)/?$' => 'index.php?post_type=post&name='. $wp_rewrite->preg_index(1),
        'blog/page/([^/]+)/?' => 'index.php?pagename=blog&paged=$matches[1]',
    );

    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');

Я подумал, что если бы я определил второе правило, которое применяется к случаям, когда входящий URL-адрес "/ blog / page / xxx", то он переопределил бы исходное правило и позволил бы всем работатьправильно, но это не сработало.

Был бы признателен, если бы кто-нибудь мог помочь мне разобраться в этом!

РЕДАКТИРОВАТЬ 1:

Попытка реализовать решение, найденное в Правиле переписывания WordPress, для исключения определенного слага

function add_rewrite_rules( $wp_rewrite )
{
    $new_rules = array(
        'blog/(?!page)(.+?)/?$' => 'index.php?post_type=post&name='. $wp_rewrite->preg_index(1),
    );

    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules'); 

Это не сработало. Возможно, я реализовал это не в том месте .... не уверен.

1 Ответ

0 голосов
/ 01 ноября 2019

удалось заставить его работать сейчас со следующим кодом в моей функции:

'^blog/(?!.*page)([a-z-_]+)/?' => 'index.php?post_type=post&name='. $wp_rewrite->preg_index(1),
...