-
-
Save mattclements/eab5ef656b2f946c4bfb to your computer and use it in GitHub Desktop.
<?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); | |
} | |
}); |
thanks!
Does this function prevent comment spam as well?
Does this function prevent comment spam as well?
yes
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
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);
}
});
Thanks you.
I want to disable my wordpress comment on my site.
Thank @glafarge and @danielpost!
Thanks, it worked 😄
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);
});
Thank you!
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...
Nice ! Thx :)
I need this for my site
@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');
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');
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,
];
});
}
});
You can disable comment feed with:
add_filter('feed_links_show_comments_feed', '__return_false');
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 :)
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
It works!