Сеошники рекомендуют использовать один вид адресов. Или со слешем на конце, или без него. В wordpress по умолчанию адреса работают со слешем в конце. Но иногда используется и вариант без слеша.
При использовании варианта без слеша в конце адреса иногда можно столкнутся со стандартными настройками wordpress. Например, в пагинации при использовании функции get_next_posts_link();, которая включает в себя функции next_posts_link(); и previous_posts_link();, вы увидите, что ссылка на первую страницу включает в себя слеш в конце адреса. При этом ссылку на вторую и последующие будут вида /page/2, page/3 и так далее. А находясь на второй или любой другой странице, адрес на первую страницу (например, в категориях или на странице новостей) будет вида site.ru/category/news/.
Что же делать в таком случае?
При поиске ответа на этот вопрос мы столкнулись с разными мнениями. Кто-то предлагал установить отдельный плагин, в котором была бы нужная функция. Кто-то над этим вопросом не заморачивается, т.к. настроен редирект со страниц со слешем в конце на страницы без слеша в конце. Но в таком случае у вас на сайте появляется лишний редирект с адреса site.ru/category/news/ на адрес site.ru/category/news. Не критично, но любители придираться к мелочам (такие, как мы) хотят, чтобы на сайте не было лишних редиректов. Были варианты и с решениями на несколько десятков строчек кода.
Мы нашли простой рабочий вариант.
В файл functions.php добавляем строку:
add_filter('get_pagenum_link','untrailingslashit');
Это всё, код работает.
Есть ещё пара рабочих вариантов по заверениям коллег.
Первый:
// Получаем HTML для ссылки. $previous_posts_link = get_previous_posts_link( __( 'текст ссылки', 'name' ) ); // Находим URL. preg_match( '/href="([^"]*)"/', $previous_posts_link, $matches ); // Удаляем слеш из URL. $original_url = $matches[1]; $trimmed_url = untrailingslashit( $original_url ); // Заменяем оригинальный URL на вариант без слеша. $previous_posts_link = str_replace( $original_url, $trimmed_url, $previous_posts_link ); // Выводим. echo $previous_posts_link;
В нашем случае этот способ не сработал, но кто-то упоминал, что он рабочий.
Ещё один способ, который мы не протестировали, также всего в одну строку:
add_filter('paginate_links','untrailingslashit');
Если вы протестируете, отпишитесь в комментариях, какой вариант сработал у вас.
Всем удачи!
add_filter(‘paginate_links’,’untrailingslashit’);
у меня этот сработал, благодарю
Спасибо. Сработал первый вариант. Удачи.