He creado una versión mejorada del código que debería resolver los problemas críticos que estabas experimentando. Este nuevo código:
- Se enfoca específicamente en los adjuntos: Añade tratamiento especial para desactivar los comentarios en archivos adjuntos e imágenes.
- Usa prioridades altas en los hooks: La mayoría de las funciones tienen prioridad 999 para asegurarse de que se ejecuten después de otros plugins.
- Simplifica el enfoque: Elimina algunas operaciones complejas de base de datos que podrían causar conflictos.
- Mejora el CSS: Amplía los selectores CSS para cubrir específicamente los comentarios en adjuntos e imágenes.
- Atiende la API REST correctamente: Usa un método más seguro para desactivar los endpoints de comentarios.
- Agregué una sección específica para attachments/media: Que garantiza que los comentarios se desactiven en archivos adjuntos.
Para usar este código:
- Elimina el snippet anterior que causaba el error
- Crea un nuevo snippet en el plugin Code Snippets
- Pega este nuevo código
- Nombra el snippet (por ejemplo "Desactivar comentarios mejorado")
- Asegúrate de que la opción "Ejecutar en todo el sitio" esté activada
- Guarda y activa
Este código debería funcionar sin errores críticos y desactivar completamente los comentarios en todo el sitio, con especial atención a las imágenes y archivos adjuntos.
/**
* Desactivar y ocultar comentarios en WordPress
*
* Este código desactiva completamente los comentarios en todos los tipos de contenido,
* incluyendo específicamente imágenes, archivos adjuntos, páginas y entradas.
* Versión optimizada para evitar errores críticos.
* by Ariapsa- Diseño y soporte web.
*/
// Desactivar comentarios en todo el sitio (enfoque simplificado)
function mi_deshabilitar_comentarios_completo() {
// Desactivar soporte para comentarios en todos los tipos de post
$tipos = get_post_types(['public' => true], 'names');
if (!empty($tipos)) {
foreach ($tipos as $tipo) {
if (post_type_supports($tipo, 'comments')) {
remove_post_type_support($tipo, 'comments');
remove_post_type_support($tipo, 'trackbacks');
}
}
}
// Especial atención a adjuntos (attachments)
if (post_type_supports('attachment', 'comments')) {
remove_post_type_support('attachment', 'comments');
}
// Filtrar para cerrar comentarios en todos los tipos de contenido
add_filter('comments_open', '__return_false', 99);
add_filter('pings_open', '__return_false', 99);
// Eliminar comentarios existentes de la visualización
add_filter('comments_array', '__return_empty_array', 99);
}
add_action('init', 'mi_deshabilitar_comentarios_completo', 99);
// Remover menú de comentarios y opciones relacionadas del panel de administración
function mi_remover_comentarios_admin() {
// Quitar menú de comentarios
remove_menu_page('edit-comments.php');
// Quitar conteo de comentarios pendientes del menú admin
add_action('admin_bar_menu', function($wp_admin_bar) {
$wp_admin_bar->remove_node('comments');
}, 999);
// Quitar metaboxes de comentarios
add_action('add_meta_boxes', function() {
$tipos = get_post_types(['public' => true], 'names');
foreach ($tipos as $tipo) {
remove_meta_box('commentsdiv', $tipo, 'normal');
remove_meta_box('commentstatusdiv', $tipo, 'normal');
}
}, 999);
// Ocultar sección de comentarios en Ajustes rápidos
add_action('admin_head', function() {
echo '<style>
.misc-pub-commentstatusdiv,
.misc-pub-comments,
.options-discussion-page,
.settings-discussion-page {
display: none !important;
}
</style>';
});
}
add_action('admin_init', 'mi_remover_comentarios_admin');
// Remover ajustes de discusión de las opciones
function mi_remover_opciones_discusion($caps) {
$caps['manage_options'] = true;
return $caps;
}
add_filter('comments_open', '__return_false');
add_filter('comments_array', '__return_empty_array');
// Ocultar todo lo relacionado con comentarios en el frontend
function mi_ocultar_comentarios_css() {
// CSS para ocultar cualquier elemento relacionado con comentarios
echo '<style>
/* Ocultar todo lo relacionado con comentarios */
.comments-area,
#comments,
.comment-respond,
.post-comments,
.comment-form,
#respond,
.comment-reply-link,
.comment-reply-title,
.commentlist,
.comments-link,
.comment-notes,
.logged-in-as,
.comment-form-comment,
.comment-form-author,
.comment-form-email,
.comment-form-url,
.comment-form-cookies-consent,
.form-submit,
.wp-block-comments,
.wp-block-comment-template,
.attachment-comments,
.attachment #comments,
.attachments-comments,
.attachment-comment-form {
display: none !important;
}
</style>';
}
add_action('wp_head', 'mi_ocultar_comentarios_css', 999);
add_action('admin_head', 'mi_ocultar_comentarios_css', 999);
// Desactivar widgets de comentarios
function mi_desactivar_widgets_comentarios() {
unregister_widget('WP_Widget_Recent_Comments');
}
add_action('widgets_init', 'mi_desactivar_widgets_comentarios', 999);
// Desactivar los comentarios en la API REST
function mi_desactivar_rest_comentarios() {
// Remover endpoints de comentarios en la API REST
add_filter('rest_endpoints', function($endpoints) {
if (isset($endpoints['/wp/v2/comments'])) {
unset($endpoints['/wp/v2/comments']);
}
if (isset($endpoints['/wp/v2/comments/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/comments/(?P<id>[\d]+)']);
}
return $endpoints;
});
}
add_action('rest_api_init', 'mi_desactivar_rest_comentarios', 999);
// Específicamente para attachments/media
function mi_quitar_comentarios_attachments() {
// Cerrar comentarios en todos los adjuntos existentes
global $wpdb;
$wpdb->query("UPDATE {$wpdb->posts} SET comment_status = 'closed', ping_status = 'closed' WHERE post_type = 'attachment'");
// Desactivar soporte para comentarios en adjuntos
remove_post_type_support('attachment', 'comments');
// Filtrar para eliminar comentarios en archivos adjuntos
add_filter('comments_open', function($open, $post_id) {
$post = get_post($post_id);
if ($post->post_type == 'attachment') {
return false;
}
return $open;
}, 999, 2);
}
add_action('init', 'mi_quitar_comentarios_attachments', 999);