Я работал на веб-сайте 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');
Это не сработало. Возможно, я реализовал это не в том месте .... не уверен.