Как убрать вывод слеша на конце адреса в пагинации wordpress?
Wordpress

Как убрать вывод слеша в конце адреса в пагинации?

Сеошники рекомендуют использовать один вид адресов. Или со слешем на конце, или без него. В 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');

Если вы протестируете, отпишитесь в комментариях, какой вариант сработал у вас.

Всем удачи!

2 комментария
  1. Web 1 год назад
    Ответить

    add_filter(‘paginate_links’,’untrailingslashit’);
    у меня этот сработал, благодарю

  2. Дмитрий 11 месяцев назад
    Ответить

    Спасибо. Сработал первый вариант. Удачи.

Оставить комментарий

Ваш email не будет опубликован.

Ещё статьи по теме
Pin It on Pinterest