New Bookstore! Save 20% on books with discount code: LAUNCH
Web Dev + WordPress + Security

WordPress Tip: Disable Comments in Old Posts via PHP

Just a quick WordPress snippet for future reference. I recently explained how to disable comments, pingbacks, and trackbacks via SQL. Here’s a good way to do it via PHP:

<?php 
function close_comments( $posts ) {
	if ( !is_single() ) { return $posts; }
	if ( time() - strtotime( $posts[0]->post_date_gmt ) > ( 30 * 24 * 60 * 60 ) ) {
		$posts[0]->comment_status = 'closed';
		$posts[0]->ping_status    = 'closed';
	}
	return $posts;
}
add_filter( 'the_posts', 'close_comments' ); 
?>

You can run this script as a plugin, through your theme’s functions.php, or through a custom user-functions.php file. Simply set the desired number of days by changing the number “30” to whatever you would like. As is, this script will close comments, pingbacks and trackbacks on all articles posted more than 30 days ago.

Jeff Starr
About the Author
Jeff Starr = Creative thinker. Passionate about free and open Web.
Digging Into WordPress: Take your WordPress skills to the next level.

8 responses to “WordPress Tip: Disable Comments in Old Posts via PHP”

  1. Nikhil G. 2008/07/08 5:22 pm

    Hi perishable..

    :D when i came at your site, for Apathy theme. It was quite absurd to see the blank page returned when you try to publish a comment.

    So, is there a way to use this script and if comments are closed for that particular post, then a “NO COMMENTS ON OLD POST” message or something like that is displayed. ??

    It become quite confusing else.

    Thanks,
    Nikhil G.

  2. Jeff Starr
    Jeff Starr 2008/08/04 8:15 am

    Hi Nikhil, somehow I missed this comment when it was first posted. I will look into the Apathy theme and see if I can figure out what’s happening with the comments.
    Regards,
    Jeff

  3. Jeff Starr
    Jeff Starr 2008/08/05 7:06 pm

    Nikhil, I just finished testing the Apathy theme. Everything seems to be working great. Commenting works perfectly on posts with open comments; posts with closed comments display a clear message indicating that comments are closed.

    Looking at the date that you left the comment on this post, I think my server may have been causing the problem. Every now and then a blank white page appears after posting a comment. This is an issue with my web host and in no way represents the functionality of any of my themes.

    I hope this helps resolve any confusion and/or frustration that you might have experienced while using the site. Please let me know if I may be of any additional assistance with this matter.

    Regards,
    Jeff

  4. Just today I decided I was sick of people commenting on really really old posts (like I’m doing right now). Well, not “sick”, but a lot of times it’s support requests for stuff I just can’t possibly keep up with, so I thought the best thing to do would be to just close up comments and people can directly contact me or use my forums if they need help.

    The above code, in a functions.php file as part of my theme, works absolutely perfectly.

  5. Jeff Starr
    Jeff Starr 2009/02/08 2:14 pm

    Hi Chris, I totally hear you. I had this script in place for awhile on a previous theme and it worked great. Lately I have been getting bombed again on old open posts. High time to drop this code into my current theme’s functions.php. Thanks for the reminder! :)

  6. This function works great, but it crashes my 404 error page.

    If this function is active and somebody makes a search with no results, 404 page should be shown, but instead of that I get a blank page with the ‘no comments allowed to this old post’ message.

    If I deactivate this function, everything works again. Im using wp 2.7.1.

  7. Jeff Starr
    Jeff Starr 2009/02/25 1:54 pm

    @DogDay: Newer versions of WordPress should use the built-in auto-disable feature tucked away in the “Discussion” area of the WP Admin. Otherwise, for older versions of WordPress, this method should work just fine.

  8. wp_developer 2011/06/18 7:33 am

    this function work fine but i have one issue I put the function in my theme function.php and I changed the time to 6 * 60 * 60 thats mean I want to disable the comment for post after 6 hours, my issue is when a user try to post a comment he will get a message tell him that the comments are close but when I display the posts with its all comments I see its been added there?

Comments are closed for this post. Something to add? Let me know.
Welcome
Perishable Press is operated by Jeff Starr, a professional web developer and book author with two decades of experience. Here you will find posts about web development, WordPress, security, and more »
Digging Into WordPress: Take your WordPress skills to the next level.
Thoughts
Take a screenshot with Firefox (no extension required). Open Developer Tools Settings and enable the “Take a screenshot” button. Then click the button :)
Take a screenshot with Chrome (no extension required). Open DevTools, type Cmd + Shift + P, then type screenshot.
After 10 years working on my 2010 iMac, my upgrade finally arrived. Shiny new iMac shipped from Ireland :)
Too much caffeine weirds me out. But I love the taste of coffee. So once in a while I enjoy a small cup of decaf. Hits the spot.
Chris Coyier is a truly awesome person. One of the finest people I've ever worked with. Just #gottasayit
Excel won't open CSV file because SYLK format? Open it with text editor and add an apostrophe ' at the beginning of the file, save changes, done.
Displaying too many social media buttons and links all over the place imho makes you look desperate and frankly kinda sad.
Newsletter
Get news, updates, deals & tips via email.
Email kept private. Easy unsubscribe anytime.