<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否

/*** WordPressが標準で出力しないページでcanonicalタグを出力する ***/
/* 標準では単一ページ（投稿・カスタム投稿タイプ）、固定ページは自動出力 */
function haup_output_canonical_archives() {
	global $paged;
	$canonical_url = '';

	// ブログ一覧ページ
	if ( is_home() ) {
		$canonical_url = home_url();
	} 
	// カテゴリーアーカイブ
	elseif ( is_category() ) {
		$term = get_queried_object();
		$canonical_url = get_category_link( $term->term_id );
	} 
	// タグアーカイブ
	elseif ( is_tag() ) {
		$term = get_queried_object();
		$canonical_url = get_tag_link( $term->term_id );
	}
	// カスタムタクソノミーアーカイブ
	elseif ( is_tax() ) {
		$term = get_queried_object();
		$canonical_url = get_term_link( $term->term_id, $term->taxonomy );
	}
	// 投稿者アーカイブ
	elseif ( is_author() ) {
		$author_id = get_queried_object_id();
		$canonical_url = get_author_posts_url( $author_id );
	}
	// 日付アーカイブ
	elseif ( is_date() ) {
		if ( is_day() ) {
			$canonical_url = get_day_link( get_the_time('Y'), get_the_time('m'), get_the_time('d') );
		} elseif ( is_month() ) {
			$canonical_url = get_month_link( get_the_time('Y'), get_the_time('m') );
		} elseif ( is_year() ) {
			$canonical_url = get_year_link( get_the_time('Y') );
		}
	}
	// 検索結果ページ
	elseif ( is_search() ) {
		$canonical_url = get_search_link();
	}

	// ページネーション対応
	if ( $canonical_url && $paged > 1 ) {
		$canonical_url = trailingslashit( $canonical_url ) . 'page/' . $paged . '/';
	}

	// canonicalタグを出力
	if ( $canonical_url ) {
		echo '<link rel="canonical" href="' . esc_url( $canonical_url ) . '">' . "\n";
	}
}
add_action( 'wp_head', 'haup_output_canonical_archives' );