Skip to content

Instantly share code, notes, and snippets.

@mattclements
Last active May 11, 2026 01:04
Show Gist options
  • Select an option

  • Save mattclements/eab5ef656b2f946c4bfb to your computer and use it in GitHub Desktop.

Select an option

Save mattclements/eab5ef656b2f946c4bfb to your computer and use it in GitHub Desktop.
Wordpress Disable Comments (add to function.php)
<?php
add_action('admin_init', function () {
// Redirect any user trying to access comments page
global $pagenow;
if ($pagenow === 'edit-comments.php') {
wp_redirect(admin_url());
exit;
}
// Remove comments metabox from dashboard
remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');
// Disable support for comments and trackbacks in post types
foreach (get_post_types() as $post_type) {
if (post_type_supports($post_type, 'comments')) {
remove_post_type_support($post_type, 'comments');
remove_post_type_support($post_type, 'trackbacks');
}
}
});
// Close comments on the front-end
add_filter('comments_open', '__return_false', 20, 2);
add_filter('pings_open', '__return_false', 20, 2);
// Hide existing comments
add_filter('comments_array', '__return_empty_array', 10, 2);
// Remove comments page in menu
add_action('admin_menu', function () {
remove_menu_page('edit-comments.php');
});
// Remove comments links from admin bar
add_action('init', function () {
if (is_admin_bar_showing()) {
remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60);
}
});
@mattclements

Copy link
Copy Markdown
Author

Thanks @danielpost!

I have updated the very old version that I had to yours, much cleaner and I think it covers all the other flaws that others have commented on.

@thiendo

thiendo commented Nov 13, 2019

Copy link
Copy Markdown
  1. Change setting in Settings > Discussion.
  2. Disable Comments section in Admin by adding this code to functions.php
function remove_menus() {
    remove_menu_page( 'edit-comments.php' );
}
add_action( 'admin_menu', 'remove_menus' );

@earthlingdavey

earthlingdavey commented Jan 30, 2020

Copy link
Copy Markdown

Thank you.

For a class that can be included then initialised with \x\Comments::initialise(); try this gist:
https://gist.github.com/EarthlingDavey/bc72015b23449a10e4476c2fe6a63fec

@TechRemarker

Copy link
Copy Markdown

Still shows in the admin bar. Updating that portion to this and appears to work: https://www.isitwp.com/remove-comments-link-from-admin-bar/.

@ramsesdelr

Copy link
Copy Markdown

Works perfectly, thanks!

@craigiswayne

Copy link
Copy Markdown

Thank you 👍

@manuki76

manuki76 commented Dec 9, 2020

Copy link
Copy Markdown

Thank you works great!

@svsdesign

Copy link
Copy Markdown

Nice one - 👍

@flyingwebie

Copy link
Copy Markdown

Thanks million :D

@dexterski

Copy link
Copy Markdown

It works!

@SteaveRayvon

SteaveRayvon commented Apr 19, 2021

Copy link
Copy Markdown

thanks!

@robbiegod

Copy link
Copy Markdown

Does this function prevent comment spam as well?

@SteaveRayvon

Copy link
Copy Markdown

Does this function prevent comment spam as well?
yes

@jadamec

jadamec commented Jun 2, 2021

Copy link
Copy Markdown

Thanks, but the last part Remove comments links from admin bar doesn't work for me. Comment icon is still showing in Admin Bar.

Wordpress 5.7.2

@glafarge

glafarge commented Jun 6, 2021

Copy link
Copy Markdown

You could also remove the submenu page Settings > Discussion from admin as no longer needed.

I updated @danielpost clean code, reflecting those changes :

<?php

/**
 * For example, copy the following to "wp-content/mu-plugins/disable-comments.php"
 * to use it as a "must-use plugin" (always-on and before "normals" plugins)
 */ 

add_action('admin_init', function () {
    // Redirect any user trying to access comments page
    global $pagenow;
    
    if ($pagenow === 'edit-comments.php' || $pagenow === 'options-discussion.php') {
        wp_redirect(admin_url());
        exit;
    }

    // Remove comments metabox from dashboard
    remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');

    // Disable support for comments and trackbacks in post types
    foreach (get_post_types() as $post_type) {
        if (post_type_supports($post_type, 'comments')) {
            remove_post_type_support($post_type, 'comments');
            remove_post_type_support($post_type, 'trackbacks');
        }
    }
});

// Close comments on the front-end
add_filter('comments_open', '__return_false', 20, 2);
add_filter('pings_open', '__return_false', 20, 2);

// Hide existing comments
add_filter('comments_array', '__return_empty_array', 10, 2);

// Remove comments page and option page in menu 
add_action('admin_menu', function () {
    remove_menu_page('edit-comments.php');
    remove_submenu_page('options-general.php', 'options-discussion.php');
});

// Remove comments links from admin bar
add_action('init', function () {
    if (is_admin_bar_showing()) {
        remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60);
    }
});

@erwinpratama

Copy link
Copy Markdown

Thanks you.
I want to disable my wordpress comment on my site.

@quasiDigi

Copy link
Copy Markdown

Thank @glafarge and @danielpost!

@AcademicHumber

Copy link
Copy Markdown

Thanks, it worked 😄

@dave-slaughter

dave-slaughter commented Nov 20, 2021

Copy link
Copy Markdown

