07jun
21

No me refiero a eliminarlos de la plantilla para que no puedan comentar, ni siquiera a desactivarlos desde los ajustes de WordPress, me refiero a eliminar completamente los comentarios y cualquier referencia, incluso visual, a su existencia.

Está claro, los comentarios son parte de los blogs, esencia misma de la Web 2.0, pero hay ocasiones en que – sobre todo para trabajos a clientes – en que es posible que quieras quitar cualquier atisbo de que tal cosa siquiera existe.

En este raro, pero probable, caso, Frank ha elaborado un plugin cuyo código quita toda referencia a los comentarios, vamos, que dejan de existir en tu WordPress, no verá rastro ni cita alguna a los mismos.

Solo tienes que guardar este código con el nombre que quieras, subirlo a la carpeta ‘plugins’ de tu instalación de WordPress, activarlo y habrás eliminado totalmente los comentarios de tu WordPress.

<?php
/**
 * Plugin Name: Eliminar comentarios completamente
 * Plugin URI: http://bueltge.de/
 * Text Domain: remove_comments_absolute
 * Domain Path: /languages
 * Description: Desactiva las funciones de comentarios y quita todas sus referencias en la instalación de WordPress
 * Author: Frank Bültge
 * Version: 0.0.1
 * Licence: GPLv2
 * Author URI: http://bueltge.de
 * Upgrade Check: none
 * Last Change: 01.06.2011
 */
if ( ! class_exists( 'Remove_Comments_Absolute' ) ) {
	add_action( 'plugins_loaded', array( 'Remove_Comments_Absolute', 'get_object' ) );
	class Remove_Comments_Absolute {
		static private $classobj = NULL;
		/**
		 * Constructor, init on defined hooks of WP and include second class
		 *
		 * @access  public
		 * @since   0.0.1
		 * @uses    add_filter, add_action
		 * @return  void
		 */
		public function __construct () {
			add_filter( 'the_posts', array( $this, 'set_comment_status' ) );
			add_filter( 'comments_open', array( $this, 'close_comments', 10, 2 ) );
			add_filter( 'pings_open', array( $this, 'close_comments', 10, 2 ) );
			add_action( 'admin_init', array( $this, 'remove_comments' ) );
			add_filter( 'add_menu_classes', array( $this, 'add_menu_classes' ) );
			add_action( 'admin_head', array( $this, 'remove_comments_areas' ) );
			add_action( 'wp_before_admin_bar_render', array( $this, 'admin_bar_render' ) );
		}
		/**
		 * Handler for the action 'init'. Instantiates this class.
		 *
		 * @access  public
		 * @since   0.0.1
		 * @return  object $classobj
		 */
		public function get_object () {
			if ( NULL === self :: $classobj ) {
				self :: $classobj = new self;
			}
			return self :: $classobj;
		}
		/**
		 * Set the status on posts and pages - is_singular ()
		 *
		 * @access  public
		 * @since   0.0.1
		 * @uses    is_singular
		 * @param   string $posts
		 * @return  string $posts
		 */
		public function set_comment_status ( $posts ) {
			if ( ! empty( $posts ) && is_singular() ) {
				$posts[0]->comment_status = 'closed';
				$posts[0]->post_status = 'closed';
			}
			return $posts;
		}
		/**
		 * Close comments, if open
		 *
		 * @access  public
		 * @since   0.0.1
		 * @param   string | boolean $open
		 * @param   string | integer $post_id
		 * @return  string $posts
		 */
		public function close_comments ( $open, $post_id ) {
			// if not open, than back
			if ( ! $open )
				return $open;
			$post = get_post( $post_id );
			if ( $post -> post_type ) // all post types
				return FALSE;
			return $open;
		}
		/**
		 * Change options for dont use comments
		 * Remove meta boxes on edit pages
		 * Remove support on all post types for comments
		 * Remove menu-entries
		 *
		 * @access  public
		 * @since   0.0.1
		 * @uses    update_option, get_post_types, remove_meta_box, remove_post_type_support
		 * @return  void
		 */
		public function remove_comments () {
			// int values
			foreach ( array( 'comments_notify', 'default_pingback_flag' ) as $option )
				update_option( $option, 0 );
			// string false
			foreach ( array( 'default_comment_status', 'default_ping_status' ) as $option )
				update_option( $option, 'false' );
			// all post types
			// alternative define an array( 'post', 'page' )
			foreach ( get_post_types() as $post_type ) {
				// comment status
				remove_meta_box( 'commentstatusdiv', $post_type, 'normal' );
				// remove trackbacks
				remove_meta_box( 'trackbacksdiv', $post_type, 'normal' );
				// remove all commnts from tabels
				remove_post_type_support( $post_type, 'comments' );
			}
			// remove dashboard meta box for recents comments
			remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' );
			// Remove menu entries with WP 3.1 and higher
			if ( function_exists( 'remove_menu_page' ) ) {
				remove_menu_page( 'edit-comments.php' );
				remove_submenu_page( 'options-general.php', 'options-discussion.php' );
			} else {
				// unset comments
				unset( $GLOBALS['menu'][25] );
				// unset menuentry Discussion
				unset( $GLOBALS['submenu']['options-general.php'][25] );
			}
		}
		/**
		 * Add class for last menu entry with no 20
		 *
		 * @access  public
		 * @since   0.0.1
		 * @param   array string $menu
		 * @return  array string $menu
		 */
		function add_menu_classes ( $menu ) {
			$menu[20][4] .= ' menu-top-last';
			return $menu;
		}
		/**
		 * Remove areas for comments in backend via JS
		 *
		 * @access  public
		 * @since   0.0.1
		 * @return  string with js
		 */
		public function remove_comments_areas () {
			?>
			<script type="text/javascript">
			//<![CDATA[
			jQuery(document).ready( function($) {
				$( '.table_discussion' ).remove();
			});
			//]]>
			</script>
			<?php
		}
		/**
		 * Remove comment entry in Admin Bar
		 *
		 * @access  public
		 * @since   0.0.1
		 * @uses    remove_menu
		 * @return  void
		 */
		public function admin_bar_render () {
			// remove entry in admin bar
			$GLOBALS['wp_admin_bar'] -> remove_menu( 'comments' );
		}
	} // end class
} // end if class exists
?>

