get_canonical_urlхук-фильтрWP 4.6.0

Позволяет изменить каноническую ссылку выводимую WordPress для постов.

Метатег сanonical используется поисковыми системами только в одном случае: когда поисковая система, обнаружила дублирующий контент, и при этом у неё не достаточно своих оснований для выбора каноничного адреса. Во всех других случаях, canonical игнорируется.

Использование

add_filter( 'get_canonical_url', 'wp_kama_get_canonical_url_filter', 10, 2 );

/**
 * Function for `get_canonical_url` filter-hook.
 * 
 * @param string  $canonical_url The post's canonical URL.
 * @param WP_Post $post          Post object.
 *
 * @return string
 */
function wp_kama_get_canonical_url_filter( $canonical_url, $post ){

	// filter...
	return $canonical_url;
}
$canonical_url(строка)
Каноническая ссылка поста.
$post(WP_Post)
Объект поста.

Примеры

1

#1 Изменим каноническую ссылку поста

Допустим мы изменили ЧПУ записей и добавили в правила параметр запроса post_subpage, который содержит в себе дочернюю страницу текущей записи.

Например:
/my-post/ - URL записи.
/my-post/gallery/ - URL статичной дочерней страницы записи.

По умолчанию для таких нестандартных записей метатег canonical будет такой же как для записи. Но это ведь отдельные страницы с отличающимся контентм и каноническая ссылка также должна отличаться.

Чтобы у таких страниц была своя каноническая ссылка создадим следующий хук:

add_filter( 'get_canonical_url', 'subpages_canonical', 10, 2 );

function subpages_canonical( $canonical_url, $post ){

	if( $subpage = get_query_var('post_subpage') ){
		$canonical_url = user_trailingslashit( rtrim( get_permalink( $post ), '/' ) ."/$subpage" );
	}

	return $canonical_url;
}
0

#2 Изменим каноническую ссылку пагинаций на главной странице

Нужно чтобы все ссылки пагинации на домашней странице вели на основную страницу.

Т.е. указем главную страницу https://example.com как каноническую для всех ссылок вида:

https://example.com/page/1
https://example.com/page/2
https://example.com/page/3 
// set home_page canonical for each home pagination link
add_filter( 'get_canonical_url', 'wp_kama_get_canonical_url_filter', 10, 2 );
function wp_kama_get_canonical_url_filter( $canonical_url, $post ){

	if( is_front_page() && is_paged() ){
		return home_url();
	}

	return $canonical_url;
}
0

#3 Установим канонический УРЛ для записи из произвольного поля

Допустим у нас есть мета-поле поста, canonical_url в котором мы указываем произвольный канонический УРЛ (если нужно). Чтобы это поле начало работать нужно добавить такой хак:

// change post canonical url if it specified for a post in post meta field
add_filter( 'get_canonical_url', 'wpkama_change_post_canonical_url', 10, 2 );
function wpkama_change_post_canonical_url( $canonical_url, $post ) {

	$url = get_post_meta( $post->ID, 'canonical_url', true );
	if ( $url ) {
		$canonical_url = $url;
	}

	return $canonical_url;
}

Список изменений

С версии 4.6.0 Введена.

Где вызывается хук

wp_get_canonical_url()
get_canonical_url
wp-includes/link-template.php 4073
return apply_filters( 'get_canonical_url', $canonical_url, $post );

Где используется хук в WordPress

Использование не найдено.