[Snippet] Zakázanie komentárov vo WordPresse
Firemný web alebo e-shop komentáre často nepotrebuje. Nikto pod nimi nediskutuje, zato každý deň pribúdajú spamové komentáre s odkazmi na pochybné stránky, ktoré treba mazať. Vypnutie v nastaveniach WordPressu platí len pre nové články a v administrácii nechá položky, ktoré nič nerobia. Krátky kód v tomto článku komentáre vypne na celom webe naraz, vrátane recenzií vo WooCommerce.
Čo kód urobí
- Vypne komentáre a spätné odkazy (trackbacky a pingbacky, automatické upozornenia z iných webov) pre všetky typy obsahu: články, stránky, prílohy aj produkty.
- Zatvorí komentáre aj pri starších článkoch a existujúce komentáre na webe skryje.
- Z menu administrácie odstráni položky Komentáre, Nastavenia > Diskusia a pri WooCommerce Produkty > Recenzie. Kto tieto stránky otvorí priamo cez adresu, skončí na nástenke.
- Odstráni ikonu komentárov z horného panela, widget Najnovšie komentáre a komentáre z nástenky. Vo widgete Aktivita zostanú naďalej nedávno publikované články.
- Vypne kanál RSS s komentármi a prístup ku komentárom cez REST API (rozhranie, cez ktoré si iné aplikácie čítajú obsah webu).
- Vo WooCommerce vypne recenzie aj hodnotenie hviezdičkami, na stránke produktu aj vo výpise produktov.
Kód
Kód vložte do súboru functions.php v odvodenej (child) téme, teda v téme, ktorá preberá vzhľad hlavnej témy a pri jej aktualizácii sa neprepíše. Ak odvodenú tému nemáte, poslúži doplnok na vkladanie kódu, napríklad Code Snippets. Kód začína rovno komentárom, bez úvodného <?php, takže ho môžete vložiť na koniec súboru za existujúci kód.
// úplné vypnutie komentárov vo WordPresse a recenzií vo WooCommerce
// vypnutie komentárov a spätných odkazov pre všetky typy obsahu
function jh_disable_comments_support() {
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' );
}
}
}
add_action( 'init', 'jh_disable_comments_support', 100 );
// komentáre sú zatvorené aj pri starších článkoch a existujúce sa nezobrazia
add_filter( 'comments_open', '__return_false', 20 );
add_filter( 'pings_open', '__return_false', 20 );
add_filter( 'comments_array', '__return_empty_array', 20 );
add_filter( 'get_comments_number', '__return_zero', 20 );
// odstránenie položiek Komentáre, Diskusia a Recenzie z menu administrácie
function jh_disable_comments_admin_menu() {
remove_menu_page( 'edit-comments.php' );
remove_submenu_page( 'options-general.php', 'options-discussion.php' );
remove_submenu_page( 'edit.php?post_type=product', 'product-reviews' );
}
add_action( 'admin_menu', 'jh_disable_comments_admin_menu', 999 );
// presmerovanie na nástenku, ak niekto otvorí tieto stránky priamo cez adresu
function jh_disable_comments_admin_redirect() {
global $pagenow;
$page = isset( $_GET['page'] ) ? sanitize_key( $_GET['page'] ) : '';
if ( in_array( $pagenow, array( 'edit-comments.php', 'comment.php', 'options-discussion.php' ), true ) || 'product-reviews' === $page ) {
wp_safe_redirect( admin_url() );
exit;
}
}
add_action( 'admin_init', 'jh_disable_comments_admin_redirect' );
// odstránenie ikony komentárov z horného panela
function jh_disable_comments_admin_bar( $wp_admin_bar ) {
$wp_admin_bar->remove_node( 'comments' );
}
add_action( 'admin_bar_menu', 'jh_disable_comments_admin_bar', 999 );
// skrytie počtu komentárov na nástenke v prehľade
function jh_disable_comments_count() {
return (object) array(
'approved' => 0,
'moderated' => 0,
'spam' => 0,
'trash' => 0,
'post-trashed' => 0,
'total_comments' => 0,
'all' => 0,
);
}
add_filter( 'wp_count_comments', 'jh_disable_comments_count', 20 );
// skrytie posledných komentárov na nástenke vo widgete Aktivita
function jh_disable_comments_dashboard( $comments, $query ) {
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
if ( $screen && 'dashboard' === $screen->id ) {
return $query->query_vars['count'] ? 0 : array();
}
return $comments;
}
add_filter( 'comments_pre_query', 'jh_disable_comments_dashboard', 10, 2 );
// odstránenie widgetu Najnovšie komentáre
function jh_disable_comments_widget() {
unregister_widget( 'WP_Widget_Recent_Comments' );
}
add_action( 'widgets_init', 'jh_disable_comments_widget', 20 );
// vypnutie RSS kanála s komentármi
add_filter( 'feed_links_show_comments_feed', '__return_false' );
function jh_disable_comments_feed() {
if ( is_comment_feed() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
}
add_action( 'template_redirect', 'jh_disable_comments_feed', 9 );
// vypnutie komentárov a recenzií v REST API
function jh_disable_comments_rest( $endpoints ) {
foreach ( array_keys( $endpoints ) as $route ) {
if ( 0 === strpos( $route, '/wp/v2/comments' ) || preg_match( '#/products/.*reviews#', $route ) ) {
unset( $endpoints[ $route ] );
}
}
return $endpoints;
}
add_filter( 'rest_endpoints', 'jh_disable_comments_rest' );
// WooCommerce: vypnutie recenzií a hodnotenia hviezdičkami
function jh_disable_woo_reviews_option() {
return 'no';
}
add_filter( 'pre_option_woocommerce_enable_reviews', 'jh_disable_woo_reviews_option' );
add_filter( 'pre_option_woocommerce_enable_review_rating', 'jh_disable_woo_reviews_option' );
Na webe bez WooCommerce môžete časti o recenziách v kóde nechať, nič nepokazia.
Čo kód nerobí
Existujúce komentáre nemaže. Zostanú v databáze, len sa nikde nezobrazujú. Kód funguje ako zamknuté dvere, nie ako vypratá izba. Keď ho odstránite, komentáre sa na webe znova objavia. Ak ich chcete zmazať natrvalo, urobte to ešte pred vložením kódu v menu Komentáre, prípadne si predtým spravte zálohu databázy.
Kód nemení ani nastavenia v databáze. Nastavenia Diskusie aj recenzií WooCommerce ostanú také, aké boli, kód ich len prekryje. Po jeho odstránení sa web vráti presne do pôvodného stavu.
Ako overiť, že kód funguje
- V administrácii zmizne z menu položka Komentáre a z horného panela ikona bubliny.
- Pod článkom, ktorý mal komentáre, sa nezobrazí formulár ani staré komentáre.
- Pri produkte vo WooCommerce chýba záložka Recenzie a hviezdičky.
- Adresa
vasadomena.sk/wp-json/wp/v2/commentsvráti chybu "rest_no_route" namiesto zoznamu komentárov.
Kontrolujte v anonymnom okne prehliadača a pri zapnutej vyrovnávacej pamäti (cache) ju po vložení kódu vyprázdnite. Inak môžete ešte chvíľu vidieť starú verziu stránky.
Zhrnutie
Ak komentáre na webe nepoužívate, je lepšie ich vypnúť úplne než len mazať spam. Kód vyššie ich vypne na všetkých miestach naraz, v administrácii, na webe, v RSS aj v REST API, a po jeho odstránení sa všetko vráti do pôvodného stavu. Ďalší kód na upratanie administrácie nájdete v článku o tom, ako skryť položku Platby z menu WooCommerce. Ak nechcete kód do webu vkladať sami, alebo chcete, aby sa o web niekto staral pravidelne, prečítajte si, prečo sa oplatí mať správcu webu, alebo mi rovno napíšte.