Thanks, however the code to remove the comments menu from the admin bar doesn't work as the call to add_action wp_admin_bar_comments_menu doesn't happen until after the init hook. The correct hook to use is add_admin_bar_menus, which runs just after all the actions for the admin bar menus are added.

// Remove comments links from admin bar
add_action('add_admin_bar_menus', function () {
    remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60);
});

@ShaneMuir

Copy link
Copy Markdown

Thank you!

@Azzamean-zz

Copy link
Copy Markdown

If anyone uses a Multsite... they will notice the 'manage comments' are still in the top admin bar.

add_action( 'admin_bar_menu', 'remove_toolbar_items', PHP_INT_MAX -1 );
function remove_toolbar_items( $bar )
{
	// global $wp_admin_bar;
	// $wp_admin_bar->remove_node( 'blog-1-c' );
		
    $sites = get_blogs_of_user( get_current_user_id() );
    foreach ( $sites as $site )
    {
        $bar->remove_node( "blog-{$site->userblog_id}-c" );
    }
}

Worked for me to remove it. Comments is an example if you just wanted one...

@jack-fdrv

jack-fdrv commented May 3, 2022

Copy link
Copy Markdown

image
We also need to hide this info.

@amarineau

Copy link
Copy Markdown

Nice ! Thx :)

@masterewot

Copy link
Copy Markdown

I need this for my site

@drnickyoung

drnickyoung commented Dec 19, 2022

Copy link
Copy Markdown

@jack-fdrv You may have already found an answer but thought I'd comment in case. This does depend on the theme used but the following code works in many cases.

// Return a comment count of zero to hide existing comment entry link.
function zero_comment_count($count){
     return 0;
}
add_filter('get_comments_number', 'zero_comment_count');

@shanemac10

Copy link
Copy Markdown

Here's the collective code from this thread to date, as it worked for me...

<?php

add_action('admin_init', function () {
	// Redirect any user trying to access comments page
	global $pagenow;

	if ($pagenow === 'edit-comments.php' || $pagenow === 'options-discussion.php') {
		wp_redirect(admin_url());
		exit;
	}

	// Remove comments metabox from dashboard
	remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');

	// Disable support for comments and trackbacks in post types
	foreach (get_post_types() as $post_type) {
		if (post_type_supports($post_type, 'comments')) {
			remove_post_type_support($post_type, 'comments');
			remove_post_type_support($post_type, 'trackbacks');
		}
	}
});

// Close comments on the front-end
add_filter('comments_open', '__return_false', 20, 2);
add_filter('pings_open', '__return_false', 20, 2);

// Hide existing comments
add_filter('comments_array', '__return_empty_array', 10, 2);

// Remove comments page in menu
add_action('admin_menu', function () {
  remove_menu_page('edit-comments.php');
	remove_submenu_page('options-general.php', 'options-discussion.php');
});

// Remove comments links from admin bar
add_action('init', function () {
	if (is_admin_bar_showing()) {
		remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60);
	}
});

// Remove comments icon from admin bar
add_action('wp_before_admin_bar_render', function() {
	global $wp_admin_bar;
	$wp_admin_bar->remove_menu('comments');
});

// Return a comment count of zero to hide existing comment entry link.
function zero_comment_count($count){
	return 0;
}
add_filter('get_comments_number', 'zero_comment_count');

// Multisite - Remove manage comments from admin bar
add_action( 'admin_bar_menu', 'remove_toolbar_items', PHP_INT_MAX -1 );
function remove_toolbar_items( $bar )
{
	$sites = get_blogs_of_user( get_current_user_id() );
	foreach ( $sites as $site )
	{
		$bar->remove_node( "blog-{$site->userblog_id}-c" );
	}
}

I put mine in a separate file disable-comments.php and included it in functions.php, to make it more portable moving forward...

// Disable Comments
include('inc/disable-comments.php');

@dave-slaughter

Copy link
Copy Markdown

Nice work by this thread, so here's an additional improvement you might like.

I noticed 5 queries on wp_comments were running for each admin page, which can be removed. I put this in the "init" hook where I already have code inside an is_admin() test, but you don't need this test. Also, the filter can't go in the "admin_init" hook as that is too late as the queries will have already run.

add_action('init', function () {
	if (is_admin()) {
		// stop queries to count comments, which are called when the admin menu is displayed
		add_filter('wp_count_comments', function() {
			return (object) [
				'approved'       => 0,
				'moderated'      => 0,
				'spam'           => 0,
				'trash'          => 0,
				'post-trashed'   => 0,
				'total_comments' => 0,
				'all'            => 0,
			];
		});
	}
});

@OzzyCzech

Copy link
Copy Markdown

You can disable comment feed with:

add_filter('feed_links_show_comments_feed', '__return_false');

@earthlingdavey

Copy link
Copy Markdown

To hide the default first comment from the activity feed

add_filter( 'the_comments', '__return_empty_array' );

also

// Return a comment count of zero to hide existing comment entry link.
function zero_comment_count($count){
	return 0;
}
add_filter('get_comments_number', 'zero_comment_count');

can be shortened to:

add_filter('get_comments_number', '__return_zero');

Thanks folks :)

@janez33

janez33 commented Jul 30, 2024

Copy link
Copy Markdown

It's better to use this code taken from plugin Disable Comments (mu plugin version). Most up-to-date code.
https://gist.github.com/doiftrue/ab931c1d866cb113b4ff318a5faeb3b3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment