COMPLETADO: Fase 1 de la migración a Clean Architecture + POO ## Estructura de Carpetas - ✓ Estructura completa de 4 capas (Domain, Application, Infrastructure, Presentation) - ✓ Carpetas de Use Cases (SaveComponent, GetComponent, DeleteComponent, SyncSchema) - ✓ Estructura de tests (Unit, Integration, E2E) - ✓ Carpetas de schemas y templates ## Composer y Autoloading - ✓ PSR-4 autoloading configurado para ROITheme namespace - ✓ Autoloader optimizado regenerado ## DI Container - ✓ DIContainer implementado con patrón Singleton - ✓ Métodos set(), get(), has() para gestión de servicios - ✓ Getters específicos para ComponentRepository, ValidationService, CacheService - ✓ Placeholders que serán implementados en Fase 5 - ✓ Prevención de clonación y deserialización ## Interfaces - ✓ ComponentRepositoryInterface (Domain) - ✓ ValidationServiceInterface (Application) - ✓ CacheServiceInterface (Application) - ✓ Component entity placeholder (Domain) ## Bootstrap - ✓ functions.php actualizado con carga de Composer autoloader - ✓ Inicialización del DIContainer - ✓ Helper function roi_container() disponible globalmente ## Tests - ✓ 10 tests unitarios para DIContainer (100% cobertura) - ✓ Total: 13 tests unitarios, 28 assertions - ✓ Suite de tests pasando correctamente ## Validación - ✓ Script de validación automatizado (48/48 checks pasados) - ✓ 100% de validaciones exitosas La arquitectura base está lista para la Fase 2. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
254 lines
6.8 KiB
PHP
254 lines
6.8 KiB
PHP
<?php
|
|
/**
|
|
* Desactivar completamente el sistema de comentarios
|
|
*
|
|
* Este archivo desactiva completamente los comentarios en WordPress,
|
|
* tanto en el frontend como en el área de administración.
|
|
*
|
|
* @package ROI_Theme
|
|
* @since 1.0.0
|
|
* @link https://github.com/prime-leads-app/analisisdepreciosunitarios.com/issues/4
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Desactivar soporte de comentarios y pingbacks
|
|
*
|
|
* Cierra comentarios y pingbacks para todos los post types.
|
|
*
|
|
* @since 1.0.0
|
|
* @param bool $open Si los comentarios están abiertos o no.
|
|
* @return bool Siempre retorna false.
|
|
*/
|
|
function roi_disable_comments_status() {
|
|
return false;
|
|
}
|
|
add_filter('comments_open', 'roi_disable_comments_status', 20, 2);
|
|
add_filter('pings_open', 'roi_disable_comments_status', 20, 2);
|
|
|
|
/**
|
|
* Ocultar comentarios existentes
|
|
*
|
|
* Retorna un array vacío para ocultar cualquier comentario existente.
|
|
*
|
|
* @since 1.0.0
|
|
* @param array $comments Array de comentarios.
|
|
* @return array Array vacío.
|
|
*/
|
|
function roi_hide_existing_comments($comments) {
|
|
return array();
|
|
}
|
|
add_filter('comments_array', 'roi_hide_existing_comments', 10, 2);
|
|
|
|
/**
|
|
* Desactivar feeds de comentarios
|
|
*
|
|
* Remueve los enlaces de feeds de comentarios del head.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_disable_comment_feeds() {
|
|
// Remover enlaces de feeds de comentarios
|
|
remove_action('wp_head', 'feed_links_extra', 3);
|
|
|
|
// Desactivar feeds de comentarios
|
|
add_action('do_feed_rss2_comments', 'roi_disable_feed_comments');
|
|
add_action('do_feed_atom_comments', 'roi_disable_feed_comments');
|
|
}
|
|
add_action('init', 'roi_disable_comment_feeds');
|
|
|
|
/**
|
|
* Retornar error en feeds de comentarios
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_disable_feed_comments() {
|
|
wp_die(
|
|
esc_html__('Los comentarios están desactivados en este sitio.', 'roi-theme'),
|
|
esc_html__('Comentarios no disponibles', 'roi-theme'),
|
|
array(
|
|
'response' => 404,
|
|
'back_link' => true,
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Desactivar script de respuesta de comentarios
|
|
*
|
|
* Remueve el script comment-reply.js del frontend.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_disable_comment_reply_script() {
|
|
wp_deregister_script('comment-reply');
|
|
}
|
|
add_action('wp_enqueue_scripts', 'roi_disable_comment_reply_script', 100);
|
|
|
|
/**
|
|
* Remover menú de comentarios del admin
|
|
*
|
|
* Oculta el menú "Comentarios" del área de administración.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_remove_comments_admin_menu() {
|
|
remove_menu_page('edit-comments.php');
|
|
}
|
|
add_action('admin_menu', 'roi_remove_comments_admin_menu');
|
|
|
|
/**
|
|
* Remover comentarios de la admin bar
|
|
*
|
|
* Oculta el icono de comentarios de la barra de administración.
|
|
*
|
|
* @since 1.0.0
|
|
* @param WP_Admin_Bar $wp_admin_bar Instancia de WP_Admin_Bar.
|
|
*/
|
|
function roi_remove_comments_admin_bar($wp_admin_bar) {
|
|
$wp_admin_bar->remove_menu('comments');
|
|
}
|
|
add_action('admin_bar_menu', 'roi_remove_comments_admin_bar', 60);
|
|
|
|
/**
|
|
* Remover metabox de comentarios del editor
|
|
*
|
|
* Oculta el metabox de comentarios en el editor de posts y páginas.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_remove_comments_metabox() {
|
|
// Post types por defecto
|
|
remove_meta_box('commentstatusdiv', 'post', 'normal');
|
|
remove_meta_box('commentstatusdiv', 'page', 'normal');
|
|
remove_meta_box('commentsdiv', 'post', 'normal');
|
|
remove_meta_box('commentsdiv', 'page', 'normal');
|
|
remove_meta_box('trackbacksdiv', 'post', 'normal');
|
|
remove_meta_box('trackbacksdiv', 'page', 'normal');
|
|
|
|
// Aplicar a cualquier custom post type que pueda existir
|
|
$post_types = get_post_types(array('public' => true), 'names');
|
|
foreach ($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('admin_init', 'roi_remove_comments_metabox');
|
|
|
|
/**
|
|
* Ocultar columna de comentarios en listados del admin
|
|
*
|
|
* Remueve la columna de comentarios de los listados de posts/páginas.
|
|
*
|
|
* @since 1.0.0
|
|
* @param array $columns Columnas actuales.
|
|
* @return array Columnas modificadas sin comentarios.
|
|
*/
|
|
function roi_remove_comments_column($columns) {
|
|
unset($columns['comments']);
|
|
return $columns;
|
|
}
|
|
|
|
// Aplicar a posts y páginas
|
|
add_filter('manage_posts_columns', 'roi_remove_comments_column');
|
|
add_filter('manage_pages_columns', 'roi_remove_comments_column');
|
|
|
|
/**
|
|
* Desactivar widgets de comentarios
|
|
*
|
|
* Remueve los widgets relacionados con comentarios.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_disable_comments_widgets() {
|
|
unregister_widget('WP_Widget_Recent_Comments');
|
|
}
|
|
add_action('widgets_init', 'roi_disable_comments_widgets');
|
|
|
|
/**
|
|
* Remover estilos CSS de comentarios recientes
|
|
*
|
|
* Remueve los estilos inline del widget de comentarios recientes.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_remove_recent_comments_style() {
|
|
global $wp_widget_factory;
|
|
|
|
if (isset($wp_widget_factory->widgets['WP_Widget_Recent_Comments'])) {
|
|
remove_action('wp_head', array(
|
|
$wp_widget_factory->widgets['WP_Widget_Recent_Comments'],
|
|
'recent_comments_style'
|
|
));
|
|
}
|
|
}
|
|
add_action('widgets_init', 'roi_remove_recent_comments_style');
|
|
|
|
/**
|
|
* Redireccionar URLs de comentarios (opcional)
|
|
*
|
|
* Si alguien intenta acceder directamente a URLs de comentarios,
|
|
* redirigir al post padre.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_redirect_comment_urls() {
|
|
if (is_comment_feed()) {
|
|
wp_safe_redirect(home_url(), 301);
|
|
exit;
|
|
}
|
|
}
|
|
add_action('template_redirect', 'roi_redirect_comment_urls');
|
|
|
|
/**
|
|
* Prevenir nuevos comentarios via REST API
|
|
*
|
|
* Desactiva endpoints de comentarios en REST API.
|
|
*
|
|
* @since 1.0.0
|
|
* @param array $endpoints Endpoints disponibles.
|
|
* @return array Endpoints sin comentarios.
|
|
*/
|
|
function roi_disable_comments_rest_api($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_filter('rest_endpoints', 'roi_disable_comments_rest_api');
|
|
|
|
/**
|
|
* Ocultar opciones de comentarios en el dashboard
|
|
*
|
|
* Remueve metaboxes de comentarios del dashboard.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function roi_remove_dashboard_comments() {
|
|
remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');
|
|
}
|
|
add_action('admin_init', 'roi_remove_dashboard_comments');
|
|
|
|
/**
|
|
* Desactivar notificaciones de comentarios
|
|
*
|
|
* Previene el envío de emails de notificación de comentarios.
|
|
*
|
|
* @since 1.0.0
|
|
* @return bool Siempre retorna false.
|
|
*/
|
|
function roi_disable_comment_emails() {
|
|
return false;
|
|
}
|
|
add_filter('notify_post_author', 'roi_disable_comment_emails', 10, 2);
|
|
add_filter('notify_moderator', 'roi_disable_comment_emails', 10, 2);
|