Reacties in WordPress echt uitschakelen, niet half
De instelling in WordPress zet alleen reacties op nieuwe berichten uit. Bestaande pagina's, de reactiefeed en de REST-route blijven gewoon open staan.
Op de meeste zakelijke sites voegen reacties niets toe. Je krijgt er geen gesprek mee op gang, wel dertig spamberichten per week over horloges en cryptomunten. En elk reactieformulier is een openbaar formulier dat zonder inloggen data naar je database stuurt.
Uitzetten dus. Alleen doet dat vinkje in de instellingen minder dan je denkt.
Wat de instelling wel en niet doet
Onder Instellingen, Discussie staat “Mensen toestaan reacties te plaatsen op nieuwe berichten”. Haal je dat vinkje weg, dan geldt dat alleen voor berichten die je daarna aanmaakt.
Alles wat er al staat houdt zijn eigen instelling. Elk bericht heeft namelijk een eigen comment_status in de database, en die is bij het opslaan overgenomen van de toenmalige standaard. Honderd oude berichten blijven dus vrolijk reacties aannemen.
Drie dingen dus: nieuwe berichten, bestaande berichten, en de routes eromheen.
Stap 1: de standaard uitzetten
Ga naar Instellingen, Discussie en haal de vinkjes weg bij:
- Proberen elke blog te melden die in het bericht gelinkt is
- Linkmeldingen van andere blogs toestaan
- Mensen toestaan reacties te plaatsen op nieuwe berichten
Die eerste twee gaan over pingbacks en trackbacks. Ook een spamkanaal, en niemand gebruikt het nog.
Stap 2: alles wat er al staat dichtzetten
Met WP-CLI ben je in één regel klaar:
wp post list --post_type=post,page --format=ids | xargs wp post update --comment_status=closed --ping_status=closed
Geen SSH? Dan kan het via de admin. Ga naar Berichten, vink alles aan met de kop-checkbox, kies Bewerken bij Bulkacties en klik Toepassen. Zet Reacties op Niet toestaan en klik Bijwerken. Herhaal dat voor Pagina’s.
Let op dat je de bulkactie per pagina van de lijst moet doen. Staat je overzicht op twintig per pagina, zet dat dan eerst even hoger via de tabinstellingen rechtsboven.
Stap 3: de code die het definitief dichthoudt
De stappen hierboven zijn instellingen, en instellingen kunnen terugkomen. Importeer je later content, of zet een plugin iets terug, dan staat het weer open. Met een stukje code in je thema of in een kleine plugin sluit je het af op codeniveau.
<?php
/**
* Reacties uitschakelen.
*/
// Reacties en pingbacks dicht, ongeacht wat er in de database staat.
add_filter( 'comments_open', '__return_false', 20 );
add_filter( 'pings_open', '__return_false', 20 );
// Bestaande reacties niet meer tonen.
add_filter( 'comments_array', '__return_empty_array', 10 );
// Reactie-ondersteuning uit alle posttypes halen.
add_action( 'init', function () {
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' );
}
}
} );
// Het menu weg, en wie de URL intikt gaat terug naar het dashboard.
add_action( 'admin_menu', function () {
remove_menu_page( 'edit-comments.php' );
} );
add_action( 'admin_init', function () {
global $pagenow;
if ( 'edit-comments.php' === $pagenow ) {
wp_safe_redirect( admin_url() );
exit;
}
} );
// De reactie-teller uit de adminbalk.
add_action( 'wp_before_admin_bar_render', function () {
global $wp_admin_bar;
$wp_admin_bar->remove_node( 'comments' );
} );
// De REST-route waarmee je buiten de admin om kunt posten.
add_filter( 'rest_endpoints', function ( $endpoints ) {
unset( $endpoints['/wp/v2/comments'] );
unset( $endpoints['/wp/v2/comments/(?P<id>[d]+)'] );
return $endpoints;
} );
Zet dit in een eigen plugin in plaats van in functions.php. Wissel je ooit van thema, dan staat alles anders weer open op het moment dat je er niet aan denkt.
Stap 4: de oude spam opruimen
Reacties die er al staan blijven in je database zitten. Weg ermee:
wp comment delete $(wp comment list --format=ids) --force
Maak eerst een back-up. Dit is niet terug te draaien, en op een site met een echt archief gooi je zo per ongeluk iets weg dat er wel toe deed.
Waar het meestal misgaat
- Alleen het menu weghalen. Dat is puur cosmetisch. Het formulier en de REST-route blijven werken, je ziet de spam alleen niet meer binnenkomen.
- Bestaande berichten vergeten. Verreweg de meest voorkomende fout, en precies waar de spam vandaan blijft komen.
- Het reactieveld blijft zichtbaar. Sommige thema’s laden hun reactiesjabloon zonder
comments_open()te checken. Kijk dan in het thema zelf. - WooCommerce-reviews verdwijnen. Die lopen over hetzelfde systeem. Draai je een webshop, sluit
productdan uit in de foreach hierboven.
Tot slot
Een reactieplugin doet ongeveer hetzelfde als de code hierboven, maar dan met een instellingenpagina erbij. Wil je er niet over nadenken, prima keuze. Vind je het onnodig om een plugin te draaien voor iets dat twintig regels is, dan weet je nu wat die twintig regels zijn.