Lo que hace el plugin es lo siguiente:

  • Cierra todos los formularios de comentarios existentes
  • Quita los widgets relacionados con comentarios en el editor
  • Quita todos los enlaces a la gestión de comentarios de los menús de WordPress
  • Quita la columna de comentarios del Escritorio
  • Quita los ajustes de comentarios

Aquí tienes unas capturas de como queda de solito y desolado WordPress sin comentarios. Ahora tu decides, igual para algún proyecto te viene bien.

Para saber más:

  • http://twitter.com/cqpblog Grupo CQP

    Hola de nuevo… en la versión 3.1.2 tampoco funciona, arroja el mismo error.

    Javier

  • http://twitter.com/cqpblog Grupo CQP

    Espero que el primer comentario no se pierda, solo aparece el segundo pero la chicha estaba en el primero. :-(

  • Sarakey

    Me da mucha gracia ver en mi programa de feeds, dos articulos iguales: la version en ingles, Wp Engineer y Ayuda WordPress. Por cierto, no se citan fuentes.. que mal eh?

    • Alex

      @c1e5a420ad4fba147b61d29607f1461c:disqus, de verdad, esta muy mal!
      @Fernando, gracias para traducir nuestro articulo en espanol, pero no olvidas el fuente por favor!

      • http://fernandotellado.com Fernando

        Puse enlace a la fuente y al post

    • http://fernandotellado.com Fernando

      Si está citada, como siempre

      • Alex

        Gracias Fernando :)

    • http://fernandotellado.com Fernando

      Si está citada, como siempre

  • Pedrol3926

    A mi me pasa lo mismo que a vosotros

  • Strudel

    “Frank ha elaborado un plugin” ¿No sé si Sarakey y Alex se refieren a esto?

  • http://www.facebook.com/profile.php?id=1358200066 Camilo Rivero

    Si hace lo que promete, me parece un plugin ideal para muchos casos. Lo probaré y veré por qué saltan esos errores. Muchas gracias.

  • Rosandu

    gracias gracias gracias

  • http://www.adriandelucia.com.ar Adrian Delucia

    Hola Fernando, no sé si esta consulta corresponda dejar aquí pero no encuentro el lugar indicado.
    Justamente necesitaría saber cómo hacer para AGREGAR el formulario en
    cada post de mi blog porque el theme original por alguna razón no me los
    muestra y necesito que las personas dejen sus comentarios en cada uno de mis posts.
    Necesitas que te pase algún dato en especial? O puedo dirigirme a mi Editor de temasy copiar algun código en algún lado para que funcione?
    Desde ya muchas gracias.
    Adrian

    • http://fernandotellado.com Fernando

      ¿con otro tema si que sale el formulario?

      • http://www.adriandelucia.com.ar Adrian Delucia

        Investigando, encontré la forma de hacerlo. He agregado ?php comments_template(); ? en los lugares donde deseo que aparezca el formulario y funciona todo bien, tanto en las páginas como en los post.
        Desde ya muchas gracias por tu atención como siempre.
        Abrazo!
        Adrián

  • 23r9i0

    Referente al error por si os interesa solo teneis que usar la ultima version desde el gitgup
    https://github.com/bueltge/Remove-Comments-Absolutely/blob/master/remove-comments-absolute.php

  • 23r9i0

    Referente al error por si os interesa solo teneis que usar la ultima version desde el gitgup
    https://github.com/bueltge/Remove-Comments-Absolutely/blob/master/remove-comments-absolute.php

  • el contador

    Es cierto amigo 23r9i0:
    Yo tenía el mismo aviso de error, pero ví tu sugerencia, y ya Bueltge solucionó el problema con la version 2.0 del plugin.

  • Ffsfsfsfdsf

    Gracias 23e9i0, éste si que funciona!!!

  • Pingback: No comments Wordpress | Jose Orestes

  • http://www.facebook.com/profile.php?id=892495306 Kaira Diaz

    Muchas gracias!