WordPress как на ладони
wordpress jino

rel_canonical() WP 2.9.0

Выводит тег link rel=canonical на экран. Автоматически используется во время события wp_head, чтобы вывести каноническую ссылку в head документа. Работает только для страниц типа is_singular().

Чтобы отключить эту ссылку в head части нужно удалить хук:

remove_action( "wp_head", "rel_canonical" );

Ссылка выводится в WordPress по умолчанию! С версии 2.3.

Работает на основе: wp_get_canonical_url()

Хуков нет.

Возвращает

Выводит на экран html тег <link rel='canonical' href='$link' />

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

rel_canonical();

Примеры

#1 Выведем в head часть каноническую ссылку

Добавим следующий код в header.php в head часть документа, чтобы на всех is_single() страницах вывести каноническую ссылку:

<?php rel_canonical(); ?>

// выведет: <link rel='canonical' href='$link' />\n

#2 Удаление канонических ссылок на страницах пагинации комментариев

На страницах пагинации комментариев канонический URL выглядит так: сайт.ru/about/comment-page-1/. Это не всегда хорошо, вроде бы, потому что контент записи в этом случае дублируется.

Чтобы это исправить используем такой код:

remove_action( 'wp_head', 'rel_canonical');
add_action( 'wp_head', 'kama_rel_canonical');
function kama_rel_canonical(){
	if ( ! is_singular() ) {
		return;
	}

	if ( ! $id = get_queried_object_id() ) {
		return;
	}

	$url = get_permalink( $id );

	$page = get_query_var( 'page' );
	if ( $page >= 2 ) {
		if ( '' == get_option( 'permalink_structure' ) ) {
			$url = add_query_arg( 'page', $page, $url );
		} else {
			$url = trailingslashit( $url ) . user_trailingslashit( $page, 'single_paged' );
		}
	}

	/* этот блок отвечает за пагинацию комментариев, поэтому его закроем
	$cpage = get_query_var( 'cpage' );
	if ( $cpage ) {
		$url = get_comments_pagenum_link( $cpage );
	}
	*/

	echo '<link rel="canonical" href="' . esc_url( $url ) . "\" />\n";
}

Подробно об этом коде я ответил в вопросе.

WordPress делает это автоматически! Это лишь демонстрация работы функции.

Код rel canonical: wp-includes/link-template.php WP 4.8.2

<?php
function rel_canonical() {
	if ( ! is_singular() ) {
		return;
	}

	$id = get_queried_object_id();

	if ( 0 === $id ) {
		return;
	}

	$url = wp_get_canonical_url( $id );

	if ( ! empty( $url ) ) {
		echo '<link rel="canonical" href="' . esc_url( $url ) . '" />' . "\n";
	}
}
rel_canonical Комментариев нет

Здравствуйте, !

Ваш комментарий