Beginner's Guide for WordPress / Start your WordPress Blog in minutes

How To Add a Read More Link to Copied Text in WordPress

You may have noticed how some popular websites (like eHow etc) will attach a “read more” link to any text that is copied from their site. This is a great way to get new users. Often folks are copying and pasting text from websites into email. Some use it to save the information for future, while others are just sharing it with their friends, family, and colleagues. In this article we are going to show you how you can easily add a “read more” link to any copied text from your WordPress blog, so you can get additional traffic.

Note: To see this in action, copy anything on this post and paste it in your email or notepad.

First thing you need to do is copy the following code into your theme’s functions.php file or a site-specific plugin:


function add_copyright_text() {
	if (is_single()) { ?>

<script type='text/javascript'>
function addLink() {
	if (
window.getSelection().containsNode(
document.getElementsByClassName('entry-content')[0], true)) {
    var body_element = document.getElementsByTagName('body')[0];
    var selection;
    selection = window.getSelection();
	var oldselection = selection
    var pagelink = "<br /><br /> Read more at WPBeginner: <?php the_title(); ?> <a href='<?php echo wp_get_shortlink(get_the_ID()); ?>'><?php echo wp_get_shortlink(get_the_ID()); ?></a>"; //Change this if you like
    var copy_text = selection + pagelink;
    var new_div = document.createElement('div');
	new_div.style.left='-99999px';
	new_div.style.position='absolute';

    body_element.appendChild(new_div );
    new_div.innerHTML = copy_text ;
    selection.selectAllChildren(new_div );
    window.setTimeout(function() {
        body_element.removeChild(new_div );
    },0);
}
}


document.oncopy = addLink;
</script>

<?php
}
}

add_action( 'wp_head', 'add_copyright_text');

Now, whenever someone comes to your website and tries to copy your content a read more link will be included along with it. Don’t forget to change the copyright text, and add your own site’s title there.

Edit: Initially we were grabbing the window URL, but as one of our users pointed out that it made the URLs look clunky. We have updated the code to only show it on single post pages, and use wp_shortlink. So it would use something like this: yoursite.com/?p=23. If you are using a customized shortlink like we are: wpbeg.in, then it will show the branded shortlink.

Disclosure: Our content is reader-supported. This means if you click on some of our links, then we may earn a commission. See how WPBeginner is funded, why it matters, and how you can support us.

The Ultimate WordPress Toolkit

Get FREE access to our toolkit – a collection of WordPress related products and resources that every professional should have!

Reader Interactions

57 CommentsLeave a Reply

  1. Hi, Thank you for your good information!

    I applied the code you have told me with BItly plugin to my website, but it works sometimes and doesn’t work sometimes.

    Does this code have relation with Cache plug-in? Can you tell me where in my website I should take a look?

  2. Hi,

    Thanks, it’s work fine on article on 2019, but it’s possible to make it work on custom post type?

    I have Eventon and WP News and Scrolling Widgets.

    • You would need to modify the is_single to is_singular and add the name of your custom post type

      Admin

  3. Do you have any advice on how to add Google tracking parameters to the end of each URL? Considering you’re already using ?p= for the post name at the end.

  4. Thanks for this, it works great for posts but when text is copied from events it doesn’t pull the URL of the page through – any advice? Thanks.

    • This is awesome. Thanks. When it says class – entry content, that meant it didn’t work for about 90% of the text on my site because my text didn’t use that class name. So if anyone else encounters this problem, you can change “entry content” to “body”. That’s what I did.
      var body_element = document.getElementsByTagName(‘body’)[0]; (line 13)
      Now it works everywhere.

  5. Thank you very much, all the text formatting were changed and pasted as a single line. But I need the text formatting as it is. So please help me in getting this.

  6. Just added the script into my wordpress blog, but I dont get an appendix at the clipbiards end…

    Any ideas? I am not sure, if its because I am working on a mac… but I guess the javascript should work on Firefox on a mac too… :-(

  7. While pasting it to blogger following error comes
    Error parsing XML, line 2237, column 96: The value of attribute “href” associated with an element type “a” must not contain the ‘<' character.
    Any Solutions ?
    Thanks.

  8. this feature makes copying and pasting more frustrating. For instance, if I copy and paste a headline for editing Wikipedia it can mess up formatting if I’m not careful and requires extra work.

  9. Anybody knows how to keep the format?

    When using this plugin all the spaces, line break and format goes away.

  10. Unfortunately, the code does not work with WP 3.8

    I have tested it on a fresh install. Please feel free to confirm this. Do you have any plans to update the code to make it function?

    • Hello,

      At first, I could not get this to work. But upon close examination, I figured out the culprit:

      On the 8th line of the code, you’ll see this:
      document.getElementsByClassName(‘entry-content’)[0], true))

      This is the line that tells the code, “hey, if anyone copies text from text with this class name, then put a read more link”

      All you need to do is use Firebug to figure out what class name your post content is under.

      I have a child theme that I’ve edited over and over again, so mine wasn’t the default, “entry-content”. I suspect your class name is different from that also.

      Good luck,
      Roselle

  11. Hello,

    Many thanks for this great article, but I have a problem. I would like to get the permalink and not the shorthen link. Anyone can tell me how can I do that?

    Cheers

  12. Does someone know how to do not show the “Read More Link” when the post title is copied?

    Thanks!

    • Yes it is possible. Change the selector tag from body to a div ID or what not. I have put the request in. Our developers will let me know, so I can update the article.

      Admin

      • Thanks. I’ve just tried with var div = document.getElementById(‘copyright’); in the line number 6 and adding de id=”copyright” to the div content, but I get the same result as with your code. Sorry, I am not a programmer.

  13. Interesting and useful; however, I was surprised that the copy test did not work (for me at least) when composing an email in Gmail — nothing showed after pasting the copied text, and the body text area in the compose email window just froze. Testing a copied bit in Notepad worked just fine, so I don’t know what the issue might be with Gmail.

    Thanks for the tip!

  14. That is good option Syed. Thanks for sharing. But if we can able to print short URL of the post means, that is even better for website owners.

    Currently it is printing long URL. If I came here by Feedburner newsletter subscription, the UTM tracking url also coming.

    Hope you understand. Is it possible?

      • That is fast and smart.

        One Question: Why you removed Author URL in the comment form? Always, I’m seeing, many of the WordPress powered blogs will give credit to the comment author at URL field with NoFollow attribute.

        Is there any specific reason for removing Author URI field? Or are there any experiments for Penguin update?

        Between, I’m not getting any comment notification, even after selecting the “Notify me of followup comments via e-mail” option.

  15. Wow, now this is a great tip! Makes it easy to quote and show attribution as well as drops a link for those who skim and steal content. Very cool!

Leave A Reply

Thanks for choosing to leave a comment. Please keep in mind that all comments are moderated according to our comment policy, and your email address will NOT be published. Please Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.