Analicemos el problema de la redirección. El error más probable está en el manejo de plantillas. Hagamos las correcciones necesarias:
1. Corrección en includes/template-handler.php
Problema detectado: El método override_category_template necesita una referencia válida al manager y mejor manejo de contexto.
// template-handler.php (Versión corregida)
class CCP_Template_Handler {
private $page_manager;
public function __construct($page_manager) {
$this->page_manager = $page_manager;
add_action('template_redirect', [$this, 'override_category_template'], 9);
}
public function override_category_template() {
if (!is_category()) return;
$term = get_queried_object();
$page_id = $this->page_manager->get_associated_page($term->term_id);
if (!$page_id || !get_post_status($page_id)) {
return; // No romper el flujo normal
}
// Redirección 301 permanente para SEO
wp_redirect(get_permalink($page_id), 301);
exit;
}
// ... (mantener el shortcode)
}
2. Modificación en categorias-como-paginas.php
Ajuste de dependencias:
// En la función de inicialización
function ccp_init_plugin() {
load_plugin_textdomain('categorias-como-paginas', false, dirname(plugin_basename(__FILE__)) . '/languages/');
$page_manager = new Category_To_Page_Manager();
$template_handler = new CCP_Template_Handler($page_manager); // Pasar la instancia
if (is_admin()) {
new CCP_Admin_Settings($page_manager); // Pasar la misma instancia
}
}
3. Actualización en class-category-to-page.php
Mejorar la verificación:
// En el método get_associated_page
public function get_associated_page($term_id) {
// ... (código existente)
// Verificación reforzada
if ($page_id && get_post_status($page_id) !== 'publish') {
delete_term_meta($term_id, 'ccp_associated_page');
delete_transient($cache_key);
return false;
}
return absint($page_id); // Asegurar valor numérico
}
4. Depuración en admin/class-admin-settings.php
Añadir mensajes de error:
// En add_category_custom_fields
public function add_category_custom_fields($term) {
$page_id = $this->page_manager->get_associated_page($term->term_id);
if ($page_id && !get_post_status($page_id)) {
echo '<div class="error notice"><p>';
_e('Error: La página asociada fue eliminada', 'categorias-como-paginas');
echo '</p></div>';
}
// ... (resto del código)
}
5. Verificar hooks de redirección
Posible conflicto con:
// Asegurar prioridad alta (9) para ejecutar antes que otros plugins
add_action('template_redirect', [$this, 'override_category_template'], 9);
6. Pruebas de diagnóstico (añadir temporalmente)
// En override_category_template (antes de la redirección)
error_log('CCP Debug - Is category: ' . (is_category() ? 'Yes' : 'No'));
error_log('CCP Debug - Term ID: ' . $term->term_id);
error_log('CCP Debug - Page ID: ' . $page_id);
error_log('CCP Debug - Page Status: ' . get_post_status($page_id));
Pasos para probar:
- Activar el modo debug de WordPress (
WP_DEBUG_LOG) - Visitar una URL de categoría
- Revisar el archivo
wp-content/debug.logpara ver los registros
Posibles causas residuales:
- Permalinks no actualizados: Ir a Ajustes > Enlaces permanentes y guardar
- Plugins conflictivos: Probar desactivando otros plugins
- Caché: Limpiar caché de servidor/navegador
- Tema incompatible: Probar con un tema TwentyXX por defecto
Con estas correcciones, la redirección debería funcionar correctamente. Si persiste el problema, los logs de depuración nos darán información precisa del fallo. ¿Necesitas ayuda con algún aspecto específico de las correcciones?