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