Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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);
}
});
@elhajdi
Copy link

elhajdi commented Nov 19, 2018

Thank you

@danielpost
Copy link

danielpost commented Dec 10, 2018

For anyone interested in this, I cleaned it up a little bit:

<?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);
    }
});

@VerdiH
Copy link

VerdiH commented Jan 9, 2019

Thank you @mattclements and @danielpost !

@nr1q
Copy link

nr1q commented Jan 16, 2019

Great, thanks! This worked for me to remove the comments icon in admin bar

add_action('wp_before_admin_bar_render', function() {
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu('comments');
});

@Afofaifo
Copy link

Afofaifo commented May 16, 2019

Great, Thanks!!
How can I hide comments (module,row or section) if the user is logged out

@creativeartbd
Copy link

creativeartbd commented Aug 1, 2019

Thanks, @mattclements and, @danielpost too.

@creativeartbd
Copy link

creativeartbd commented Aug 6, 2019

Can anyone tell me why the following line is not removed or hide existing comments?

// Hide existing comments
function df_disable_comments_hide_existing_comments($comments) {
$comments = array();
return $comments;
}
add_filter('comments_array', 'df_disable_comments_hide_existing_comments', 10, 2);

@lindenism
Copy link

lindenism commented Nov 3, 2019

Your code has a flaw! It does not remove existing comment count in admin bar.

function df_disable_comments_admin_menu() {
remove_menu_page('edit-comments.php');
}
add_action('init', 'df_disable_comments_admin_menu');

This code is not working and is broken. init should be admin-init.

See working code...

function df_disable_comments_admin_bar() {
if (is_admin_bar_showing()) {
remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60);
}
}
add_action('admin_init', 'df_disable_comments_admin_bar');

@mattclements
Copy link
Author

mattclements commented Nov 11, 2019

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
Copy link

thiendo commented Nov 13, 2019

  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
Copy link

EarthlingDavey commented Jan 30, 2020

Thank you.

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

@ChrisChiera
Copy link

ChrisChiera commented Feb 29, 2020

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

ramsesdelr commented Jun 16, 2020

Works perfectly, thanks!

@craigiswayne
Copy link

craigiswayne commented Oct 24, 2020

Thank you 👍

@manuki76
Copy link

manuki76 commented Dec 9, 2020

Thank you works great!

@svsdesign
Copy link

svsdesign commented Jan 12, 2021

Nice one - 👍

@flyingwebie
Copy link

flyingwebie commented Feb 2, 2021

Thanks million :D

@dexterski
Copy link

dexterski commented Apr 8, 2021

It works!

@SteaveRayvon
Copy link

SteaveRayvon commented Apr 19, 2021

thanks!

@robbiegod
Copy link

robbiegod commented Apr 23, 2021

Does this function prevent comment spam as well?

@SteaveRayvon
Copy link

SteaveRayvon commented May 17, 2021

Does this function prevent comment spam as well?
yes

@jadamec
Copy link

jadamec commented Jun 2, 2021

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
Copy link

glafarge commented Jun 6, 2021

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

erwinpratama commented Jun 19, 2021

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

@quasiDigi
Copy link

quasiDigi commented Jun 27, 2021

Thank @glafarge and @danielpost!

@AcademicHumber
Copy link

AcademicHumber commented Jun 28, 2021

Thanks, it worked 😄

@dave-slaughter
Copy link

dave-slaughter commented Nov 20, 2021

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

ShaneMuir commented Jan 18, 2022

Thank you!

@Azzamean
Copy link

Azzamean commented Feb 27, 2022

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
Copy link

jack-fdrv commented May 3, 2022

image
We also need to hide this info.

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