Specify custom canonical URL in WordPress Post
Asked Answered
B

2

6

We operate 1000's of websites, most of them are are made for specific sports events. Currently we have our writers write to all of them specifically for unique content.

However we have 2 major sites that cover all events in their verticals; and we would like to start syndicating content to the minisites, from these major sites.

To maintain best practices in Google's eyes, we would have to specify the original source of the article via the rel=canonical tag - however our current plugin AIOSEO (All-in-One SEO) doesn't support specifying canonical tags on a post, or page basis.

Is there a way to create such a function?

Burro answered 10/9, 2013 at 4:55 Comment(2)
can you please used this theblog.ca/custom-canonical-urls-wordpressSlider
Thanks! That seems to be what I'm looking for.Burro
S
6

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 tag
function 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 function
if( function_exists( 'rel_canonical' ) )
{
    remove_action( 'wp_head', 'rel_canonical' );
}
// replace the default WordPress canonical URL function with your own
add_action( 'wp_head', 'rel_canonical_with_custom_tag_override' );
Slider answered 10/9, 2013 at 5:46 Comment(1)
-1. This should, at the very least, credit the original source. In addition, the first function you copied (rel_canonical) is an example of WordPress's own internal function - not one that you should include in your custom function. This code needs to be explained and sourced.Leann
S
2

We can also add this for meta keywords, meta description and meta title

// function to insert All-in-One SEO Pack keywords
function 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 description
function 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;
}

Please check this URL for reference

Stovall answered 27/2, 2016 at 4:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.