Многоязычные сайты на WordPress требуют особого подхода к пагинации, чтобы правильно отображать постраничную навигацию на разных языках без дублирования контента и с корректными URL. В этой статье мы подробно разберём технические моменты создания пагинации для многоязычных сайтов, используя популярные плагины перевода и собственные решения с WP_Query и WP-PageNavi.
Особенности пагинации на многоязычных сайтах WordPress
Пагинация на многоязычных сайтах усложняется из-за:
- Необходимости формировать URL с языковыми префиксами или параметрами.
- Отдельных запросов к базе для каждого языка.
- Избежания дублирования страниц и неправильных SEO-меток.
Например, если у вас есть постраничная навигация для блога, то на английской версии страницы пагинации должны иметь вид /en/blog/page/2/, а на русской — /ru/blog/page/2/. При этом нужно, чтобы пагинация корректно работала с фильтрами и сортировками для каждого языка отдельно.
Использование WPML и Polylang для пагинации
WPML: настройка пагинации с поддержкой языков
Плагин WPML автоматически добавляет языковые префиксы к URL, но пагинация требует правильного вызова WP_Query с учётом языка:
function wppagenavi_get_multi_language_query($paged) {
$lang = apply_filters('wpml_current_language', NULL);
$args = [
'post_type' => 'post',
'paged' => $paged,
'lang' => $lang, // важно указать язык
'posts_per_page' => 10
];
return new WP_Query($args);
}
Такой подход гарантирует, что пагинация будет работать именно с текущим языком. Для вывода пагинации используйте WP-PageNavi или стандартную paginate_links(), передавая в них параметры из этого запроса.
Polylang: правильное формирование URL пагинации
Для Polylang важно, чтобы URL пагинации учитывал язык, установленный в текущем интерфейсе:
function wppagenavi_polylang_pagination($paged) {
$current_language = pll_current_language();
$args = [
'post_type' => 'post',
'paged' => $paged,
'posts_per_page' => 10,
'lang' => $current_language
];
return new WP_Query($args);
}
При использовании функций пагинации нужно передавать базовый URL с языковым префиксом, который можно получить через pll_get_term($term_id, $current_language) или функции для получения текущего языка.
Кастомная пагинация для многоязычных запросов с WP-PageNavi
Если вы используете плагин WP-PageNavi, то для многоязычной пагинации следует корректно инициализировать WP_Query с языковыми параметрами, а затем выводить пагинацию так:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = wppagenavi_get_multi_language_query($paged);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
// вывод поста
endwhile;
wp_pagenavi(['query' => $query]);
endif;
wp_reset_postdata();
Для SEO и удобства пользователей важно, чтобы ссылки пагинации содержали корректные языковые префиксы, что обеспечивается правильной настройкой постоянных ссылок и интеграцией с плагином перевода.
Решение проблемы дублирования URL пагинации
Одной из частых проблем на многоязычных сайтах является дублирование страниц пагинации, когда одна и та же страница доступна по разным URL, что плохо сказывается на SEO. Чтобы избежать этого, рекомендуем:
- Использовать canonical URL с правильным языковым префиксом.
- Настроить редиректы с неверных URL на правильные.
- Проверять, что в
wp_head()выводятся правильные метатеги для каждой страницы.
Например, добавьте в файл functions.php следующий фильтр для корректного canonical URL на страницах пагинации:
add_filter('wpseo_canonical', 'wppagenavi_canonical_fix');
function wppagenavi_canonical_fix($canonical) {
if (is_paged()) {
global $wp;
$canonical = home_url($wp->request) . '/';
$paged = get_query_var('paged');
if ($paged > 1) {
$canonical = user_trailingslashit($canonical . 'page/' . $paged);
}
}
return $canonical;
}
Это особенно полезно при использовании SEO-плагинов, например Clearfy Pro, который помогает дополнительно оптимизировать URL.
Практические советы и рекомендации
При работе с пагинацией на многоязычных сайтах:
- Тестируйте пагинацию на всех языках, учитывая фильтры, сортировки и параметры URL.
- Используйте стандартные возможности плагинов перевода — WPML и Polylang имеют встроенную поддержку пагинации.
- Для сложных кастомных запросов всегда указывайте параметр языка в WP_Query.
- Следите за SEO-аспектами — canonical URL, noindex для дублирующих страниц, корректные hreflang.
- Если используете WP-PageNavi, передавайте в функцию объект запроса, а не глобальный запрос.
Соблюдая эти рекомендации, вы добьётесь удобной, корректной и SEO-дружелюбной пагинации для многоязычных сайтов на WordPress.