wp_get_canonical_url( int|WP_Post $post = null ): string|false

Returns the canonical URL for a post.

Description

When the post is the same as the current requested page the function will handle the pagination arguments too.

Parameters

$postint|WP_Postoptional
Post ID or object. Default is global $post.

Default:null

Return

string|false The canonical URL. False if the post does not exist or has not been published yet.

Source

function wp_get_canonical_url( $post = null ) {	$post = get_post( $post );	if ( ! $post ) {	return false;	}	if ( 'publish' !== $post->post_status ) {	return false;	}	$canonical_url = get_permalink( $post );	// If a canonical is being generated for the current page, make sure it has pagination if needed.	if ( get_queried_object_id() === $post->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, 'single_paged' );	}	}	$cpage = get_query_var( 'cpage', 0 );	if ( $cpage ) {	$canonical_url = get_comments_pagenum_link( $cpage );	}	}	/** * Filters the canonical URL for a post. * * @since 4.6.0 * * @param string $canonical_url The post's canonical URL. * @param WP_Post $post Post object. */	return apply_filters( 'get_canonical_url', $canonical_url, $post ); } 

Hooks

apply_filters( ‘get_canonical_url’, string $canonical_url, WP_Post $post )

Filters the canonical URL for a post.

Changelog

VersionDescription
4.6.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.