Specify custom canonical URL in WordPress Post
can you please used this code :
function rel_canonical() { if ( !is_singular() ) return; global $wp_the_query; if ( !$id = $wp_the_query->get_queried_object_id() ) return; $link = get_permalink( $id ); echo "<link rel='canonical' href='$link' />\n";}// A copy of rel_canonical but to allow an override on a custom tagfunction rel_canonical_with_custom_tag_override(){ if( !is_singular() ) return; global $wp_the_query; if( !$id = $wp_the_query->get_queried_object_id() ) return; // check whether the current post has content in the "canonical_url" custom field $canonical_url = get_post_meta( $id, 'canonical_url', true ); if( '' != $canonical_url ) { // trailing slash functions copied from http://core.trac.wordpress.org/attachment/ticket/18660/canonical.6.patch $link = user_trailingslashit( trailingslashit( $canonical_url ) ); } else { $link = get_permalink( $id ); } echo "<link rel='canonical' href='" . esc_url( $link ) . "' />\n";}// remove the default WordPress canonical URL functionif( function_exists( 'rel_canonical' ) ){ remove_action( 'wp_head', 'rel_canonical' );}// replace the default WordPress canonical URL function with your ownadd_action( 'wp_head', 'rel_canonical_with_custom_tag_override' );
We can also add this for meta keywords, meta description and meta title
// function to insert All-in-One SEO Pack keywordsfunction keyword_insert() { global $post; // VERY important! // Retrieve keyword meta data from the SEO Pack $seokeywords = stripslashes(get_post_meta($post->ID, '_aioseop_keywords', true)); // Default keywords in case none are specified for the page if (empty($seokeywords)) $seokeywords = "Homestar Runner, Strong Bad, The Cheat"; // Output the html code $seokeyword_block = "<meta name=\"keywords\" content=\"".$seokeywords."\"/>\n"; echo $seokeyword_block;}// function to insert All-in-One SEO Pack descriptionfunction description_insert() { global $post; // VERY important! // Retrieve description meta data from the SEO Pack $seodesc = stripslashes(get_post_meta($post->ID, '_aioseop_description', true)); // Default description in case none is specified for the page if (empty($seodesc)) $seodesc = "Oh! I am Homestar, and This is A Website!"; // Output the html code $seodesc_block = "<meta name=\"description\" content=\"".$seodesc."\"/>\n"; echo $seodesc_block;}function title_insert() { global $post; // VERY important! // Retrieve title meta data from the SEO Pack $seotitle = stripslashes(get_post_meta($post->ID, '_aioseop_title', true)); // Default description in case none is specified for the page if (empty($seotitle)) $seotitle = ""; // Output the html code $seotitle_block = "<title>".$seotitle."</title><meta name=\"title\" content=\"".$seotitle."\"/>\n"; echo $seotitle_block;}