WordPress canonical и пагинация произвольного запроса

Автор: | 01.12.2018

Wordpress и canonical при пагинации

Буквально сегодня требовалось решить проблему некорректного canonical, при наличии на странице пагинации, используя произвольный запрос WP_Query. И вот что получилось.

Короткая суть (предыстория):

  • в качестве главной страницы установлена статическая страница;
  • в контент главной страницы вставлен шорткод, который выводит записи с заданной меткой/метками;
  • для вывода таких записей используется произвольный запрос WP_Query();
  • внизу списка записей выводится пагинация, с помощью функции paginate_links()

Проблема:

при переходе по ссылке в пагинации, например, на страницу 2 — «site.com/page/2/», в canonical было «site.com/2/», т.е. отсутствовало «page/». Ну а site.com/2/ ведет на 404 ошибку.

Решение:

Для решения проблемы был использован фильтр «get_canonical_url» и небольшая функция

add_filter('get_canonical_url', 'wpd_set_canonical', 9, 2);

public function set_canonical($canonical_url, $post){
	global $wp_query;
		
	if($wp_query->is_paged){
		
		$canonical_url = get_permalink( $post );

		if ( $post->ID === get_queried_object_id() ) {
			$page = get_query_var( 'page', 0 );
			if ( $page >= 2 ) {
				if ( '' == get_option( 'permalink_structure' ) ) {
					$canonical_url = add_query_arg( 'page', $page, $canonical_url );
				} else {
					$canonical_url = trailingslashit( $canonical_url ) . user_trailingslashit( 'page/' . $page, 'single_paged' );
				}
			}
		}
		
	}
				
	return $canonical_url;		
}

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *