Esta mañana me he levantado con la sorpresa de que al entrar a comprobar en la consola de administración de WP el tema de GeneratePress con el tema hijo activado, se había producido un error mostrandome una pantalla blanca con un desagradable mensaje

Ni que decir tiene que nada de mensaje ni nada de nada, no me ha llegado nada. 😱
Lo arreglé pero esta tarde al entrar para hacer pruebas en mi instalación local, me encuentro otra vez con este mismo mensaje, así que voy a intentar arreglarlo
Mi primer paso ha sido activar el tema padre, para ello WP-CLI es fabuloso, nos colocamos en la raíz de mi instalación de WordPress y lanzo “wp theme activate <tema padre>” en mi caso se llama generatepress

Si tienes acceso por terminal, (en local es más sencillo desde penguin) pero en remoto es con ssh (en otros cuadernos he explicado cómo se hace esto) vas a la carpeta de temas de tu instalación de WP, se colocan dentro de la carpeta wp-content/themes/, y allí miras el nombre del tema padre
Accede a la terminal y borra el tema hijo
Ve a la carpeta de temas: wp-content/themes/
Renombra o elimina la carpeta del tema hijo: mv generatepress-child generatepress-child-broken
WordPress no podrá cargar el tema roto y volverá automáticamente al tema padre GeneratePress (si está instalado), o al predeterminado (como Twenty Twenty-One) si no.
Aquí ya se muestra al entrar en Apariencia > Temas que vuelve a funcionar y que el tema padre está activo

Yo ahora lo que voy a hacer es eliminar el tema hijo y volver a cargarlo, más que nada porque si activas tal cual volverá a aparecer el mismo error del inicio.
Primero me voy de nuevo a la carpeta del tema hijo y la elimino
antonio@penguin:/var/www/html/wp-content/themes$ rm -R gpress-child-broken/
Ya no me aparecerá el tema en la ventana de de WP
Vuelvo a crear el tema hijo
antonio@penguin:/var/www/html/wp-content/themes$ mkdir gpress-child
antonio@penguin:/var/www/html/wp-content/themes$ ls -Flai
Entro en la carpeta y creo los ficheros style.css, functions.php y screenshot.png
style.css tiene el siguiente contenido
/*
Theme Name: GeneratePress Child
Theme URI: <https://generatepress.com>
Description: Tema hijo para GeneratePress
Author: Antonio Varela
Author URI: <https://antoniovarela.es>
Template: generatepress
Version: 1.0.0
*/
/* Aquí puedes añadir tus modificaciones de CSS para el tema hijo */
functions.php tiene el contenido
<?php
function gpress_child_enqueue_styles() {
wp_enqueue_style(
'generatepress-parent-style',
get_template_directory_uri() . '/style.css',
array(),
wp_get_theme('GeneratePress')->get('Version')
);
}
add_action( 'wp_enqueue_scripts', 'gpress_child_enqueue_styles', 20 );
y screenshot.png debe ser una imagen de 1200×900 para el tema (pero la mía es de 1024×1024)
Recargo para que vuelva a aparecer el tema hijo, lo activo y todo vuelve a funcionar 😜
Realmente no he solucionado el problema que ha provocado este fallo, sólo he conseguido que todo siga funcionando. Tocará investigar más a fondo lo que lo ha podido provocar.
Por cierto, y cambiando un poco de tema para terminar. Si te preguntas el motivo de por qué he activado un tema hijo para generatepress, es por que con WPForms he creado un formulario de contacto, y quería que dicho formulario registrase en una lista de contactos en el proveedor de correos el contacto que había escrito, yo estoy usando Brevo.
Pues bien la funcionalidad que busco existe en la modalidad pro (de pago) de WPForms pero he preferido, de momento ya que estoy haciendo pruebas de concepto y no estoy generando ingresos con ellos, programarme yo dicha funcionalidad con una llamada a la Api de Brevo cuando se produce el envío de un formulario.
Tras varias consultas a la documentación de Brevo, de WP y a la IA he programado el siguiente código en funcions.php, cuyo propósito es leer los valores de los campos del formulario de contacto y cuando se envían registrarlos en una lista de contactos en Brevo.
Un poco chapuza, pero funcional.
Te dejo aquí el código que he usado en el servidor para conseguir esta funcionalidad
functions.php
...
add_action('wpforms_process_complete', 'add_contact_to_brevo', 10, 4);
function add_contact_to_brevo($fields, $entry, $form_data, $entry_id) {
$nombre = '';
$apellido = '';
$email = '';
foreach ($fields as $field) {
$label = strtolower($field['name']);
//error_log('📦 Campo recibido: ' . print_r($field, true));
// Campo compuesto: Nombre + Apellidos
if (strpos($label, 'nombre') !== false && isset($field['first'])) {
$nombre = sanitize_text_field($field['first']);
$apellido = sanitize_text_field($field['last']);
}
// Campo de email
if (strpos($label, 'correo') !== false || strpos($label, 'email') !== false) {
$email = sanitize_email($field['value']);
}
}
if (empty($email)) {
error_log("❌ No se capturó el email del formulario.");
return;
}
$data = [
'email' => $email,
'attributes' => [
'FIRSTNAME' => $nombre,
'LASTNAME' => $apellido
],
'listIds' => [5], // ID de tu lista en Brevo
'updateEnabled' => true
];
$response = wp_remote_post('https://api.brevo.com/v3/contacts', [
'headers' => [
'api-key' => 'xkeysib-...', // Sustituye por tu api-key
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'body' => json_encode($data)
]);
error_log("📨 Enviando a Brevo: Nombre=$nombre, Apellido=$apellido, Email=$email");
if (is_wp_error($response)) {
error_log('❌ Error al conectar con Brevo: ' . $response->get_error_message());
} else {
$body = wp_remote_retrieve_body($response);
error_log('✅ Respuesta de Brevo: ' . $body);
}
}
Recuerda que en esta función, en caso de que quieras usarla, has de poner tu apikey de Brevo y el listID que quieras usar de las listas que hayas creado.
Los mensajes de error_log sólo serán accesibles si activas la funcionalidad de tu WP para registrar los mensajes de log.
Para ello debes habilitar en /var/www/html/wp-config.php las siguientes líneas (yo digo que en /var/www/html pero tú donde hayas instalado tu WP, ya me entiendes)
...
// Enable error logging.
@ini_set('log_errors', 'On');
@ini_set('error_log', '/var/www/html/wp-content/elm-error-logs/php-errors.log');
// Don't show errors to site visitors.
@ini_set('display_errors', 'Off');
if ( !defined('WP_DEBUG_DISPLAY') ) {
define('WP_DEBUG_DISPLAY', false);
}
// Activa WP_DEBUG si no lo está
define('WP_DEBUG', true);
...
Esto solo mientras estás comprobando si tu sitio funciona correctamente, cuando acabes, ponemos define( ‘WP_DEBUG’, false) y comentamos o eliminamos las otras líneas