<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Ayuda WordPress</title>
	<atom:link href="https://ayudawp.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://ayudawp.com</link>
	<description>Recursos, temas, plugins, tutoriales en español</description>
	<lastBuildDate>Sun, 17 May 2026 23:50:25 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://ayudawp.com/wp-content/uploads/2026/05/cropped-ayuda-wordpress-32x32.png</url>
	<title>Ayuda WordPress</title>
	<link>https://ayudawp.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
		<title>¿Sabes que se crean consultas duplicadas a la base de datos que podrías eliminar fácilmente y sin plugins?</title>
		<link>https://ayudawp.com/detectar-queries-duplicadas/</link>
					<comments>https://ayudawp.com/detectar-queries-duplicadas/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Mon, 18 May 2026 06:28:58 +0000</pubDate>
				<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[WPO - Optimizar WordPress]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Experto]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[savequeries]]></category>
		<category><![CDATA[wp-config.php]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159251</guid>

					<description><![CDATA[WordPress hace muchas más consultas a la base de datos de las que parece, en una página normalita pueden ser 30, 40 o más de 100. Pero el problema no es ese número en sí, sino las que se repiten, como la misma SELECT lanzada cuatro veces, ocho veces o más, por culpa de un tema mal hecho, un plugin que no cachea bien o un bucle que pide los mismos datos una y otra vez.]]></description>
										<content:encoded><![CDATA[<p><strong>WordPress hace muchas más consultas a la base de datos de las que parece</strong>, en una página normalita pueden ser 30, 40 o más de 100. Pero e<strong>l problema no es ese número en sí, sino las que se repiten</strong>, como la misma <code>SELECT</code> lanzada cuatro veces, ocho veces o más, por culpa de un tema mal hecho, un plugin que no cachea bien o un bucle que pide los mismos datos una y otra vez.</p>
<p>Cada <code>query</code> duplicada es <strong>trabajo que la base de datos hace dos o más veces sin necesidad</strong>. Si tu página de inicio dispara la misma consulta a <code>wp_options</code> diez veces y tienes 5.000 visitas al día, son 50.000 queries innecesarias diarias. En hosting compartido se nota, cuando tienes picos de tráfico ya ni te cuento.</p>
<p>Para <strong>detectarlas no hace falta ningún plugin</strong>, basta con activar <code>SAVEQUERIES</code> y meter un pequeño código (que te voy a regalar) en <a href="https://ayudawp.com/que-son-los-mu-plugins-de-wordpress/" target="_blank" rel="noopener">un <code>mu-plugin</code></a> y tienes el resumen al pie de cada página. Treinta segundos de trabajo y listo. ¿Te animas?</p>
<h2>Activar SAVEQUERIES</h2>
<p><code>SAVEQUERIES</code> es una constante de WordPress que guarda en memoria todas las queries de la petición, con el tiempo que tarda cada una. Por defecto está desactivada porque consume memoria, pero activarla es fácil, solo tiene que añadir esto a tu <code>wp-config.php</code>, justo antes de la línea que dice <em>«</em><code>Eso es todo, deja de editar</code><em>»</em>:</p>
<pre>define( 'SAVEQUERIES', true );</pre>
<blockquote><p><strong>Advertencia</strong>: debes activarla solo en local, en staging o en producción durante el rato justo del diagnóstico. Si la dejas activa en una web con tráfico real te comes la memoria del servidor sin ganar nada a cambio.</p></blockquote>
<h2>Código para mostrar queries duplicadas</h2>
<p>Crea un archivo en <code>/wp-content/mu-plugins/</code> llamado <code>ayudawp-debug-queries.php</code>. Si no tienes esa carpeta, créala tú y pega esto dentro:</p>
<pre>&lt;?php
/**
 * Plugin Name: Debug de queries duplicadas
 * Plugin URI: https://servicios.ayudawp.com
 * Description: Muestra un en el pie de página un resumen de queries duplicadas. Solo lo ven los admins y solo cuando está activo SAVEQUERIES.
 * Version: 1.0
 * Author: Fernando Tellado
 * Author URI: https://ayudawp.com
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

add_action( 'wp_footer', 'ayudawp_mostrar_queries_duplicadas', 9999 );

function ayudawp_mostrar_queries_duplicadas() {

    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }

    if ( ! defined( 'SAVEQUERIES' ) || ! SAVEQUERIES ) {
        return;
    }

    global $wpdb;

    if ( empty( $wpdb-&gt;queries ) ) {
        return;
    }

    $contador = array();
    $tiempos  = array();
    // $callers = array(); // Descomenta para guardar quién dispara cada query.

    foreach ( $wpdb-&gt;queries as $query ) {

        $sql    = $query[0];
        $tiempo = $query[1];
        // $caller = isset( $query[2] ) ? $query[2] : ''; // Descomenta junto con $callers.

        // Normaliza la query para que los duplicados con distintos valores también coincidan
        $sql_norm = preg_replace( '/\d+/', 'N', $sql );
        $sql_norm = preg_replace( "/'[^']*'/", "'X'", $sql_norm );
        $sql_norm = trim( preg_replace( '/\s+/', ' ', $sql_norm ) );

        if ( ! isset( $contador[ $sql_norm ] ) ) {
            $contador[ $sql_norm ] = 0;
            $tiempos[ $sql_norm ]  = 0;
            // $callers[ $sql_norm ] = $caller;
        }

        $contador[ $sql_norm ]++;
        $tiempos[ $sql_norm ] += $tiempo;
    }

    // Mantiene solo las queries que aparecen más de una vez
    $duplicadas = array_filter(
        $contador,
        function ( $n ) {
            return $n &gt; 1;
        }
    );

    arsort( $duplicadas );

    $total_queries = count( $wpdb-&gt;queries );
    $tiempo_bd     = round( $wpdb-&gt;timer_stop, 4 );

    if ( empty( $duplicadas ) ) {
        printf(
            '&lt;div style="position:fixed;bottom:0;left:0;right:0;background:#0a4d1f;color:#fff;padding:10px;font:12px monospace;z-index:99999;"&gt;Sin queries duplicadas. Total: %d queries en %ss.&lt;/div&gt;',
            (int) $total_queries,
            esc_html( $tiempo_bd )
        );
        return;
    }

    echo '&lt;div style="position:fixed;bottom:0;left:0;right:0;max-height:50vh;overflow:auto;background:#1a1a1a;color:#fff;padding:15px;font:12px monospace;z-index:99999;border-top:3px solid #ff6b6b;"&gt;';

    printf(
        '&lt;strong style="color:#ff6b6b;"&gt;%d tipos de queries duplicadas&lt;/strong&gt; · Total: %d queries · Tiempo BD: %ss&lt;br&gt;&lt;br&gt;',
        count( $duplicadas ),
        (int) $total_queries,
        esc_html( $tiempo_bd )
    );

    foreach ( $duplicadas as $sql =&gt; $veces ) {
        $tiempo_ms = round( $tiempos[ $sql ] * 1000, 2 );
        $sql_corta = strlen( $sql ) &gt; 250 ? substr( $sql, 0, 250 ) . '...' : $sql;
        printf(
            '&lt;div style="margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid #333;"&gt;&lt;span style="color:#ff6b6b;font-weight:bold;"&gt;×%d&lt;/span&gt; &lt;span style="color:#888;"&gt;[%sms]&lt;/span&gt; %s&lt;/div&gt;',
            (int) $veces,
            esc_html( $tiempo_ms ),
            esc_html( $sql_corta )
        );
    }

    echo '&lt;/div&gt;';
}</pre>
<p>Lo que hace ese código:</p>
<ul>
<li>Solo se ejecuta para usuarios con permisos de administrador (<code>manage_options</code>).</li>
<li>Solo entra si <code>SAVEQUERIES</code> está activo.</li>
<li>Normaliza las consultas sustituyendo números y cadenas variables por marcadores, así detecta como duplicadas las que solo cambian en los valores (un <code>SELECT</code> por ID 5 y otro por ID 7 cuentan como la misma).</li>
<li>Imprime al pie de página de la parte visible de la web un resumen con cuántas veces se repite cada <code>query</code> y cuánto tiempo total se va en cada una.</li>
</ul>
<p><a href="https://ayudawp.com/?attachment_id=159263" target="_blank" rel="noopener nofollow"><img fetchpriority="high" decoding="async" class="sombra alignnone wp-image-159263 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/05/detectar-queries-duplicadas-1200x761.jpg" alt="" width="1200" height="761" srcset="https://ayudawp.com/wp-content/uploads/2026/05/detectar-queries-duplicadas-1200x761.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/detectar-queries-duplicadas-768x487.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/detectar-queries-duplicadas-1536x974.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/detectar-queries-duplicadas.jpg 1920w" sizes="(max-width: 1200px) 100vw, 1200px"></a></p>
<h2>Cómo interpretar el resultado</h2>
<p>Al cargar cualquier página en portada habiéndote conectado como admin te aparece una franja al pie con algo así:</p>
<pre>3 tipos de queries duplicadas · Total: 47 queries · Tiempo BD: 0,0234s

×6 [12,4ms] SELECT option_value FROM wp_options WHERE option_name = 'X' LIMIT N
×4 [3,2ms]  SELECT * FROM wp_postmeta WHERE post_id = N AND meta_key = 'X'
×3 [1,8ms]  SELECT post_status FROM wp_posts WHERE ID = N</pre>
<p>Y lo que significa el ejemplo es esto:</p>
<ul>
<li>La consulta a <code>wp_options</code> repetida seis veces es casi seguro un <code>get_option()</code> llamado en varios hooks sin cachear el resultado en una variable estática. Plugin o tema mal hecho.</li>
<li>La de <code>postmeta</code> repetida cuatro veces es la señal clásica del problema N+1: falta una llamada a <code>update_post_meta_cache()</code> antes de un bucle de posts.</li>
<li>La tercera puede ser un <code>get_post_status()</code> o similar dentro de otro bucle.</li>
</ul>
<h2>Qué hacer cuando encuentras duplicadas</h2>
<p>Depende de quién las dispara y de tu nivel de acceso al código:</p>
<ul>
<li>Si la <code>query</code> se repite por un plugin de terceros busca la opción que la lanza y mira si puedes desactivarla. A veces es un widget, una barra lateral o una sección de la cabecera que tampoco te aporta gran cosa.</li>
<li>Si es de tu propio tema o plugin cachea el resultado en una variable estática dentro de la función, o mejor todavía en <code>wp_cache_set()</code> si tienes <a href="https://ayudawp.com/cache-objetos-persistente-para-todos/" target="_blank" rel="noopener">caché de objetos</a> (Redis o Memcached).</li>
<li>Para el patrón <code>N+1</code> de <code>postmeta</code> añade <code>update_post_meta_cache( $post_ids )</code> antes del bucle. Una sola <code>query</code> precarga toda la meta de los posts de golpe.</li>
<li>Para llamadas repetidas a <code>get_option()</code> agrupa varias opciones en un único <code>array</code>, o cachéalas en memoria de la petición con <code>wp_cache_set()</code>.</li>
</ul>
<p>Si te aparece una <code>query</code> rara y no sabes de dónde viene, en el código hay dos líneas comentadas con <code>$callers</code> y <code>$caller</code>. Descoméntalas temporalmente y luego cambia el último <code>printf</code> para que también imprima <code>$callers[ $sql ]</code>. Verás el <code>callstack</code> completo, función por función, hasta saber exactamente quién dispara cada consulta.</p>
<h2>Y acuérdate de quitarlo cuando termines</h2>
<p>Cuando hayas terminado el diagnóstico, dos cosas:</p>
<ol>
<li>Borra o renombra el archivo del mu-plugin.</li>
<li>Quita la línea <code>define( 'SAVEQUERIES', true );</code> de <code>wp-config.php</code>.</li>
</ol>
<p>Si dejas <code>SAVEQUERIES</code> activo en producción cada petición guarda el array completo de queries en memoria durante todo el render. En sitios con tráfico real son 200 KB extra por petición por lo menos. No te tira el sitio pero es memoria que consumes sin necesidad.</p>
<p>Para diagnósticos más completos (<code>callstack</code> siempre visible, agrupación por componente, hooks ejecutados, monitorización de AJAX y REST API) la herramienta de referencia sigue siendo <a href="https://querymonitor.com/" target="_blank" rel="nofollow noopener">Query Monitor</a>. Pero para una revisión rápida y puntual sin instalar nada este snippet va de sobra.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/detectar-queries-duplicadas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ataques a cPanel, todos a tope con la IA y WordPress Desktop Mode, para no perdértelo #CrónicasWordPress #DoctorWordPress</title>
		<link>https://ayudawp.com/ataques-a-cpanel-todos-a-tope-con-la-ia-y-wordpress-desktop-mode-para-no-perdertelo-cronicaswordpress-doctorwordpress/</link>
					<comments>https://ayudawp.com/ataques-a-cpanel-todos-a-tope-con-la-ia-y-wordpress-desktop-mode-para-no-perdertelo-cronicaswordpress-doctorwordpress/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Fri, 15 May 2026 08:45:08 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Vídeos]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159443</guid>

					<description><![CDATA[Esta semana en YouTube ha tocado actualidad pura y dura, con WordPress 7.0 a la vuelta de la esquina, un cambio gordo de última hora en el lanzamiento, novedades fuertes de Automattic en IA y un experimento de los que abren los ojos para usar el propio WordPress como escritorio.]]></description>
										<content:encoded><![CDATA[<p>Esta semana en YouTube ha tocado actualidad pura y dura, con WordPress 7.0 a la vuelta de la esquina, un cambio gordo de última hora en el lanzamiento, novedades fuertes de Automattic en IA y un experimento de los que abren los ojos para usar el propio WordPress como escritorio.</p>
<h2>Crónicas WordPress: cPanel atacado, la RTC fuera de la 7.0 y Automattic a saco con IA</h2>
<p>El lunes empezamos por seguridad con una vulnerabilidad crítica en cPanel y WHM (CVE-2026-41940), un bypass de autenticación que ya se está explotando y que afecta a miles de hostings, así que aprovechamos para repasar otra vez el plan de batalla contra ataques de fuerza bruta, que mira que conviene tenerlo a mano viendo cómo está el patio.</p>
<p>En la parte de comunidad hubo varios frentes abiertos. WordCamp Europe 2026 ya tiene programa publicado y entradas a la venta para Cracovia, y desde España hay ganas de cruzar fronteras. Matt Mullenweg ha montado un equipo de confianza para reformar WordPress.org y el programa Five for the Future, el Slack de Make WordPress abre puertas a las comunidades locales (con la española incluida) y Rodolfo Melogli publica una carta abierta a WooCommerce que ha dado bastante de que hablar.</p>
<p>En desarrollo, la noticia gorda es WordPress 7.0 Release Candidate 3 y 4 fuera del horno, y con ella el bombazo de que la colaboración en tiempo real se queda fuera de la 7.0. Los resultados del análisis de rendimiento no fueron buenos y el equipo ha decidido retirarla, que entre la RC3 y el lanzamiento del 20 de mayo no había margen para arreglarlo. Gutenberg 23.1 trae una UI para taxonomías personalizadas que muchos llevábamos pidiendo (aunque más de uno se pregunta por qué justo ahora) y hay una novedad interesante para gestionar también los tipos de contenido desde el editor.</p>
<p>También comentamos el experimento WooCommerce for Claude con MCP, el Static Site Importer de Chris Hubbs, la función de desistimiento obligatoria en la Unión Europea que afecta a todas las tiendas WooCommerce a partir del 19 de junio y la última de Takayuki Miyoshi, que confirma que Contactable.io llegará como API RESTful. Y de paso desmontamos otra vez el bulo de que Contact Form 7 va a cerrar, que no, que sigue ahí. También dejé enlace a las dos guías de Ayuda WordPress para preparar webs, plugins y temas de cara a la 7.0, que ya queda nada.</p>
<p>Para cerrar, IA por todos lados. Automattic mete la directa con Studio Code en beta, su agente de IA dentro de Studio que ya tiene su propio changelog assistant, y repasamos el estado de la IA nativa en WordPress 7.0, con los conectores que ya trae y los riesgos de coste que puede acarrear a quien no controle bien sus llamadas.</p>
<p>En IA y SEO, Google ha vuelto a tocar AI Mode y AI Overviews para incluir más enlaces a foros como Reddit, opiniones de expertos y publicaciones a las que estás suscrito, pero un estudio reciente dice que Google se cita a sí mismo en el 17 % de respuestas de AI Mode (sorpresa, ninguna). Y de fondo, la idea de que en 2026 el SEO va más de reconocimiento que de ranking, con GEO y AEO comiéndole terreno al posicionamiento tradicional.</p>
<p>Vídeo completo: <a href="https://www.youtube.com/watch?v=hJm4roiSMRI">Crónicas WordPress del 11 de mayo en YouTube</a>.</p>
<div class="ast-oembed-container " style="height: 100%;"><iframe title="#CrónicasWordPress - Noticias, opinión sobre WordPress con Fernando Tellado" width="1600" height="900" src="https://www.youtube.com/embed/hJm4roiSMRI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
<h2>Doctor WordPress: WordPress como escritorio, el experimento que mira al futuro</h2>
<p>El miércoles en el Doctor WordPress dediqué la sesión a un experimento ya bastante avanzado que apunta directamente hacia dónde puede tirar WordPress en los próximos años, porque la idea es usar el propio escritorio de WordPress como si fuese un sistema operativo, con sus apps, sus ventanas y casi todo lo que esperarías de un entorno de escritorio normal y corriente.</p>
<p>Lo probamos en directo, vimos cómo se monta, qué se puede hacer ya hoy y por dónde apunta de cara al medio plazo. Comenté también en qué escenarios puede tener sentido aunque ahora mismo nadie en producción lo vaya a usar tal cual, porque como avance de lo que se viene es bastante revelador y deja claro que la línea entre WordPress como CMS y WordPress como plataforma cada vez se borra más.</p>
<p>Como cada miércoles, también hubo tiempo para preguntas en directo de los asistentes sobre WordPress, SEO, IA y casi cualquier cosa que se cruzase por el camino.</p>
<p>Vídeo completo: <a href="https://www.youtube.com/watch?v=clzT3Q2ZxCc">Doctor WordPress del 13 de mayo en YouTube</a>.</p>
<div class="ast-oembed-container " style="height: 100%;"><iframe title="Desktop Mode - WordPress como sistema operativo ¿no decían que no tenía futuro?" width="1600" height="900" src="https://www.youtube.com/embed/clzT3Q2ZxCc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
<p>Si quieres asistir en directo y participar con tus preguntas, <a href="https://www.youtube.com/AyudaWordPressES?sub_confirmation=1">suscríbete al canal de Ayuda WordPress en YouTube</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/ataques-a-cpanel-todos-a-tope-con-la-ia-y-wordpress-desktop-mode-para-no-perdertelo-cronicaswordpress-doctorwordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Registro de consentimiento de cookies, formularios y pedidos en WordPress – Cómo guardarlos y gestionarlos legalmente</title>
		<link>https://ayudawp.com/registro-consentimiento-cookies-formularios-pedidos/</link>
					<comments>https://ayudawp.com/registro-consentimiento-cookies-formularios-pedidos/#comments</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Thu, 14 May 2026 06:28:00 +0000</pubDate>
				<category><![CDATA[Plugins WordPress]]></category>
		<category><![CDATA[Programación + WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[ePrivacy]]></category>
		<category><![CDATA[LSSI]]></category>
		<category><![CDATA[Principiante]]></category>
		<category><![CDATA[RGPD]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159346</guid>

					<description><![CDATA[En este artículo vamos a ver qué pide la ley exactamente, qué tiene que contener un registro de consentimientos para que aguante una inspección, y qué herramientas hay disponibles en WordPress para llevarlo bien.]]></description>
										<content:encoded><![CDATA[<p>La Agencia Española de Protección de Datos cerró 2025 con <strong>299 sanciones por valor de 40 millones de euros</strong>, un 14% más que el año anterior.</p>
<p>Lo más llamativo, no obstante, no es la cifra, sino quién paga, pues <strong>el 72% de esas multas cayó sobre pymes y autónomos</strong>.</p>
<p>¿A que es buen modo de empezar esa guía?, así, en la frente, sin anestesia. Pues es lo que hay, lo siento.</p>
<p>Dentro de <strong>los motivos que más se repiten</strong> están dos que afectan a casi cualquier WordPress:</p>
<ol>
<li>Usar datos sin base legal.</li>
<li>N<span style="font-size: 16px;">o ser capaz de demostrar el consentimiento del usuario</span><span style="font-size: 16px;">.</span></li>
</ol>
<p>El artículo 7.1 del RGPD lo deja clarito, y es que <strong>si tratas datos personales basándote en el consentimiento, tienes que poder demostrar que ese consentimiento existió</strong>.</p>
<p>La pelota está en tu tejado, no en el del usuario, y <strong>una casilla marcada en una base de datos no es prueba defendible</strong> de nada.</p>
<p>En este artículo <strong>vamos a ver qué pide la ley</strong> exactamente, <strong>qué tiene que contener un registro de consentimientos</strong> para que aguante una inspección, y <strong>qué herramientas hay disponibles en WordPress</strong> para evitarnos disgustos.</p>
<p>Vamos a ver <strong>opciones gratis, de pago y la combinación que mejor encaje según tu caso</strong>.</p>
<p>¿Se te pasó el susto?, ¿esperamos un poco a que se te pase el achuchón o empezamos a poner solución a este tema?</p>
<h2>¿Y esto me afecta a mi?</h2>
<p>La pregunta más común cuando alguien lee algo del RGPD es la misma: «<strong>vale, pero mi web es pequeña, ¿esto va conmigo?</strong>».</p>
<p><strong>¡Sorpresa! Resulta que sí, te afecta</strong>, casi siempre.</p>
<p>La normativa europea <strong>no entiende de tamaños</strong> y la AEPD ha demostrado en los últimos años que tampoco le tiembla el pulso con autónomos y pymes (vuelve a mirar arriba).</p>
<p>El <strong>criterio que aplica el RGPD para saber si te afecta</strong> no es dónde está tu sede ni el tamaño de tu negocio, sino <strong>2 cosas</strong>:</p>
<ul>
<li>Si estás establecido (oficina, sede, actividad real) en cualquier país de la Unión Europea, te aplica.</li>
<li>Si estás fuera de la UE pero ofreces bienes o servicios a residentes en la UE, o monitorizas su comportamiento mediante cookies, retargeting o analítica, también te aplica.</li>
</ul>
<p>Esto significa que <strong>un blog WordPress hecho en España con formulario de contacto tiene que cumplir</strong>, y <strong>una tienda online montada en Estados Unidos que admita pedidos de clientes españoles, también</strong>. Da igual dónde tengas el hosting o la empresa.</p>
<p>Algunos casos prácticos para que veas dónde encajas:</p>
<ul>
<li>Un blogger que vende un curso online o tiene un formulario de suscripción a newsletter.</li>
<li>Un autónomo que pasa facturas y guarda contactos en WordPress.</li>
<li>Una pyme con tienda WooCommerce.</li>
<li>Una comunidad de vecinos con cámaras de video-vigilancia conectadas a un servidor.</li>
<li>Un club deportivo con web de socios.</li>
<li>Una multinacional con varios sitios WordPress (con todas las exigencias añadidas, DPO obligatorio, evaluaciones de impacto y demás).</li>
<li>… suma y sigue.</li>
</ul>
<p><strong>Lo que queda fuera</strong> son las <strong>actividades estrictamente personales o domésticas</strong>, como un blog familiar de fotos sin afán comercial, una agenda de móvil, un grupo de WhatsApp con amigos.</p>
<p>En cuanto hay una mínima actividad profesional o comercial, se acabó la exención.</p>
<p>El mito más extendido es que las pymes están exentas, y no, no lo están/mos. El artículo 30.5 del RGPD reduce algunas obligaciones de mantenimiento de registros para empresas con menos de 250 empleados, pero solo en condiciones muy concretas.</p>
<p>Las obligaciones de fondo (consentimiento informado, deber de información, seguridad, derechos de los usuarios) son las mismas para una multinacional que para un autónomo con 50 visitas al mes.</p>
<h2>Lo que dice «exactamente» la ley</h2>
<p>Por orden de importancia y aplicación, las normas que tienes que conocer si gestionas un WordPress en España son las siguientes.</p>
<p>El <strong>Reglamento General de Protección de Datos</strong> (Reglamento UE 2016/679, en vigor desde mayo de 2018) es la norma de cabecera europea. Para registro de consentimientos los artículos clave son:</p>
<ul>
<li>Artículo 4.11, que define el consentimiento como una manifestación libre, específica, informada e inequívoca, mediante una declaración o una clara acción afirmativa.</li>
<li>Artículo 6.1.a, que establece el consentimiento como base legal para el tratamiento.</li>
<li>Artículo 7, el corazón del asunto: condiciones del consentimiento, obligación de demostrarlo y derecho a retirarlo.</li>
<li>Artículo 8, que regula el consentimiento de menores. En España, el límite legal para que un menor pueda consentir por sí mismo es de 14 años.</li>
<li>Artículo 9, que prohíbe el tratamiento de categorías especiales de datos como salud, ideología o biometría salvo excepciones tasadas.</li>
<li>Artículos 13 y 14, que detallan el deber de información cuando recoges datos.</li>
<li>Artículo 30, que obliga al registro de actividades de tratamiento. No es lo mismo que el registro de consentimientos, pero son piezas del mismo puzzle.</li>
<li>Considerandos 32, 42 y 43, que aclaran cómo debe interpretarse el consentimiento.</li>
</ul>
<p>A nivel español, la <strong>Ley Orgánica 3/2018 de Protección de Datos y Garantía de los Derechos Digitales</strong> (LOPDGDD) adapta el RGPD al ordenamiento español, regula los derechos digitales y define el régimen sancionador con tres niveles: leves (artículo 74), graves (artículo 73) y muy graves (artículo 72).</p>
<p>La <strong>Ley 34/2002 de Servicios de la Sociedad de la Información</strong> (LSSI-CE) regula específicamente las cookies, las comunicaciones electrónicas comerciales y la información que tienes que dar en una web profesional.</p>
<p>Por encima de las normas, las dos guías interpretativas que de verdad se usan en una inspección son las <a href="https://www.edpb.europa.eu/sites/default/files/files/file1/edpb_guidelines_202005_consent_es.pdf" target="_blank" rel="nofollow noopener">Directrices 5/2020 del Comité Europeo de Protección de Datos</a> sobre consentimiento y las Directrices 3/2018 del mismo organismo sobre ámbito territorial. Y en cookies concretamente, la Guía de cookies de la AEPD en su última versión de 2023.</p>
<p>La memoria de actuación de la AEPD de 2024 cifra en 19.000 las reclamaciones recibidas, con la inteligencia artificial, los neurodatos y los espacios de datos como los retos prioritarios para los próximos años. La presión sobre el cumplimiento sube cada año.</p>
<p>Si quieres ir a las fuentes para profundizar, los sitios oficiales son la <a href="https://www.aepd.es/derechos-y-deberes" target="_blank" rel="nofollow noopener">sección de derechos y deberes de la AEPD</a>, las directrices del <a href="https://www.edpb.europa.eu/" target="_blank" rel="nofollow noopener">Comité Europeo de Protección de Datos</a> (especialmente la 5/2020 sobre consentimiento), la memoria anual de actuación de la AEPD donde se ven las tendencias de sanciones, y el <a href="https://www.boe.es/" target="_blank" rel="nofollow noopener">BOE</a> para leer las resoluciones sancionadoras superiores a un millón de euros.</p>
<h2>Cuánto te puede caer</h2>
<p>No me quiero poner pesado con esto, pero es que este asunto no es broma ni de lejos, y me consta que <strong>la mayoría de las webs no cumplen</strong>, y el RGPD establece dos tramos máximos de sanción, ambos muy borricos:</p>
<ul>
<li>Hasta 10 millones de euros o el 2% del volumen anual global de la empresa por infracciones del primer grupo, donde entran el deber de información, el registro de actividades y la relación con encargados del tratamiento.</li>
<li>Hasta 20 millones de euros o el 4% del volumen anual global por infracciones del segundo grupo, donde encaja el incumplimiento del consentimiento del artículo 7.</li>
</ul>
<p>Siempre <strong>se aplica la cantidad mayor</strong> de las dos.</p>
<p>Estas son las <strong>cifras teóricas máximas</strong>, pero la AEPD valora cada caso según la naturaleza de los datos, el volumen de afectados, el beneficio económico obtenido, la cooperación durante la inspección y si la empresa tenía un sistema de cumplimiento previo.</p>
<p>La cuantía real para una pyme es raro que se acerque siquiera al máximo, pero <strong>las multas de cinco o seis cifras a empresas pequeñas son habituales</strong>.</p>
<p>Las sanciones superiores a un millón de euros impuestas a personas jurídicas se publican en el BOE con identificación del infractor y la infracción, según el artículo 76.4 de la LOPDGDD.</p>
<p>Eso significa <strong>publicidad pública del incumplimiento</strong>, que para muchas empresas duele más que la propia multa.</p>
<p>Un ejemplo claro de sanción por consentimiento mal recabado, por si tienes curiosidad, es la resolución PS/00500/2020 de la AEPD impuso 3 millones de euros a una entidad financiera por <strong>realizar perfilado de clientes basándose en un consentimiento que no era específico ni suficientemente informado</strong>.</p>
<p>La AEPD aplicó conjuntamente los artículos 6.1 y 7 del RGPD junto con las Directrices 5/2020 del EDPB. El mensaje de fondo fue que <strong>el consentimiento genérico para fines comerciales no vale</strong>, cada finalidad necesita su propio consentimiento, específico y demostrable.</p>
<p>Para tu WordPress el escenario realista es más modesto, pues <strong>nos moveríamos en sanciones de entre 500 y 30.000 euros por incumplimientos típicos</strong>, como llamadas comerciales sin consentimiento, formularios sin información clara, fotos publicadas sin permiso o no atender una solicitud de derechos en plazo.</p>
<p>Así que <strong>si te sobra el dinero, y no tienes respeto alguno por la privacidad de tus usuarios, nada, deja de leer</strong>, este tutorial es para pobres y profesionales con escrúpulos, como un servidor, y la mayoría de los mortales.</p>
<p><strong>Si valoras cada euro que ganas, y valoras la privacidad y decisiones que los usuarios hacen/mos en la red, sigue leyendo</strong>, igual te sirve de algo lo que he preparado…</p>
<h2>¿Qué hay que guardar?</h2>
<p>El RGPD no dice exactamente cómo se demuestra el consentimiento, y la AEPD y el EDPB tampoco fijan un esquema técnico cerrado.</p>
<p>Lo que sí dejan claro es que <strong>tienes que poder reconstruir, ante una inspección, las circunstancias exactas en que cada usuario dio su consentimiento</strong>.</p>
<p>Un registro que aguante una inspección debería contener, como mínimo:</p>
<ul>
<li><strong>Identificación del usuario</strong>: Email, identificador interno o, en el caso de cookies, un identificador anónimo de navegador.</li>
<li><strong>Acción concreta consentida</strong>: Qué se aceptó exactamente, no una etiqueta genérica del tipo «aceptó todo».</li>
<li><strong>Texto íntegro mostrado al usuario</strong>: No basta con guardar «aceptó la política de privacidad», hay que poder reproducir el texto exacto que vio en ese momento.</li>
<li><strong>Fecha y hora</strong>: Marca temporal (<code>timestamp</code>) con precisión, idealmente en UTC para evitar líos de zonas horarias.</li>
<li><strong>Origen</strong>: URL desde la que se dio el consentimiento (formulario, banner, checkout, comentario).</li>
<li><strong>Versión del documento</strong>: Si tu política de privacidad cambia, tienes que poder demostrar qué versión aceptó cada usuario y cuándo.</li>
<li><strong>IP y agente de usuario</strong>: Aportan trazabilidad técnica adicional. Son datos personales, así que conviene aplicar criterios de minimización.</li>
<li><strong>Mecanismo de integridad</strong>: Un hash que demuestre que el registro no se ha modificado desde el momento en que se creó. Esto es lo que más se ignora y lo que más cuenta cuando hay una disputa.</li>
</ul>
<p>El último punto merece atención especial, pues <strong>si un cliente niega haber dado un consentimiento</strong> y tú sacas un registro de tu base de datos, lo primero que hará la otra parte es alegar que ese registro pudo modificarse después. <strong>Sin un sello criptográfico</strong> que demuestre lo contrario tu prueba pierde casi todo su valor.</p>
<p>Ojo también con la IP y el <code>User-Agent</code>, porque son datos personales según el RGPD, y si los guardas, <strong>tienes que justificar la base legal</strong> (interés legítimo en demostrar el consentimiento), informar al usuario y aplicar plazos razonables de retención. No es difícil, no pasa nada grave, pero debes tenerlo en cuenta.</p>
<p>Algunas implementaciones leen solo la IP del servidor (<code>REMOTE_ADDR</code>) e ignoran cabeceras como <code>X-Forwarded-For</code>, que se pueden falsear, lo que es una buena práctica salvo que tengas un proxy inverso bien configurado.</p>
<h2>No, esto no es solo lo de las cookies</h2>
<p>Un error muy frecuente es <strong>confundir el banner de cookies con el registro de consentimientos contractuales</strong>, y son cosas distintas, con normativas distintas, y exigen herramientas distintas.</p>
<h3>Consentimiento de cookies y rastreo</h3>
<p>Lo regula la directiva ePrivacy a nivel europeo y la LSSI-CE en España, y aquí entra el banner de aceptación de cookies, la categorización (necesarias, funcionales, estadísticas, marketing) y la aceptación por categorías.</p>
<p><strong>Este tipo de consentimiento dura entre 6 y 12 meses</strong> según la guía de la AEPD, después hay que volver a pedirlo, y para esto hay un ecosistema enorme de plugins de tipo CMP (Consent Management Platform).</p>
<h3>Consentimiento contractual</h3>
<p>Cuando un usuario hace un pedido en WooCommerce, se registra en una plataforma o firma una aceptación de términos online <strong>lo que se registra es la aceptación de un acuerdo/contrato concreto</strong>, con condiciones generales, política de privacidad, términos del servicio.</p>
<p>La duración es la del contrato/acuerdo más los plazos legales de conservación, normalmente <strong>cinco años para acciones civiles y hasta seis para temas mercantiles</strong>.</p>
<h3>Consentimiento de marketing y comunicaciones</h3>
<p>La suscripción a newsletter, el alta en una lista de promociones o la autorización para recibir comunicaciones comerciales por SMS o email.</p>
<p>Aquí varias autoridades europeas como la CNIL francesa, la autoridad neerlandesa o la austríaca exigen explícitamente doble aceptación. La AEPD lo recomienda y considera buena práctica probatoria, y en todos los casos <strong>la revocación tiene que ser tan fácil como la suscripción</strong>.</p>
<h3>Otros consentimientos específicos</h3>
<p>La aceptación al <strong>dejar un comentario</strong> en un blog, al <strong>descargar un ebook</strong>, al inscribirse en un evento, al <strong>abrir una cuenta de usuario</strong>, cada uno con su contexto, su texto y su finalidad, casi siempre se gestionan con el mismo enfoque que los contractuales.</p>
<p>Cada tipo genera su propio rastro, va a su propio sitio en la base de datos y cumple normas ligeramente diferentes, y <strong>lo más razonable es montar herramientas distintas para cada caso</strong>, no intentar que un único plugin cubra todo.</p>
<h2>Plugins para registrar el consentimiento de cookies</h2>
<p>Aquí la oferta es muy amplia, pero voy a quedarme con las opciones que de verdad merece la pena tener en cuenta actualmente.</p>
<h3>Complianz</h3>
<p>Es probablemente <strong>la solución mejor y más sencilla ahora mismo</strong> para WordPress, por varias razones que vas a entender, hazme caso.</p>
<p>Y lo sé, muchas veces he recomendado otros plugins, pero también sabes que <strong>siempre tiro por lo gratis</strong>, ahora verás.</p>
<p>La versión gratuita incluye banner, escaneo de cookies, política de cookies generada automáticamente y bloqueo de scripts, lo que no incluye es el registro de consentimientos, reservado a <a href="https://ayudawp.com/recomiendo/complianz-precios/" data-eafl-id="151154" data-eafl-parsed="1" class="eafl-link eafl-link-text eafl-link-cloaked" target="_blank" rel="nofollow noopener noreferrer sponsored">Complianz Premium</a> (89 € al año), pero…</p>
<p>Aquí entra una pieza del puzzle interesante, y es que hay un plugin gratuito llamado <a href="https://wordpress.org/plugins/record-of-consent-extension-for-complianz/" target="_blank" rel="nofollow noopener">Record of Consent Extension for Complianz</a>, hecho por <a href="https://www.davidevalerio.it/" target="_blank" rel="nofollow noopener">davidevalerio</a>, que añadido al Complianz Free te da exactamente eso:</p>
<ul>
<li>Registro individual con sello <code>SHA-256</code>.</li>
<li>Detección multi-cabecera de IP (Cloudflare, X-Forwarded-For, Client-IP).</li>
<li>Filtrado de bots y exportación.</li>
</ul>
<p>La integridad criptográfica que ofrece supera a la del propio Complianz Premium, y todo gratis, <strong>una auténtica maravilla</strong>, que sorprende las pocas instalaciones que tiene.</p>
<p>Para muchos casos, esta combinación resuelve el consentimiento de cookies con registro defendible sin pagar nada.</p>
<h3>CookieYes</h3>
<p>Este plugin es otra opción bastante popular, con más de 1,5 millones de instalaciones activas y la versión gratuita incluye registro de consentimientos básico.</p>
<p>Las funciones avanzadas de geo-targeting y traducción automática están en la versión Pro, desde 10 dólares al mes.</p>
<h3>WPConsent</h3>
<p>La opción del equipo de WPForms y Awesome Motive. Su versión gratuita es muy decente y la Pro arranca en 49 dólares al año.</p>
<h3>WebToffee GDPR Cookie Consent</h3>
<p>Certificado por Google como CMP, es compatible con IAB TCF v2.3 y mantiene registro con ID de consentimiento, IP y marca temporal en la versión gratuita.</p>
<p>La Pro cuesta 89 dólares al año.</p>
<h3>Moove GDPR Cookie Compliance</h3>
<p>De este ya sabes que siempre he sido muy fan, ofrece registro de consentimientos, pero solo en la versión de pago, por unos 49 dólares.</p>
<h3>Cookiebot</h3>
<p>Funciona como SaaS, gratis hasta 100 páginas al mes, después 12 € al mes. Los datos se almacenan en sus servidores no en tu WordPress, y esto en sí mismo ya es un inconveniente.</p>
<p>Tabla resumen para que te sea más fácil valorar las distintas opciones:</p>
<table>
<thead>
<tr>
<th>Solución</th>
<th>Coste anual</th>
<th>Registro individual</th>
<th>Hash de integridad</th>
<th>Datos en…</th>
</tr>
</thead>
<tbody>
<tr>
<td>Complianz Free</td>
<td>0 €</td>
<td>No</td>
<td>—</td>
<td>Tu WordPress</td>
</tr>
<tr>
<td>Complianz Free + Record of Consent Extension</td>
<td>0 €</td>
<td>Sí</td>
<td>SHA-256</td>
<td>Tu WordPress</td>
</tr>
<tr>
<td>Complianz Premium</td>
<td>89 €</td>
<td>Sí</td>
<td>No</td>
<td>Tu WordPress</td>
</tr>
<tr>
<td>CookieYes Pro</td>
<td>Desde 120 $</td>
<td>Sí</td>
<td>No</td>
<td>Tu WordPress</td>
</tr>
<tr>
<td>WPConsent Pro</td>
<td>Desde 49 $</td>
<td>Sí</td>
<td>No</td>
<td>Tu WordPress</td>
</tr>
<tr>
<td>WebToffee Pro</td>
<td>89 $</td>
<td>Sí</td>
<td>No</td>
<td>Tu WordPress</td>
</tr>
<tr>
<td>Moove GDPR Cookie Compliance</td>
<td>Gratis (Pro 49 $ pago único)</td>
<td>Sí (en gratis)</td>
<td>No</td>
<td>Tu WordPress</td>
</tr>
<tr>
<td>Cookiebot</td>
<td>Gratis hasta 100 vistas/mes, después 12 €/mes</td>
<td>Sí</td>
<td>No</td>
<td>Servidores externos</td>
</tr>
</tbody>
</table>
<h2>Registro de la aceptación de términos y condiciones en WooCommerce</h2>
<p>WooCommerce trae de serie un casillas para los términos y condiciones en el pago, pero solo guarda un registro <code>booleano</code>. Marca o no marca, punto, y <strong>eso no demuestra absolutamente nada ante una inspección</strong>.</p>
<h3>Terms &amp; Conditions Tracker</h3>
<p>La opción <a href="https://woocommerce.com/products/terms-conditions-tracker/" target="_blank" rel="nofollow noopener">disponible en el mercado de plugins oficial de Automattic</a> es un plugin de pago a 79 dólares al año disponible en WooCommerce.com.</p>
<p>Registra marca temporal, IP, <code>User-Agent</code> y un hash MD5 del documento aceptado. Es compatible con checkout clásico y de bloques, compatible con <a href="https://ayudawp.com/tag/hpos/" target="_blank" rel="noopener">HPOS</a> y permite múltiples casillas (privacidad, marketing, verificación de edad). El registro es exportable a CSV.</p>
<p>Tiene un detalle técnico discutible, y es que el hash que usa el plugin oficial es MD5, un algoritmo criptográficamente roto desde 2008. Para una prueba defendible ante una inspección no es lo ideal, SHA-256 sería el estándar mínimo aceptable hoy.</p>
<h3>Additional Terms Pro</h3>
<p>Otra opción de pago, <a href="https://woocommerce.com/document/additional-terms/" target="_blank" rel="nofollow noopener">también en WooCommerce.com a 79 dólares al año</a>. Este aporta lógica condicional para mostrar casillas diferentes según los productos del carrito o el día de la semana, y registra la aceptación en el pedido.</p>
<p>Útil para tiendas con surtido variado, donde diferentes productos requieren diferentes aceptaciones.</p>
<h3>Terms &amp; Conditions Consent Log</h3>
<p><a href="https://es.wordpress.org/plugins/terms-conditions-consent-log/" target="_blank" rel="noopener nofollow">Plugin gratuito</a> disponible en wordpress.org y el instalador de plugins de tu web, que me tocó preparar, en vista de que no había soluciones ni gratis ni completas.</p>
<p><strong>Va mucho más allá de WooCommerce</strong> porque cubre también formularios, comentarios y dispone de API pública, pero centrémonos aquí en para qué sirve en tiendas online.</p>
<p>En el pago <strong>captura la casilla de aceptación nativa de términos y condiciones sin tener que configurar nada</strong>. Guarda marca temporal en UTC, IP, <code>User-Agent</code>, versión del documento, URL de origen y el texto exacto que vio el cliente.</p>
<p>Cada registro se sella con <code>SHA-256</code> del texto aceptado, así que si alguien lo modifica en la base de datos después, <strong>la verificación de integridad lo detecta</strong> y lo marca como <code>MANIPULADO</code>.</p>
<p>Es compatible con HPOS, <strong>genera un certificado A4 imprimible</strong> de cada registro que el navegador exporta a PDF, sin librerías externas, y <strong>se integra con las herramientas de privacidad integradas en WordPress</strong> (anonimiza en lugar de eliminar al recibir una solicitud de borrado).</p>
<p>El registro de cada consentimiento queda enlazado al pedido y aparece como <strong>columna en el listado de pedidos</strong> y como <strong>caja meta en la pantalla de edición de cada pedido</strong>, con toda la información y enlaces al consentimiento y a un PDF exportable, por si lo pide un cliente.</p>
<p>En la siguiente sección te cuento todo lo que cubre fuera de WooCommerce, que es mucho.</p>
<h3>¿Y no hay un código de copiar y pegar?</h3>
<p>Para casos muy básicos sigue siendo válido el clásico fragmento de código que pegas en el <code>functions.php</code> del tema hijo o en un <code>mu-plugin</code>.</p>
<p>Es lo mínimo del mínimo, pero al menos te queda algo guardado por pedido:</p>
<pre>// Guardar aceptación de términos en el meta del pedido (compatible con HPOS).
add_action( 'woocommerce_checkout_create_order', 'ayudawp_save_terms_acceptance', 10, 2 );
function ayudawp_save_terms_acceptance( $order, $data ) {
    if ( ! empty( $data['terms'] ) ) {
        $ip = isset( $_SERVER['REMOTE_ADDR'] )
            ? sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) )
            : '';
        $order-&gt;update_meta_data( '_terms_accepted', 'yes' );
        $order-&gt;update_meta_data( '_terms_accepted_date', current_time( 'mysql' ) );
        $order-&gt;update_meta_data( '_terms_accepted_ip', $ip );
    }
}</pre>
<p>Lo que hace es <strong>guardar tres campos en cada pedido</strong>, lo que aceptó (<code>booleano</code>), la fecha y la IP, pero no guarda el texto que vio el cliente, ni la versión del documento, ni tiene <code>hash</code> de integridad, así que <strong>no es prueba defendible ante una inspección</strong> ni medio seria.</p>
<p>Si tu web es muy pequeña, no quieres instalar plugins y necesitas «algo» mejor que la nada absoluta de WooCommerce por defecto, este código te saca del paso, para todo lo demás vete a una solución con las garantías que se han descrito antes.</p>
<p>Resumen de <strong>opciones específicas para WooCommerce</strong>:</p>
<table>
<thead>
<tr>
<th>Solución</th>
<th>Coste anual</th>
<th>Hash</th>
<th>Certificado</th>
<th>Anonimización</th>
<th>Compatible HPOS</th>
</tr>
</thead>
<tbody>
<tr>
<td>WooCommerce por defecto</td>
<td>0 €</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Sí</td>
</tr>
<tr>
<td>Terms &amp; Conditions Tracker (oficial)</td>
<td>79 $</td>
<td><code>MD5</code></td>
<td>No</td>
<td>No</td>
<td>Sí</td>
</tr>
<tr>
<td>Additional Terms Pro</td>
<td>79 $</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Sí</td>
</tr>
<tr>
<td>Terms &amp; Conditions Consent Log</td>
<td>0 €</td>
<td><code>SHA-256</code></td>
<td>Sí</td>
<td>Sí</td>
<td>Sí</td>
</tr>
<tr>
<td>Snippet de código</td>
<td>0 €</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Sí</td>
</tr>
</tbody>
</table>
<h2>Registro de consentimiento en formularios, comentarios y el resto del WordPress</h2>
<p>Las tiendas no son el único sitio donde se piden consentimientos. Cualquier WordPress con un poco de actividad tiene <strong>formularios de contacto, suscripciones, comentarios, descargas de ebooks, inscripciones a webinars, alta de usuarios</strong>, y cada uno de esos puntos genera un <strong>consentimiento que tienes que poder demostrar</strong>.</p>
<p>Lo típico es tener <strong>un plugin distinto para cada cosa</strong>. Consentimiento de cookies por un lado, registro del pago de WooCommerce por otro, registro de consentimiento de de formularios en otro, y los comentarios … ah, eso se me olvidó.</p>
<p>Todo repartido en <strong>tres o cuatro tablas distintas, con formatos diferentes</strong> y sin manera fácil de exportarlo todo cuando llega una reclamación. <strong>No es lo ideal</strong>, está claro.</p>
<p>En fin, vamos al tema, que esto <strong>hay algunas opciones, de todo tipo y pelaje</strong>…</p>
<h3>WPForms Pro</h3>
<p>Si ya usas WPForms en su versión Pro tienes un campo nativo llamado <strong>GDPR Agreement</strong> que añade una casilla de consentimiento al formulario.</p>
<p>La aceptación se guarda con cada envío junto con marca temporal y datos del usuario. Lo tienes desde 49,50 dólares al año.</p>
<p>La pega es que <strong>el registro queda dentro de WPForms, no en una tabla común con el resto de consentimientos</strong> del sitio, así que si combinas con otras fuentes (pago, comentarios) <strong>tendrás que exportar y cruzar a mano</strong>.</p>
<h3>The GDPR Framework (Data443)</h3>
<p>Plugin <strong>gratuito</strong> en wordpress.org, con <strong>extensiones de pago opcionales</strong>, que se puede integrar con Contact Form 7, Gravity Forms, Ninja Forms, Formidable Forms, WooCommerce y Easy Digital Downloads.</p>
<p>Además del registro de consentimiento, gestiona también solicitudes de derechos de los usuarios (DSAR), permite exportar y borrar datos, y <strong>cubre buena parte del cumplimiento RGPD básico</strong>.</p>
<p><strong>No usa <code>hash</code> de integridad ni genera certificados</strong>, pero al cubrir muchos plugins distintos en una sola herramienta es una <strong>opción interesante para quien usa varios tipos de formulario</strong> en la misma web.</p>
<h3>Terms &amp; Conditions Consent Log</h3>
<p>Como ya he comentado en la sección anterior este plugin no se queda solamente en cubrir todos los consentimientos de tiendas online WooCommerce.</p>
<p>Es una <strong>solución muy completa para todos los consentimientos del sitio</strong>, con una tabla única indexada (<code>wp_tccl_consents</code>) donde caen los <strong>registros vengan de donde vengan</strong>, no en la habitualmente ya saturada <code>wp_postmeta</code>.</p>
<p><strong>Reconoce automáticamente cuatro fuentes de consentimiento</strong>, sin tener que configurar nada, además del pago de WooCommerce que ya vimos en la sección anterior, o sea, que son cinco.</p>
<p>La primera fuente aparte de WooCommerce es <strong>Contact Form 7</strong>, ya que cualquier formulario de CF7 que incluya un campo <code>[acceptance]</code> y que el visitante marque genera automáticamente un registro.</p>
<p>Sin código, sin integración manual, sin tocar <code>functions.php</code>, cada formulario tiene su propio <code>consent_type</code> con el ID del formulario, así que los registros se filtran por origen.</p>
<p>La segunda son los <strong>comentarios de WordPress</strong>. La casilla de aceptación de «Guarda mi nombre, correo y web…» que WordPress añade bajo el formulario de comentarios también se puede registrar.</p>
<p>Cada comentario con la casilla marcada queda guardado como evidencia, con el email del usuario, la URL y la fecha exacta. Útil para blogs donde los comentarios son una fuente importante de datos personales.</p>
<p>La tercera es el <strong>shortcode <code>[tccl_consent_box]</code> y su bloque Gutenberg equivalente</strong>. Lo pones donde quieras, ya sea una página, una entrada, un widget de barra lateral, un footer o el campo HTML de un plugin de formularios.</p>
<p>Tiene atributos para personalizar el texto, el tipo, la versión y el botón. Al enviarse se registra el consentimiento sin recargar la página. Muy útil para casos como cuando ofreces la descarga de un ebook, la inscripción a un sorteo o el alta en una lista de espera.</p>
<p>La cuarta es una <strong>API pública</strong> con la función <code>tccl_save_consent()</code> para registrar consentimientos desde cualquier sitio.</p>
<p>Si tu <strong>formulario</strong> está hecho con Gravity Forms, WPForms, Fluent Forms, Forminator o personalizados, puedes engancharte al <code>hook</code> que ese plugin exponga y <strong>dejar el consentimiento registrado</strong> con tres líneas de código. Lo mismo con altas de usuarios (<code>user_register</code>), variables REST propias o cualquier otro <code>enpoint</code>.</p>
<p><strong>Todos los registros se sellan con <code>SHA-256</code></strong> del texto aceptado en el momento del consentimiento.</p>
<p><strong>Si alguien modifica el texto en la base de datos después</strong>, la verificación de integridad lo marca como <code>MANIPULADO</code> en el listado, en el certificado y en la caja meta del pedido.</p>
<p>Hay <strong>certificado de cada registro de consentimiento</strong>, que puedes <strong>exportar a PDF o imprimir</strong> sin que tengas que instalar nada ni código adicional en el plugin, pues usa la funcionalidad disponible en tu navegador.</p>
<p>El plugin <strong>se integra con las herramientas de privacidad nativas de WordPress</strong>, así que en <code>Herramientas &gt; Exportar datos personales</code> y <code>Herramientas &gt; Borrar datos personales</code> aparecen los consentimientos del usuario solicitante.</p>
<p><strong>El borrado anonimiza en lugar de eliminar</strong>, porque el propio registro es la base legal más que de sobra para conservar la prueba.</p>
<p>Otros detalles que también son importantes:</p>
<ul>
<li>Compatible con <strong>HPOS</strong>.</li>
<li><strong>Retención configurable</strong> con anonimizado por filtro desde la pestaña de registros.</li>
<li><strong>Exportación CSV</strong> con cabecera de metadatos.</li>
<li>Opción de añadir una línea de <strong>consentimiento en los emails</strong> de WooCommerce, tanto admin como cliente.</li>
<li>Por defecto no destruye datos al desinstalar, así la prueba sobrevive a la desinstalación salvo que actives explícitamente el borrado total.</li>
</ul>
<h3>Plataformas de email marketing</h3>
<p>Si tu plataforma de email marketing es Mailchimp, Brevo, ActiveCampaign o similar hay buenas noticias porque <strong>casi todas guardan ya el registro</strong> de suscripción internamente con marca temporal, IP y origen.</p>
<p>Pídele a tu plataforma que te exporte el registro si tienes una reclamación o inspección. La mayoría también permite exigir doble aceptación, que es la práctica más sólida desde el punto de vista probatorio, y obligatoria en montones de países.</p>
<p>Comparativa de <strong>opciones para formularios, comentarios y demás necesidades de WordPress</strong>:</p>
<table>
<thead>
<tr>
<th>Solución</th>
<th>Formularios</th>
<th>Comentarios</th>
<th>Hash</th>
<th>Certificado</th>
<th>Coste</th>
</tr>
</thead>
<tbody>
<tr>
<td>WPForms Pro (campo GDPR Agreement)</td>
<td>Sí (solo WPForms)</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Desde 49,50 $</td>
</tr>
<tr>
<td>The GDPR Framework (Data443)</td>
<td>Sí (casi todos los. principales)</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Gratis con extras de pago</td>
</tr>
<tr>
<td>Terms &amp; Conditions Consent Log</td>
<td>Sí (Contact Form 7 + API)</td>
<td>Sí</td>
<td><code>SHA-256</code></td>
<td>Sí</td>
<td>0 €</td>
</tr>
</tbody>
</table>
<h2>Por qué es tan importante eso del HASH</h2>
<p>Imagínate que <strong>un cliente reclama</strong> haber recibido emails comerciales sin haber dado su consentimiento ¿vale?</p>
<p>Tú vas a tu base de datos, encuentras el registro y lo enseñas. La otra parte, lógicamente, alega que ese registro pudo añadirse o modificarse después de la queja, <strong>¿cómo demuestras lo contrario?</strong></p>
<p>Aquí entra <strong>el sello criptográfico</strong>.</p>
<p>Cuando se crea un registro se calcula lo que se llama un <code>hash</code> (una <strong>huella digital única</strong>) del contenido completo, que graba el texto aceptado, la fecha y el identificador del usuario.</p>
<p>Ese <code>hash</code> se guarda con el propio registro, y si alguien modifica cualquier cosa después, el <code>hash</code> deja de coincidir y <strong>la manipulación se detecta automáticamente</strong>.</p>
<p><strong>Protege la decisión de consentimiento</strong> de tus usuarios o clientes, y también <strong>te protege a ti de posibles intentos de manipulación, por parte de empleados, o incluso de denuncias falsas</strong> de clientes.</p>
<p>El estándar de <code>hash</code> que se usa hoy es SHA-256, que genera huellas de 256 bits y no se ha encontrado todavía ningún ataque práctico para producir colisiones.</p>
<p><code>MD5</code>, en cambio, está roto desde 2008, e investigadores han demostrado que se pueden generar dos contenidos diferentes con el mismo <code>hash</code> <code>MD5</code>, lo que hace<strong> que su uso para integridad probatoria sea cuestionable</strong>. <code>SHA-1</code>, que fue su evolución, también está abandonado desde 2017.</p>
<p>El plugin de pago que hay en WooCommerce.com que te he comentado antes sigue usando <code>MD5</code>, y Complianz Premium no aplica siquiera un <code>hash</code> a sus registros, que es aún peor.</p>
<p><strong>Únicamente</strong> los plugins <strong>Record of Consent Extension for Complianz</strong> (mi recomendación para el registro de consentimiento de cookies) y <strong>Terms &amp; Conditions Consent Log</strong> (para todos los demás consentimientos) usan <code>SHA-256</code>, lo que añade <strong>protección frente a modificaciones</strong> silenciosas.</p>
<p>Además del <code>hash</code> hay otro detalle importante, que es la posibilidad de <strong>generar un certificado por registro</strong>, con todos los datos, el texto aceptado, el <code>hash</code> y un código de verificación, en formato listo para imprimir o guardar como PDF, marca <strong>la diferencia entre tener una hoja de cálculo defendible y tener un dossier judicial</strong>.</p>
<p>Un <strong>PDF firmado</strong> con el <code>hash</code> dentro y una marca temporal (<code>timestamp</code>) clara es <strong>lo que pediría cualquier abogado</strong> para defender un caso.</p>
<p>Esta funcionalidad solo la incorpora el plugin <strong>Terms &amp; Conditions Consent Log</strong>, y hace falta porque además no la cubre ningún otro plugin.</p>
<h2>Qué hay que hacer con los registros viejos</h2>
<p>El RGPD obliga a <strong>aplicar el principio de minimización de datos</strong>, de que guardes solo lo necesario y durante el tiempo necesario, sea lo que sea que esto signifique, dada la imprecisión. Esto crea <strong>un problemón interesante con el registro de consentimientos</strong>.</p>
<p>Si un cliente cancela su cuenta y pide el borrado de sus datos, <strong>¿qué pasa con el registro de consentimiento que demuestra que en su día aceptó tus condiciones?</strong></p>
<p>La interpretación más razonable es que <strong>el registro de consentimiento no se borra, se anonimiza</strong>, porque el propio registro es la base legítima para que conserves esa prueba.</p>
<p><strong>Si borras el registro pierdes la capacidad de demostrar el consentimiento</strong> posteriormente, lo que vulnera el artículo 7.1.</p>
<p>La forma correcta de cumplir es:</p>
<ul>
<li>Sustituir los datos identificativos (email, IP, nombre) por valores anonimizados o <code>hash</code>.</li>
<li>Mantener el resto del registro (fecha, texto aceptado, versión del documento, <code>hash</code> de integridad).</li>
<li>Documentar la operación de anonimización con su propio <code>timestamp</code>.</li>
</ul>
<p>Esto encaja con la <strong>política de no guardar datos personales más allá de lo necesario</strong>, y también con la <strong>rendición de cuentas</strong>, pues sigues pudiendo <strong>demostrar que en su día se obtuvo un consentimiento válido</strong>.</p>
<p>Las herramientas que distinguen entre borrado total y anonimización son las que mejor encajan con esta interpretación, y lo malo es que <strong>no todos los plugins cumplen con estos principios</strong>.</p>
<p>El plugin disponible en WooCommerce.com, por ejemplo, permite borrar registros uno a uno, sin opción de anonimización.</p>
<p><strong>Las únicas opciones que sí incluyen anonimización</strong> con un clic, tanto individual como por filtro, son <strong>Record of Consent Extension for Complianz</strong> (para el consentimiento de cookies) y <strong>Terms &amp; Conditions Consent Log</strong> (para todos los demás).</p>
<p>Sobre los <strong>plazos de retención</strong> no hay una cifra mágica, la AEPD recomienda aplicar plazos razonables alineados con la finalidad del tratamiento.</p>
<p>Para consentimientos contractuales la práctica sensata es conservarlos <strong>al menos cinco años</strong> desde la finalización del contrato (alineado con plazos de prescripción civil), para consentimientos de marketing y newsletter la mayoría aplica entre uno y tres años desde la última interacción.</p>
<h2>Qué te conviene según tu tipo de web</h2>
<p>No todas las webs necesitan lo mismo. Te dejo un <strong>resumen rápido</strong> para que encuentres tu sitio.</p>
<h3>Blog informativo o de contenidos sin tienda y sin formularios complejos</h3>
<p>Lo que necesitas es banner de cookies con registro básico y, si tienes formulario de suscripción a newsletter, doble aceptación. Con <strong>Complianz Free + Record of Consent Extension</strong> cumples el artículo 7.1 sin gastar nada.</p>
<p>Si tu <strong>newsletter</strong> está en Mailchimp o Brevo, el propio servicio te guarda el registro de la suscripción.</p>
<p>Si quieres además <strong>registrar el consentimiento de los usuarios que dejen comentarios</strong> entonces necesitas <strong>Terms &amp; Conditions Consent Log</strong>, lo hace usando la casilla que ya incorpora WordPress, no añade nada.</p>
<h3>Tienda WooCommerce pequeña o mediana</h3>
<p>Aquí tienes tarea doble, pues por un lado volvemos a lo anterior, al banner de cookies (Complianz Free + extensión de davidevalerio) y además necesitas el registro potente de la casilla de términos y condiciones en el pago.</p>
<p>Para lo segundo <strong>solo hay dos opciones válidas</strong>, o <strong>Terms &amp; Conditions Tracker</strong> si prefieres un plugin de pago, o <strong>Terms &amp; Conditions Consent Log</strong> si quieres <code>SHA-256</code>, certificado imprimible y, ya de paso, registrar también los formularios de contacto y los comentarios sin instalar nada más, tú verás.</p>
<p>Si tienes newsletter, pues súmale lo suyo.</p>
<h3>Web profesional con captación por formularios</h3>
<p>Lo importante aquí es el <strong>registro del consentimiento del formulario</strong>.</p>
<p>Las opciones son estas:</p>
<ul>
<li>WPForms Pro con campo GDPR Agreement, si ya usas WPForms.</li>
<li>The GDPR Framework de Data443 si usas Contact Form 7, Gravity, Ninja o Formidable.</li>
<li>Terms &amp; Conditions Consent Log con su integración nativa para Contact Form 7 (automática) o con su API pública si usas otro plugin de formularios.</li>
</ul>
<p>Suma banner de cookies y newsletter si la tienes, que no se te olvide.</p>
<h3>Plataforma con suscripción de pago, LMS o membresía</h3>
<p>En este caso <strong>el consentimiento contractual es fundamental</strong> porque hay un contrato y dinero de por medio, así que <strong>necesitas registro con integridad criptográfica, certificado imprimible y trazabilidad total</strong>.</p>
<p>Aquí tienes que aplicar la combinación de banner de cookies (Complianz + extensión de davidevalerio) más registro de consentimientos contractuales (Terms &amp; Conditions Consent Log o Terms &amp; Conditions Tracker) y lo cubres al completo.</p>
<h3>Multinacional o web con datos sensibles (salud, biometría, ideología, datos de menores)</h3>
<p>Aquí no estamos en escenario de plugins, estamos en escenario de consultoría especializada y soluciones empresariales como Iubenda, OneTrust, Usercentrics o equivalentes. Y además un DPO (Delegado de Protección de Datos) profesional revisando todo.</p>
<h2>Consejos y recomendaciones finales</h2>
<p><strong>El registro de consentimientos no es opcional ni una formalidad</strong>, es la prueba de que cumples el artículo 7.1 del RGPD y <strong>la herramienta que más vas a echar en falta el día que recibas una reclamación o una inspección</strong>.</p>
<p>La buena noticia es que <strong>el ecosistema de plugins libres y de pago en WordPress da hoy soluciones para todos los casos</strong>, y la mala es que la mayoría de webs todavía siguen confiando en una casilla sin registro, que ante cualquier disputa se queda menos que nada.</p>
<p>Estos son los <strong>7 consejos que te doy</strong> para ir terminando:</p>
<ul>
<li><strong>El consentimiento es una prueba, no una etiqueta</strong>: Captura el texto exacto que vio el usuario, séllalo con <code>SHA-256</code> y guárdalo en un sitio donde lo puedas reproducir años después tal cual era ese día.</li>
<li><strong>No confundas cookies con consentimiento contractual</strong>: Son normas distintas, plugins distintos y registros distintos. Mezclarlos da una prueba ambigua que no aguanta una inspección seria.</li>
<li><strong>Las combinaciones gratuitas bien hechas cumplen mejor que muchas soluciones de pago</strong>: Complianz Free + Record of Consent Extension para cookies y un plugin libre con <code>SHA-256</code> como Terms &amp; Conditions Consent Log para el resto te dejan más cubierto que muchas tiendas grandes que pagan licencias caras sin <code>hash</code> robusto.</li>
<li><strong>Doble aceptación obligatoria para marketing</strong>: La AEPD lo recomienda y las autoridades europeas y el RGPD lo exigen. Es la práctica más sólida para defender un alta en lista de comunicaciones comerciales.</li>
<li><strong>Anonimiza, no borres</strong>: Cuando un usuario pida la supresión de sus datos, sustituye los IDs por valores anonimizados pero mantén el resto del registro y el <code>hash</code>. La prueba sobrevive y tú sigues cumpliendo.</li>
<li><strong>Versiona tus textos legales</strong>: Si cambias la política de privacidad o las condiciones, cambia también la versión que se guarda en el registro. Sin versión no puedes demostrar qué aceptó cada usuario.</li>
<li><strong>Documenta los plazos de retención</strong>: Define por escrito cuánto tiempo guardas cada tipo de consentimiento y por qué. La AEPD valora positivamente que tengas esto pensado y registrado.</li>
</ul>
<p>Y este es el resumen práctico de <strong>lo mínimo y lo recomendable para una web <em>normal</em></strong>:</p>
<table>
<thead>
<tr>
<th>Qué registrar</th>
<th>Mínimo aceptable</th>
<th>Recomendable</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cookies y rastreo</td>
<td>Banner con aceptación por categorías y registro básico</td>
<td>+ Registro individual con <code>SHA-256</code></td>
</tr>
<tr>
<td>Pedidos en WooCommerce</td>
<td>Texto de la casilla de aceptación guardado en el pedido</td>
<td>+ <code>hash</code>, certificado y versión del documento</td>
</tr>
<tr>
<td>Formularios y suscripciones</td>
<td>Casilla de aceptación con fecha y email</td>
<td>+ Texto exacto y <code>hash</code></td>
</tr>
<tr>
<td>Comentarios</td>
<td>Casilla de aceptación nativa de WordPress activa</td>
<td>+ Registro automático del consentimiento</td>
</tr>
<tr>
<td>Marketing y newsletter</td>
<td>Aceptación simple con registro de la plataforma</td>
<td>Doble aceptación con registro propio</td>
</tr>
<tr>
<td>Borrado a petición</td>
<td>Anonimizar manteniendo el registro</td>
<td>Idem + registro de la operación</td>
</tr>
<tr>
<td>Plazo de retención</td>
<td>Definido por escrito</td>
<td>1-3 años marketing, +5 años contractual</td>
</tr>
</tbody>
</table>
<p>Si tienes una web pequeña y quieres empezar bien sin gastar la receta es que instales Complianz Free + Record of Consent Extension for Complianz para cookies, y que montes un registro de consentimientos para todo lo demás (pago, formularios, comentarios, descargas) con Terms &amp; Conditions Consent Log. <strong>Cumples más que nadie y 100% gratis</strong>.</p>
<p>Con eso cumples el artículo 7.1 mejor que muchas tiendas grandes. Y si tu negocio crece ya valorarás soluciones de pago con soporte profesional.</p>
<p>Lo importante es ponerse a ello, pues cualquier registro defendible, por básico que sea, es infinitamente mejor que un casilla de aceptación sin registro alguno del consentimiento, y cualquier hora invertida hoy en montar esto bien te ahorrará días de papeleo el día que toque defenderlo.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/registro-consentimiento-cookies-formularios-pedidos/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>¿Por qué se cae mi web cuando hay fútbol de La Liga en España? ¿qué es eso de #LaLigaGate? ¿puedo hacer algo al respecto?</title>
		<link>https://ayudawp.com/laligagate/</link>
					<comments>https://ayudawp.com/laligagate/#comments</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Wed, 13 May 2026 06:28:07 +0000</pubDate>
				<category><![CDATA[Opinión]]></category>
		<category><![CDATA[Plugins WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[Cloudflare]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[proxy]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159379</guid>

					<description><![CDATA[Si tienes una web hecha con WordPress y los fines de semana, justo cuando hay partido, recibes quejas de gente que no puede entrar, bienvenido al club. No es tu hosting, no es tu plugin de caché, no es nada que hayas configurado mal, es La Liga de fútbol de España, sí, la liga, de fútbol, española, y como tú hay miles más.]]></description>
										<content:encoded><![CDATA[<p>Si tienes una web hecha con WordPress y <strong>los fines de semana, justo cuando hay partido, recibes quejas de gente que no puede entrar</strong>, bienvenido al club. <strong>No es tu hosting, no es tu plugin de caché, no es nada que hayas configurado mal, es La Liga de fútbol de España</strong>, sí, la liga, de fútbol, española, y como tú hay miles más.</p>
<p>El problema lleva con nosotros desde febrero de 2025 y, lejos de arreglarse, en la temporada 2025/2026 ha ido a más. Así que toca dejar el lloro y pasar a la parte práctica, ver <strong>qué puedes hacer, desde ya, para que los bloqueos de LaLiga no te dejen la web fuera de servicio cuando le den a la pelotita</strong>.</p>
<h2>Qué está pasando (legalmente, por injusto que sea)</h2>
<p><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159403 size-full" src="https://ayudawp.com/wp-content/uploads/2026/05/bloqueos-internet-laligagate-rootedcom.jpg" alt="Imagen publicada por rootedcon https://x.com/rootedcon/status/2046965753904005323/photo/1" width="1055" height="1491" srcset="https://ayudawp.com/wp-content/uploads/2026/05/bloqueos-internet-laligagate-rootedcom.jpg 1055w, https://ayudawp.com/wp-content/uploads/2026/05/bloqueos-internet-laligagate-rootedcom-768x1085.jpg 768w" sizes="auto, (max-width: 1055px) 100vw, 1055px"></p>
<p>El 18 de diciembre de 2024 el Juzgado de lo Mercantil número 6 de Barcelona dio luz verde a una resolución pedida por LaLiga y Telefónica Audiovisual que permite ordenar a las operadoras de internet españolas (Movistar, MasOrange, Vodafone, DIGI y todas sus marcas) el bloqueo de direcciones IP usadas para retransmisiones piratas de fútbol.</p>
<p>En marzo de 2025 ese mismo juzgado tumbó los recursos de Cloudflare y RootedCON. Desde entonces, cada jornada de LaLiga, las operadoras aplican bloqueos a rangos de IPs durante las horas de los partidos. Y <strong>el problema no está en la idea de perseguir la piratería, que es legítima, sino en cómo se ejecuta</strong>.</p>
<p>Cloudflare, igual que cualquier CDN o proveedor cloud moderno, asigna la misma IP a miles de clientes a la vez (las IPv4 son un recurso escaso y caro).</p>
<p>Cuando LaLiga señala una IP que aloja una web pirata, en esa misma IP suele haber cientos o miles de webs legítimas que no tienen nada que ver. Y todas caen a la vez.</p>
<p>La lista de damnificados es larga e incluye perlas como la web de la Real Academia Española, TDTChannels, parte de Vercel, GitHub, Twitch, partes de RedSys (la red de pagos con tarjeta mayoritaria en España), foros, blogs personales, tiendas online y, sí, <strong>decenas de miles de pymes que ni son piratas ni tienen nada que ver con el fútbol</strong>.</p>
<p>Cloudflare ha llevado el caso al gobierno de Estados Unidos en noviembre de 2025, y plataformas como BunnyCDN o Vercel han empezado a sacar nodos de España o a restringir sus servicios aquí precisamente por esto. Vamos, que como siempre <strong>dando ejemplo en España de cómo no hacer las cosas para fomentar la innovación</strong>.</p>
<p>Por si fuera poco, desde agosto de 2025 <strong>LaLiga ha empezado a mandar emails amenazantes a propietarios de webs</strong> que comparten IP con sitios de fútbol pirata, usando la normativa ICANN como vía.</p>
<p>El caso más sonado fue el del blog de Lázaro, un blog personal sobre GNU/Linux que recibió uno de estos correos. Si te llega uno, hablamos al final del artículo.</p>
<p>Hasta aquí los antecedentes. Si quieres más detalle puedes pasarte por <a href="https://laligagate.com/" target="_blank" rel="nofollow noopener">laligagate.com</a>, que documenta el desastre con calma y rigor, pero ya <strong>vamos a lo que de verdad nos interesa</strong>.</p>
<h2>Cómo saber si tu web está siendo bloqueada</h2>
<p>La herramienta de referencia es <a href="https://hayahora.futbol/" target="_blank" rel="nofollow noopener">hayahora.futbol</a>. La montaron entre varios ingenieros (en palabras de Tebas, «cuatro frikis») que rastrean en tiempo real qué IPs están bloqueadas en cada operador y mantienen un histórico público con sondas en conexiones reales. Tiene tres cosas que vienen muy bien:</p>
<ul>
<li>Un indicador grande de si hay partido y hay bloqueos ahora mismo.</li>
<li>Un buscador donde metes tu dominio y te dice si tu IP está afectada.</li>
<li>Unos archivos TXT y JSON públicos (<code>https://hayahora.futbol/estado/blocked-any.txt</code> y <code>https://hayahora.futbol/estado/data.json</code>) que cualquier plugin o script puede consultar.</li>
</ul>

<a href="https://ayudawp.com/laligagate/no-ips-bloqueadas-futbol-laliga-gate/" rel="nofollow"><img width="1200" height="630" src="https://ayudawp.com/wp-content/uploads/2026/05/no-ips-bloqueadas-futbol-laliga-gate-1200x630.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/no-ips-bloqueadas-futbol-laliga-gate-1200x630.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/no-ips-bloqueadas-futbol-laliga-gate-768x403.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/no-ips-bloqueadas-futbol-laliga-gate-1536x806.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/no-ips-bloqueadas-futbol-laliga-gate.jpg 1920w" sizes="(max-width: 1200px) 100vw, 1200px" decoding="async" fetchpriority="high"></a>
<a href="https://ayudawp.com/laligagate/ips-bloqueadas-futbol-laligagate/" rel="nofollow"><img width="1200" height="871" src="https://ayudawp.com/wp-content/uploads/2026/05/IPs-bloqueadas-futbol-laligagate-1200x871.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/IPs-bloqueadas-futbol-laligagate-1200x871.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/IPs-bloqueadas-futbol-laligagate-768x558.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/IPs-bloqueadas-futbol-laligagate-1536x1115.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/IPs-bloqueadas-futbol-laligagate.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/laligagate/comprobar-web-afectada-laligagate-futbol/" rel="nofollow"><img width="1200" height="628" src="https://ayudawp.com/wp-content/uploads/2026/05/Comprobar-web-afectada-laligagate-futbol-1200x628.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/Comprobar-web-afectada-laligagate-futbol-1200x628.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/Comprobar-web-afectada-laligagate-futbol-768x402.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/Comprobar-web-afectada-laligagate-futbol-1536x804.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/Comprobar-web-afectada-laligagate-futbol.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>

<p>Si tienes dudas sobre si tu web está cayendo los fines de semana por los bloqueos, lo primero es entrar ahí cuando haya partido de liga en España, y comprobarlo. Si tu IP aparece en la lista de bloqueadas o si tu dominio sale como afectado, ya tienes la respuesta.</p>
<p>Y si no aparece pero sigues recibiendo quejas, lo siguiente es pedirle a alguien con Movistar, Vodafone, MasOrange o DIGI que pruebe a entrar en tu web justo cuando hay partido. Si a ti, con otra red, te carga sin problema y a esa persona no, no hay misterio, te están jodiendo por obra y gracia del fútbol.</p>
<h2>Y NO, desactivar el proxy de Cloudflare NO deja tu web indefensa</h2>
<p>Antes de entrar en soluciones tengo que pararme aquí, porque cada vez que alguien recomienda desactivar el proxy de Cloudflare para sortear los bloqueos aparece un coro de cuentas (muchas nuevas, muchas idénticas, muchas sospechosamente activas) repitiendo la misma cantinela: «<strong>eso no es un bypass, eso es dejar tu web expuesta</strong>«, «<strong>vas a comerte un DDoS</strong>«, «<strong>estás revelando la IP de tu servidor</strong>«.</p>
<p>A ver, pedazo de bobos (no es para ti, es para los que dicen esas cosas), eso <strong>es una tontería, falso</strong> y, encima, es hasta un insulto a cualquiera que haya tenido una web en internet antes de 2015.</p>
<p><strong>La mayoría de webs del mundo no están detrás del proxy de Cloudflare ni de ningún CDN</strong> similar, y funcionan perfectamente.</p>
<p>La idea de que una web «queda indefensa» sin la nubecita naranja viene de mezclar dos cosas distintas, la protección activa y los servicios añadidos.</p>
<p>La seguridad real de tu WordPress está en muchas capas, y no dependen de Cloudflare:</p>
<ul>
<li>Hosting con buena protección anti-DDoS por defecto (que casi todos los hosting españoles serios la tienen).</li>
<li>El cortafuegos, también, de tu hosting (pues la mayoría tienen WAF a nivel de servidor).</li>
<li>Los plugins de seguridad que uses (Wordfence, Solid Security, AIOS, <a href="https://ayudawp.com/tag/vigilante/" target="_blank" rel="noopener">Vigilante</a>).</li>
<li>Las contraseñas fuertes, el 2FA y unas claves salt de WordPress bien generadas.</li>
<li>Mantener actualizado WordPress, los plugins y el tema.</li>
<li>Reglas básicas de <code>.htaccess</code> o de Nginx para bloquear lo más obvio.</li>
</ul>
<p><strong>Cloudflare es un complemento muy útil</strong> que te da CDN, caché distribuida, ocultación de la IP de origen y freno temprano de <a href="https://ayudawp.com/ataques-ddos-wordpress/" target="_blank" rel="noopener">ataques DDoS</a>, pero <strong>no es la columna vertebral de tu seguridad</strong>, solo una capa recomendable. <strong>Y si lo era, tu seguridad ya tenía un problema antes</strong> de que LaLiga apareciera.</p>
<p>Aclarado esto, vamos a las soluciones.</p>
<h2>Solución 1: No usar ninguna CDN</h2>
<p>La opción más radical y, curiosamente, <strong>la que más gente lleva décadas usando sin saber que está «<em>indefensa</em>»</strong>, ejem.</p>
<p>Quitas Cloudflare del medio, cambias de nuevo los NS a los de tu hosting, y <strong>tu dominio apunta directamente a la IP de tu servidor</strong>. Fin del problema con los bloqueos, tu IP ya no está en ningún rango compartido de CDN.</p>
<p>Lo que pierdes:</p>
<ul>
<li>Caché global distribuida (las visitas internacionales irán algo más lentas si tu servidor está solo en España).</li>
<li>Ocultación de la IP de origen (cualquier herramienta tipo <code>nslookup</code> ve tu IP real).</li>
<li>Mitigación de DDoS volumétricos a nivel de Cloudflare (sigues teniendo la del hosting, que para el 99% de los casos es suficiente).</li>
<li>Algunos servicios de optimización como Rocket Loader, Polish, Mirage o APO.</li>
<li>Reglas de seguridad de la CDN.</li>
</ul>
<p>Lo que ganas es que <strong>tu web ya no está expuesta a los bloqueos de IPs de CDN compartida</strong>. Sigues teniendo SSL (cualquier hosting decente trae <a href="https://ayudawp.com/lets-encrypt-certificado-ssl-libre-y-gratuito-para-asegurar-tu-web-con-https/" target="_blank" rel="noopener">Let’s Encrypt</a> gratis), DNS, correo y todo lo demás. Si tu web no es enorme no recibe ataques constantes y tu hosting tiene buena infraestructura, esta opción es <strong>perfectamente viable</strong>.</p>
<p>La gente que tiene su WordPress en un buen hosting español sin Cloudflare por delante lleva, no años, décadas funcionando sin problemas.</p>
<p>Si tu web es un blog personal, una web corporativa pequeña o una tienda con tráfico nacional esta opción es razonable. Pero <strong>si vas a hacerlo, hazlo bien</strong>, revisa que tu hosting tenga protección anti-DDoS básica, ten activado un plugin de seguridad serio, mantén todo actualizado y monitoriza con algo tipo UptimeRobot.</p>
<h2>Solución 2: Cambiar de CDN (con sus matices)</h2>
<p>La idea suena bien, porque <strong>si Cloudflare es el problema, me voy a otra CDN y ya está ¿no?</strong>. La realidad es más complicada…</p>
<p>Cualquier CDN o cualquier proveedor cloud con IPs compartidas <strong>puede acabar también en el punto de mira de LaLiga</strong>. Ya ha pasado con Vercel, con Akamai, con BunnyCDN. De hecho, según ha trascendido en foros como BandaAncha, BunnyCDN ha empezado a restringir sus POPs (puntos de presencia) de España a cuentas Enterprise desde diciembre de 2025, en parte por este lío.</p>
<p>Justo cuando más útil sería tener una alternativa europea con servidores en España, esa alternativa empieza a desaparecer.</p>
<p>Dicho esto, sí tienes opciones que <strong>ahora mismo</strong> están menos afectadas o que no comparten infraestructura con las webs de fútbol pirata:</p>
<ul>
<li>Bunny.net sigue siendo una alternativa muy buena en relación calidad-precio (a partir de 0,01 € por GB), aunque con la advertencia anterior sobre los POPs de España. Para el resto de Europa funciona de maravilla.</li>
<li>KeyCDN en pago por uso, sin tarifas mensuales fijas, más barato que Cloudflare Pro para webs medianas.</li>
<li>Sucuri si lo que te interesa es el paquete WAF + CDN + limpieza de malware en uno.</li>
<li>QUIC.cloud si usas LiteSpeed Cache, con plan gratuito para webs pequeñas.</li>
</ul>
<p>Migrar de CDN tampoco es trivial, pues implica cambios de DNS, reconfigurar reglas de caché, regenerar certificados, reapuntar registros. Si lo haces solo para sortear los bloqueos de LaLiga, piénsatelo bien, porque <strong>mañana puede ser ese mismo proveedor el que esté en esa lista infame</strong>.</p>
<h2>Solución 3: Desactivar y reactivar el proxy de Cloudflare manualmente</h2>
<p>Si quieres <strong>seguir aprovechando las ventajas de Cloudflare la mayor parte del tiempo y solo dejarlo fuera cuando hay partido</strong>, esta es tu solución, y <strong>no es difícil de aplicar</strong>.</p>
<p>En el panel DNS de Cloudflare cada registro tiene una <em>nubecita</em>, si está naranja el tráfico pasa por el proxy de Cloudflare (y por tanto por las IPs que LaLiga bloquea), si está gris Cloudflare solo resuelve el DNS y el tráfico va directo a la IP de tu servidor, sin tocar las IPs de Cloudflare.</p>
<p>Para activar este modo «<strong>Solo DNS</strong>» basta con entrar a Cloudflare, ir a DNS, pulsar el icono de la nube en los registros A, AAAA y CNAME de tu dominio y dejarlos en gris. El cambio es instantáneo, no afecta a la resolución del dominio y, sobre todo, saca tu web del rango de IPs que LaLiga bloquea.</p>

<a href="https://ayudawp.com/laligagate/registros-dns-cloudflare/" rel="nofollow"><img width="1200" height="734" src="https://ayudawp.com/wp-content/uploads/2026/05/registros-dns-cloudflare-1200x734.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/registros-dns-cloudflare-1200x734.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/registros-dns-cloudflare-768x470.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/registros-dns-cloudflare-1536x939.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/registros-dns-cloudflare.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/laligagate/desactivar-proxy-cloudflare-pasar-a-solo-dns/" rel="nofollow"><img width="1200" height="648" src="https://ayudawp.com/wp-content/uploads/2026/05/desactivar-proxy-cloudflare-pasar-a-solo-dns-1200x648.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/desactivar-proxy-cloudflare-pasar-a-solo-dns-1200x648.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/desactivar-proxy-cloudflare-pasar-a-solo-dns-768x415.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/desactivar-proxy-cloudflare-pasar-a-solo-dns-1536x830.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/desactivar-proxy-cloudflare-pasar-a-solo-dns.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>

<p>Cuando termine el partido, vuelves a poner las nubes en naranja y listo. Pierdes durante un par de horas la caché de Cloudflare, la ocultación de tu IP de origen y algunos servicios derivados, pero sigues teniendo SSL, DNS y, sobre todo, una web que carga.</p>
<p>El inconveniente es obvio, que hay que estar pendiente del calendario y hacerlo a mano cada fin de semana. Si tienes una sola web y eres ordenado, es viable, pero si llevas varias o si simplemente no te quieres ocupar o no siempre vas a poder, pasa a la solución 4.</p>
<h3>Apunte breve sobre ECH (y por qué no te salva)</h3>
<p>Es probable que hayas leído sobre ECH (Encrypted Client Hello), <strong>una extensión del protocolo TLS que cifra el campo SNI</strong>, que es donde el navegador le decía a la operadora a qué dominio querías acceder. Cloudflare lo activó por primera vez en 2023, lo tuvo que desactivar un tiempo, y lo reactivó a partir de septiembre de 2024.</p>
<p>Desde marzo de 2026 es estándar oficial del IETF y <strong>está disponible gratis para cualquier cliente de Cloudflare</strong>, sin hacer nada por tu parte.</p>
<p>El detalle importante es que <strong>ECH protege contra los bloqueos basados en analizar el SNI, que son los antiguos, los bloqueos actuales de LaLiga ya no funcionan así</strong>, porque al ver que ECH les complicaba el filtrado, <strong>pasaron a bloquear directamente por IP</strong>.</p>
<p><strong>Contra el bloqueo por IP, ECH no hace nada</strong>, porque la IP sigue siendo visible para la operadora antes incluso de empezar a resolver el TLS.</p>
<p>Está bien que ECH exista y mejora la privacidad de todos, pero no es solución a los bloqueos actuales.</p>
<h2>Solución 4: Automatizar la desactivación del proxy con un plugin</h2>
<p>Llegamos a <strong>la solución más cómoda y la que realmente recomiendo si quieres olvidarte del tema</strong>. Hay <strong>dos plugins de WordPress, los dos gratuitos, los dos de código abierto</strong>, los dos hijos de la misma idea. Te cuento la historia rápida porque tiene su gracia.</p>
<p>El planteamiento original lo publicó David Carrero en GitHub, y era un plugin que consulta hayahora.futbol cada X minutos y, si detecta bloqueos activos, llama a la API de Cloudflare para poner en gris las nubes de los registros DNS que tú elijas. Cuando los bloqueos terminan, las vuelve a poner en naranja.</p>
<p>Sobre esa primera versión hice una adaptación (un <code>fork</code> dicho en friki) en mi GitHub donde fui simplificando la interfaz, pensando más en el usuario final que en el técnico, añadiendo avisos por email, opciones de omisión manual, límite de operadores y unas cuantas mejoras más. Esas mejoras han ido pasando con el tiempo al plugin original, que ahora está publicado en el directorio de WordPress.org, así que por una cosa o por otra son prácticamente hermanos.</p>
<p>Así que tienes dos opciones, según prefieras:</p>
<h3>ES Football Bypass for Cloudflare (en WordPress.org)</h3>
<p>Es el plugin de David Carrero, instalable directamente desde Plugins → Añadir nuevo buscando «ES Football Bypass for Cloudflare».</p>
<p>Si te gusta tirar de directorio oficial con actualizaciones automáticas, es el camino más cómodo. Tiene dos modos de interfaz (simple y avanzado), admite Global API Key y para API Tokens de Cloudflare, diagnóstico del feed, panel de «¿Hay fútbol ahora?» para enseñarle al cliente, y notificaciones por email.</p>
<h3>¿Hay ahora fútbol? – Bypass #LaLigaGate (en GitHub)</h3>
<p>Es mi adaptación, disponible en <a href="https://github.com/fernandotellado/bypass-laligagate" target="_blank" rel="nofollow noopener">github.com/fernandotellado/bypass-laligagate</a>.</p>
<p>Hace exactamente lo mismo, consultar hayahora.futbol, gestionar la API de Cloudflare y automatizar el bypass. La descarga es manual (te bajas el zip y lo subes a tu WordPress) porque no está publicado en WordPress.org, y lo creé y mantengo principalmente para <a href="https://mantenimiento.ayudawp.com/" target="_blank" rel="nofollow noopener">mis clientes del servicio de mantenimiento</a>, pero está <strong>abierto al que quiera usarlo</strong>.</p>
<p>Al estar fuera del directorio oficial las actualizaciones son manuales también, así que valóralo según lo cómodo que estés con ese flujo.</p>
<p>¿Que por qué no lo he subido a wordpress.org?, pues porque ya estaba en ese proceso el de David, y porque esto es temporal (espero) y no me gusta subir plugins a WordPress para cosas que son temporales.</p>
<hr>
<p>Cualquiera de los dos te resuelve el problema.</p>
<p>Si quieres comodidad de instalación y actualización automática vete al de WordPress.org. Si prefieres una versión que voy puliendo casi a diario, según los baches que voy encontrando con mis clientes y los usuarios que se han ido apuntando, el que tengo en GitHub funciona perfectamente, y como soy un intenso casi siempre tendrá alguna cosilla más.</p>
<h3>Lo que tienes que tener a mano para configurarlos</h3>
<p>Da igual cuál de los dos uses, vas a necesitar:</p>
<ul>
<li>El <strong>ID de zona</strong> de tu dominio en Cloudflare. Lo tienes en el panel principal del dominio, abajo a la derecha.</li>
<li>Conexión con la API de Clouflare, y tienes dos posibilidades, ambas funcionan sin problema:
<ul>
<li>Un <strong>token de API</strong> de Cloudflare con permisos de <code>Zone:Read, DNS:Read</code> y <code>DNS:Edit</code>. Lo creas en My Profile → API Tokens → Create Token → Custom Token.</li>
<li>La Global API Key, disponible en tu perfil de Cloudflare, más sencilla de usar, porque no tienes que configurar nada, aunque es como más seguro usar el anterior, porque eliges qué permisos das y cuáles no.</li>
</ul>
</li>
<li><strong>Decidir qué registros DNS</strong> quieres que se gestionen. Lo normal es activar el bypass solo en los registros del dominio principal y de <code>www</code>, y dejar tranquilos los de correo (MX, registros de Google Workspace, etc.) que no están afectados.</li>
</ul>
<p>Una vez configurado el plugin (cualquiera de los dos) se encarga solo. Te puede mandar un email cuando active el bypass y otro cuando lo desactive, por si quieres tener constancia, pero es opcional. Los ajustes son casi iguales en ambos plugins también, yo soy más pijotero con la interfaz, David más puntilloso con la información técnica.</p>
<p>Aquí te dejo unas capturas del mío, pero se llevan poco…</p>

<a href="https://ayudawp.com/laligagate/bypass-laligagate-ayuda-wordpress-esado/" rel="nofollow"><img width="1200" height="403" src="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-esado-1200x403.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-esado-1200x403.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-esado-768x258.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-esado-1536x516.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-esado.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/laligagate/bypass-laligagate-ayuda-wordpress-credenciales/" rel="nofollow"><img width="1200" height="686" src="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-credenciales-1200x686.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-credenciales-1200x686.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-credenciales-768x439.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-credenciales-1536x878.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-credenciales.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/laligagate/bypass-laligagate-ayuda-wordpress-registros-dns/" rel="nofollow"><img width="1200" height="792" src="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-registros-dns-1200x792.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-registros-dns-1200x792.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-registros-dns-768x507.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-registros-dns-1536x1014.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-registros-dns.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/laligagate/bypass-laligagate-ayuda-wordpress-cron/" rel="nofollow"><img width="1200" height="535" src="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-cron-1200x535.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-cron-1200x535.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-cron-768x342.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-cron-1536x685.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-cron.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/laligagate/bypass-laligagate-ayuda-wordpress-opciones-email/" rel="nofollow"><img width="1200" height="690" src="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-opciones-email-1200x690.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-opciones-email-1200x690.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-opciones-email-768x442.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-opciones-email-1536x883.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/Bypass-LaLigaGate-Ayuda-WordPress-opciones-email.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>

<blockquote><p><em>Si has llegado a este artículo desde un buscador y resulta que tienes una <strong>tienda hecha con PrestaShop</strong> en vez de WordPress, también hice una versión (me la pidieron), <a href="https://github.com/fernandotellado/bypass-laligagate-prestashop" target="_blank" rel="nofollow noopener">bypass-laligagate-prestashop</a>. Funciona todo igual, pero en vez de plugin WordPress <strong>es un módulo para Prestashop</strong> (sí, yo también fui de Prestashop).</em></p></blockquote>
<h2>Si recibes un email de LaLiga (sí, está pasando)</h2>
<p><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159405 size-full" src="https://ayudawp.com/wp-content/uploads/2026/05/injusticia-laligagate.jpg" alt="" width="680" height="680" srcset="https://ayudawp.com/wp-content/uploads/2026/05/injusticia-laligagate.jpg 680w, https://ayudawp.com/wp-content/uploads/2026/05/injusticia-laligagate-150x150.jpg 150w" sizes="auto, (max-width: 680px) 100vw, 680px"></p>
<p>Para ir terminando, ahora que ya sabes qué hacer (o no) y cómo actuar, por si acaso, te cuento esta mierda, que lo es.</p>
<p>Desde agosto de 2025 LaLiga manda correos a propietarios de webs que comparten IP con sitios señalados como piratas. El correo suele venir de un email de la liga o desde Cloudflare a través del sistema de notificaciones ICANN, y te avisa de que «<strong>tu web está en una IP usada para distribuir contenido ilegal</strong>» y sugiere que pidas a Cloudflare que te asigne otra IP que no se comparta con piratas.</p>
<p>Si te llega uno, <strong>no te asustes</strong>:</p>
<ul>
<li><strong>No es una demanda</strong>, es una notificación para presionar, y de paso lo usan de márketing propio.</li>
<li><strong>Tu web no ha hecho nada ilegal</strong>, solo comparte una IP con otra que sí. Es como si te dicen que en tu edificio vive un traficante en el 4º C y tú vives en el bajo o incluso en el portal de al lado.</li>
<li><strong>La solución técnica que LaLiga sugiere</strong> (pedir IP no compartida a Cloudflare) <strong>no es factible para clientes del plan gratuito ni del Pro</strong>. Hace falta plan Business o Enterprise para tener IPs dedicadas, y aún así no es trivial.</li>
<li><strong>La solución de verdad es la misma de la que llevamos hablando todo el artículo</strong>, o sea desactivar tu web del proxy de Cloudflare, manual o automáticamente, para que tu tráfico no pase por esas IPs durante los bloqueos y ¡a tomar por culo ya!.</li>
</ul>
<p>Guarda el correo por si hace falta para registrarte en <strong>plataformas de afectados</strong> como <a href="https://afectadosporlaliga.palbin.com/" target="_blank" rel="nofollow noopener">afectadosporlaliga.palbin.com</a>, que documenta estos casos.</p>
<h2>Lo que no recomiendo (y por qué)</h2>
<p>Hay un par de «<em>soluciones</em>» que circulan por ahí y que no aplican si lo que tienes es una web WordPress propia y afectada:</p>
<ul>
<li><strong>Recomendar a tus visitantes que usen una VPN:</strong> Sirve para que ellos puedan saltarse el bloqueo en su navegación, pero no es práctico ni razonable pedir a tus usuarios que se instalen software adicional para entrar en tu tienda online o leer tu blog. Una VPN soluciona el lado del visitante, lo tuyo es solucionarlo en el lado del servidor.</li>
<li><strong>Cambiar de hosting:</strong> El hosting no es el problema. El problema está en el CDN delante del hosting (Cloudflare) y en el bloqueo que aplican las operadoras. Cambiar de hosting sin cambiar la configuración DNS no soluciona absolutamente nada.</li>
<li><strong>Esperar a que se arregle solo:</strong> Lleva año y pico sin arreglarse, hay una proposición no de ley (que no implica nada), está en manos del Tribunal Constitucional, Cloudflare ha tenido que ir a Estados Unidos a quejarse, pero la Comisión Europea por ahora avala a LaLiga. No esperes nada rápido.</li>
</ul>
<h2>¿Tengo que hacer algo ya mismo?</h2>
<p>Si has llegado hasta aquí y todavía no sabes por dónde tirar, <strong>este es el plan mínimo</strong>:</p>
<ol>
<li>Entra en <a href="https://hayahora.futbol/" target="_blank" rel="nofollow noopener">hayahora.futbol</a> cuando haya partido de la liga de fútbol española, mete tu dominio y comprueba si estás afectado.</li>
<li>Si lo estás y tienes Cloudflare activo, abre el panel DNS de Cloudflare y prueba a poner en gris las nubes de los registros A, AAAA y CNAME de tu dominio principal. Hazlo justo antes del próximo partido y observa qué pasa.</li>
<li>Si funciona y no quieres estar pendiente cada fin de semana, instala uno de los dos plugins de bypass que hemos visto (el de <a href="https://wordpress.org/plugins/es-football-bypass-for-cloudflare/" target="_blank" rel="nofollow noopener">WordPress.org</a> o el de <a href="https://github.com/fernandotellado/bypass-laligagate" target="_blank" rel="nofollow noopener">GitHub</a>) y configúralo con tu ID de zona y demás (mira arriba).</li>
<li>Si tu web no recibe ataques constantes ni necesita CDN global, plantéate dejar de usar de Cloudflare y apuntar al servidor.</li>
<li>Si te llega un correo de LaLiga, guárdalo, no te asustes, y aplica las soluciones técnicas. No requiere respuesta legal por tu parte.</li>
</ol>
<p>Ojalá este artículo deje de tener sentido pronto. Mientras tanto, si tienes que mantener una web WordPress operativa los fines de semana en España, ya sabes lo que toca.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/laligagate/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Qué es la paleta de comandos de WordPress y cómo se usa</title>
		<link>https://ayudawp.com/paleta-comandos-wordpress/</link>
					<comments>https://ayudawp.com/paleta-comandos-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Tue, 12 May 2026 06:28:00 +0000</pubDate>
				<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Paleta de comandos]]></category>
		<category><![CDATA[Principiante]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159004</guid>

					<description><![CDATA[WordPress tiene un atajo de teclado que te permite saltar a cualquier pantalla del admin, crear entradas, cambiar plantillas y ejecutar acciones sin tocar el ratón. Se llama paleta de comandos, se abre con Cmd+K en Mac o Ctrl+K en Windows, y la mayoría de la gente no sabe ni que existe.]]></description>
										<content:encoded><![CDATA[<p>WordPress tiene un atajo de teclado que te permite <strong>saltar a cualquier pantalla del admin, crear entradas, cambiar plantillas y ejecutar acciones sin tocar el ratón</strong>. Se llama <strong>paleta de comandos</strong>, se abre con <code>Cmd+K</code> en Mac o <code>Ctrl+K</code> en Windows, y la mayoría de la gente no sabe ni que existe.</p>
<p>Si usas Visual Studio Code, Figma, Notion o Spotlight en Mac ya sabes cómo funciona, e<strong>scribes lo que necesitas, seleccionas y listo</strong>. WordPress incorporó esta misma idea en la versión 6.3 y desde entonces la ha ido ampliando hasta convertirla en <strong>una de las herramientas más útiles del admin</strong>.</p>
<p>En este artículo te explico <strong>todo lo que puedes hacer con ella, con ejemplos prácticos y trucos</strong> para sacarle partido. Y si eres desarrollador y quieres añadir tus propios comandos, tendrás un artículo dedicado muy pronto.</p>
<p><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159010 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/04/paleta-de-comandos-editor-wordpress-1200x675.jpg" alt="paleta de comandos editor wordpress" width="1200" height="675" srcset="https://ayudawp.com/wp-content/uploads/2026/04/paleta-de-comandos-editor-wordpress-1200x675.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/04/paleta-de-comandos-editor-wordpress-768x432.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/04/paleta-de-comandos-editor-wordpress-1536x864.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/04/paleta-de-comandos-editor-wordpress.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px"></p>
<h2>Cómo se abre la paleta de comandos</h2>
<p>Tienes dos formas de abrirla:</p>
<ul>
<li><strong>Con el teclado</strong>: Es lo más rápido. Pulsa <strong>Cmd+K</strong> en Mac o <strong>Ctrl+K</strong> en Windows y aparece un cuadro de búsqueda centrado en la pantalla. <strong>Empieza a escribir y verás los resultados filtrarse en tiempo real</strong>.</li>
<li><strong>Con el ratón</strong>: Haciendo clic en la barra de título que aparece en la <strong>parte superior del editor</strong> del sitio o del editor de entradas. Desde WordPress 7.0 hay además un <strong>icono de búsqueda en la barra de admin</strong> que la abre directamente, sin necesidad de recordar el atajo.</li>
</ul>
<p><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159011 size-full" src="https://ayudawp.com/wp-content/uploads/2026/04/iconos-paleta-comandos-wordpress-7.jpg" alt="iconos paleta comandos wordpress 7" width="1200" height="301" srcset="https://ayudawp.com/wp-content/uploads/2026/04/iconos-paleta-comandos-wordpress-7.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/04/iconos-paleta-comandos-wordpress-7-768x193.jpg 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px"></p>
<p>Para cerrarla, da igual como la abriste, pulsa <strong>Escape</strong> o haz clic fuera del cuadro.</p>
<h2>Dónde funciona</h2>
<p>La paleta de comandos ha ido ganando terreno con cada versión de WordPress:</p>
<ul>
<li><strong>WordPress 6.3</strong> (agosto 2023): Primera versión. Solo disponible en el editor del sitio y en el editor de entradas/páginas.</li>
<li><strong>WordPress 6.8</strong> (abril 2025): Se añadieron dos comandos nuevos, «Añadir nueva página» y «Abrir editor del sitio», disponibles desde el editor de entradas.</li>
<li><strong>WordPress 6.9</strong> (diciembre 2025): Salto grande. La paleta pasó a estar disponible en todo el panel de administración, no solo en los editores. Los comandos de navegación se movieron a un paquete propio (<code>@wordpress/core-commands</code>) para que funcionasen en cualquier pantalla del admin.</li>
<li><strong>WordPress 7.0</strong> (previsto para 2026): Se añade un botón visible en la barra de admin para que no dependas del atajo de teclado.</li>
</ul>
<h2>Qué puedes hacer con la paleta de comandos</h2>
<p>Los comandos disponibles cambian según dónde estés, no ofrece lo mismo al estar editando una entrada que navegando por el panel de administración. La paleta es contextual, y eso está bien porque así no te llena de opciones que no vienen a cuento.</p>
<h3>Comandos de navegación (disponibles en todo el admin)</h3>
<p>Estos son los que más vas a usar. Te permiten saltar directamente a cualquier sección del admin escribiendo su nombre:</p>
<ul>
<li>Ir a entradas, páginas, medios, comentarios.</li>
<li>Ir a plugins, temas, usuarios.</li>
<li>Ir a los ajustes (generales, escritura, lectura, etc.).</li>
<li>Ir a las pantallas de cualquier plugin que tenga menú en el admin (esto lo registra WordPress automáticamente).</li>
<li>Añadir nueva entrada o nueva página.</li>
</ul>
<p>Escribes el nombre de tu plugin y te salen sus submenús, super fácil y rápido.</p>
<p><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159012 size-full" src="https://ayudawp.com/wp-content/uploads/2026/04/paleta-comandos-buscar-ajustes.jpg" alt="paleta comandos buscar ajustes" width="804" height="852" srcset="https://ayudawp.com/wp-content/uploads/2026/04/paleta-comandos-buscar-ajustes.jpg 804w, https://ayudawp.com/wp-content/uploads/2026/04/paleta-comandos-buscar-ajustes-768x814.jpg 768w" sizes="auto, (max-width: 804px) 100vw, 804px"></p>
<h3>Comandos del editor del sitio y del editor de entradas</h3>
<p>Cuando trabajas en el editor del sitio (<strong>Apariencia → Editor</strong>) o en el editor de entradas y páginas, la paleta añade comandos específicos del contexto. Por ejemplo: resetear plantillas, abrir los estilos, activar el modo sin distracciones, cambiar de vista, editar la plantilla de la entrada actual o publicar directamente.</p>
<h3>Búsqueda de contenido</h3>
<p>Además de comandos, la paleta te permite buscar entradas y páginas por su título. Escribes el nombre y te aparece con la opción de ir directamente a editarla. Viene muy bien cuando tienes cientos de entradas y no quieres pasar por la lista de «Todas las entradas» para encontrar la que buscas.</p>
<p><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159013 size-full" src="https://ayudawp.com/wp-content/uploads/2026/04/buscar-contenidos-paleta-comandos.jpg" alt="buscar contenidos paleta comandos" width="792" height="302" srcset="https://ayudawp.com/wp-content/uploads/2026/04/buscar-contenidos-paleta-comandos.jpg 792w, https://ayudawp.com/wp-content/uploads/2026/04/buscar-contenidos-paleta-comandos-768x293.jpg 768w" sizes="auto, (max-width: 792px) 100vw, 792px"></p>
<h3>Lista completa de comandos</h3>
<p>La lista crece con cada versión de WordPress, así que para no quedarnos cortos puedes consultar la <a href="https://wordpress.org/documentation/article/site-editor-command-palette/#list-of-available-commands" target="_blank" rel="nofollow noopener">lista oficial actualizada en la documentación de WordPress.org</a> y, si quieres ver el código fuente donde se registran, lo tienes en el <a href="https://github.com/WordPress/gutenberg/tree/trunk/packages/edit-site/src/hooks/commands" target="_blank" rel="nofollow noopener">repositorio de Gutenberg en GitHub</a>. Aunque la mejor forma de descubrirlos es abrir la paleta y empezar a escribir.</p>
<h2>Trucos para dominar la paleta de comandos de WordPress</h2>
<ul>
<li><strong>Escribe solo las primeras letras:</strong> No necesitas escribir el comando completo. Con «<strong>plu</strong>» ya te aparece «<strong>Ir a plugins</strong>». Con «<strong>est</strong>» te salen las opciones de <strong>estilos</strong>. La paleta filtra sobre la marcha y normalmente <strong>con dos o tres letras ya tienes lo que buscas</strong>.</li>
<li><strong>Usa las flechas del teclado para moverte:</strong> No necesitas el ratón para nada. Flechas arriba y abajo para seleccionar, <code>Enter</code> para ejecutar. Es la forma más rápida de trabajar.</li>
<li><strong>Aprende los cinco o seis comandos que más repites:</strong> Si todos los días creas entradas, editas páginas y revisas comentarios, esos tres saltos con <code>Cmd+K</code> te ahorran un montón de clics y segundos de espera entre páginas del admin.</li>
<li><strong>Combínala con los atajos de teclado del editor:</strong> La paleta de comandos va muy bien junto con los atajos del editor de bloques. Por ejemplo, puedes usar <code>Cmd+K</code> para saltar a una entrada, <code>/</code> para insertar un bloque sin tocar el insertador, y <code>Cmd+Shift+D</code> para duplicar un bloque. Todo sin soltar el teclado.</li>
</ul>
<h2>Limitaciones que debes tener en cuenta</h2>
<p>La paleta de comandos es útil, pero tiene sus límites:</p>
<ul>
<li><strong>No funciona en la parte visible de la web:</strong> Solo en el panel de administración. Si estás viendo tu web como visitante, el atajo no hace nada.</li>
<li><strong>Necesitas un tema de bloques para el editor del sitio:</strong> Los comandos específicos del editor del sitio (plantillas, estilos, patrones) solo aparecen si usas un tema de bloques como Twenty Twenty-Five. Con un tema clásico, la paleta funciona pero con menos opciones.</li>
<li><strong>No hay forma de personalizar los comandos sin código:</strong> Como usuario, no puedes añadir ni quitar comandos. Eso requiere la API de JavaScript, que es lo que veremos en el artículo para desarrolladores.</li>
<li><strong>Conflicto con Firefox en Mac:</strong> El atajo Cmd+K en Firefox abre la barra de búsqueda del navegador. WordPress sobreescribe este comportamiento dentro del editor, pero si estás en otra pantalla del admin puede que no funcione bien. En ese caso, haz clic en el icono de búsqueda de la barra superior o usa otro navegador.</li>
</ul>
<h2>Plugins y extensiones para hacer aún más</h2>
<p>La paleta nativa está bien para navegar y ejecutar los comandos que trae WordPress de serie pero hay plugins que la llevan más lejos. Ojo, hay que distinguir entre los que amplían la paleta nativa y los que son alternativas independientes.</p>
<h3>Plugins que amplían la paleta nativa</h3>
<p>Algunos plugins ya registran sus propios comandos dentro de la paleta de WordPress. Cuando los instalas, sus opciones aparecen junto a las de serie al pulsar <code>Cmd+K</code>.</p>
<ul>
<li><a href="https://wordpress.org/plugins/block-visibility/" target="_blank" rel="nofollow noopener">Block Visibility</a> es uno de los pocos que ya lo hace. Añade un comando para gestionar las condiciones de visibilidad directamente desde la paleta, sin tener que buscar la opción en los ajustes del bloque.</li>
<li><a href="https://github.com/alleyinteractive/wp-command-palette" target="_blank" rel="nofollow noopener">WP Command Palette de Alley Interactive</a> (disponible en GitHub) va un paso más allá y registra automáticamente todos los elementos del menú del admin como comandos en la paleta nativa. Es decir, cualquier opción que tengas en el menú lateral, la encuentras escribiéndola en <code>Cmd+K</code>.</li>
</ul>
<p>En el artículo sobre cómo añadir comandos a la paleta veremos cómo <strong>un desarrollador puede hacer que su plugin se integre en la paleta de comandos</strong> de esta manera, con un ejemplo real usando el plugin <a href="https://es.wordpress.org/plugins/multiple-sale-prices-scheduler/" target="_blank" rel="nofollow noopener">Multiple Sale Prices Scheduler</a>.</p>
<h3>Alternativas independientes</h3>
<p>Antes de que WordPress incluyera la paleta en la versión 6.3, ya existían plugins que ofrecían lo mismo (y en algunos casos más). Estos funcionan de forma independiente, con su propia interfaz:</p>
<ul>
<li><a href="https://es.wordpress.org/plugins/turbo-admin/" target="_blank" rel="nofollow noopener">Turbo Admin</a> lleva años en el repositorio de WordPress.org y funciona como plugin o como extensión de navegador. Tiene su propia paleta de comandos con búsqueda de contenido por tipo (entradas, páginas, usuarios), atajos personalizables y un modo que limpia la barra de admin ocultando lo que no necesitas. Es gratuito, pero no funciona con las últimas versiones de WordPress, no le veo mucho futuro, ni siquiera presente, una pena.</li>
<li><a href="https://commandui.com/" target="_blank" rel="nofollow noopener">CommandUI</a> es una extensión de pago que funciona en el navegador sin instalar nada en WordPress. Ofrece navegación instantánea por todo el admin, integración con Elementor, Bricks y Divi (puedes abrir directamente una página en el maquetador), y un sistema de atajos contextuales.</li>
<li><a href="https://wpcommand.io/" target="_blank" rel="nofollow noopener">WPCommand</a> es otra extensión de navegador (también de pago) que detecta automáticamente qué maquetador se usó en cada página y te deja editarla directamente desde la paleta. No instala nada en tu WordPress, funciona solo en tu navegador.</li>
</ul>
<p>La diferencia principal es que <strong>la paleta nativa es gratuita, viene con WordPress, no necesita nada extra y seguirá mejorando con cada versión</strong>. Las alternativas tienen más funcionalidades hoy, pero apuestan a que WordPress no las alcance. Tú decides qué necesitas.</p>
<h2>Qué nos espera en el futuro</h2>
<p>El equipo de desarrollo de WordPress tiene bastantes planes para la paleta. En el <a href="https://github.com/WordPress/gutenberg/issues/66648" target="_blank" rel="nofollow noopener">issue de seguimiento en GitHub</a> puedes ver un resumen de todo lo que se está trabajando. Las líneas principales son:</p>
<ul>
<li><strong>Agrupación de resultados:</strong> Ahora todos los resultados de búsqueda aparecen mezclados. La idea es separarlos por categoría (comandos, entradas, páginas, plantillas) para que sea más fácil encontrar lo que buscas cuando hay muchos resultados.</li>
<li><strong>Más comandos contextuales:</strong> Que los comandos disponibles se adapten mejor a lo que estás haciendo. Si estás editando un producto de WooCommerce, que aparezcan opciones específicas de productos. Si estás en una plantilla, que aparezcan las de plantillas.</li>
<li><strong>Atajos globales:</strong> Poder ejecutar acciones frecuentes (como previsualizar o publicar) con un atajo directo, sin pasar por la paleta.</li>
<li><strong>Más adopción por parte de plugins:</strong> A día de hoy, muy pocos plugins registran comandos propios en la paleta. Esto irá cambiando a medida que la API se estabilice y más desarrolladores la conozcan.</li>
</ul>
<p>Y luego está lo que a mi me gustaría, y es <strong>que fuese la interfaz para lanzar prompts IA a WordPress</strong>, con lo que se convertiría en la herramienta estrella sin rival, pero igual es mucho soñar. Yo de momento ya se lo tiré a uno de los desarrolladores del proyecto.</p>
<h2>¡Ya deberías estar usándola!</h2>
<p>Si no la has probado todavía, abre tu WordPress, pulsa <code>Cmd+K</code> (o <code>Ctrl+K</code>) y escribe lo primero que se te ocurra. Aunque sea «entradas» o «ajustes». En cuanto veas lo rápido que saltas de una pantalla a otra sin pasar por menús, no vas a querer volver a navegar como antes.</p>
<p>Y si eres desarrollador y <strong>quieres que tu plugin aparezca en la paleta con sus propios comandos</strong>, estate atento al próximo artículo donde te explico cómo hacerlo paso a paso, con un ejemplo real y código listo para adaptar. Mientras tanto, a lanzar comandos a la paleta, verás como <strong>mejora tu rendimiento usando WordPress</strong>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/paleta-comandos-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ataques DDoS en WordPress – Manual de superviencia para saber cómo prevenirlos, detectarlos y frenarlos paso a paso</title>
		<link>https://ayudawp.com/ataques-ddos-wordpress/</link>
					<comments>https://ayudawp.com/ataques-ddos-wordpress/#comments</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Mon, 11 May 2026 06:28:00 +0000</pubDate>
				<category><![CDATA[Seguridad WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Cloudflare]]></category>
		<category><![CDATA[DDoS]]></category>
		<category><![CDATA[Experto]]></category>
		<category><![CDATA[Principiante]]></category>
		<category><![CDATA[Sucuri]]></category>
		<category><![CDATA[VigIA]]></category>
		<category><![CDATA[Vigilante]]></category>
		<category><![CDATA[WordFence]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159119</guid>

					<description><![CDATA[Vamos a ver cómo proteger WordPress de ataques DDoS por capas, desde el DNS hasta la propia configuración de WordPress, con ejemplos que puedes adaptar a tu web.]]></description>
										<content:encoded><![CDATA[<p>Si tienes una web WordPress por pequeña que sea, <strong>tarde o temprano te toca lidiar con los ataques DDoS</strong>.</p>
<p>No hace falta que seas un medio importante ni una tienda con mucha facturación para que te caiga uno encima. <strong>Los ataques automatizados no discriminan</strong>, a veces eres tú el objetivo y otras veces solo eres una IP más en una lista, pero el efecto es el mismo en cualquiera de los dos casos: <strong>tu web se arrastra o se cae del todo</strong>.</p>
<p>Lo bueno es que <strong>con las defensas adecuadas puedes frenar la mayoría de estos ataques</strong>, y lo que no puedas parar al 100% al menos lo vas a aguantar sin que se te venga todo abajo.</p>
<p>Vamos a ver <strong>cómo montar esa protección por capas</strong>, desde el DNS hasta la propia configuración de WordPress, con ejemplos que puedes adaptar a tu web.</p>
<h2>Algunas cifras para que te hagas una idea</h2>
<ul>
<li><strong>Cloudflare bloqueó 20,5 millones de ataques DDoS</strong> solo en el primer trimestre de 2025, casi lo mismo que en todo 2024 junto.</li>
<li>Los ataques a la capa de aplicación, que son los que más afectan a WordPress, crecieron un 118% interanual a principios de 2025.</li>
<li>El 94% del tráfico de ataque ya va cifrado con HTTPS, lo que complica enormemente el filtrado.</li>
<li>En sitios sin protección, <strong>el 98% de las peticiones a <code>/wp-admin/</code> es tráfico de ataque y no usuarios reales</strong>.</li>
<li><strong>El 89% de los ataques duran menos de 10 minutos</strong>, menos de lo que tardas en llamar al soporte.</li>
<li>Contratar un DDoS-as-a-service en la red cuesta desde unos 35 euros la hora, al alcance de cualquier aburrido con tarjeta.</li>
<li>El ataque más grande registrado hasta la fecha alcanzó los <strong>31,4 Tbps</strong> en diciembre de 2025.</li>
</ul>
<p>Con estos números encima de la mesa, no se qué pensarás, pero yo creo que <strong>ignorar el tema no es una opción</strong>.</p>
<h2>Qué es exactamente un ataque DDoS</h2>
<p>DDoS son las siglas de <em>Distributed Denial of Service</em>, o sea, <strong>denegación de servicio distribuida</strong>.</p>
<p>La traducción al román paladino es bastante simple, porque lo que hace el atacante (que puede ser un tipo, un grupo o una red automatizada) es mandar tantísimas peticiones a tu web desde muchísimos sitios distintos a la vez que <strong>tu servidor no puede con todo y acaba petando, o va tan lento que es como si se hubiera caído</strong>.</p>
<p>La palabra clave aquí es «<strong>distribuido</strong>». Un ataque desde una sola IP lo paras con bloquear esa IP y listo, pero <strong>lo que hace peligroso al DDoS es que vienen miles o millones de peticiones desde IPs diferentes</strong>, muchas de ellas de ordenadores y dispositivos infectados sin que sus dueños lo sepan, lo que se conoce como botnets.</p>
<h2>Qué NO es un ataque DDoS</h2>
<p>Esto es importante que lo tengas claro desde el principio, porque se mezcla mucho. Estas <strong>cosas no son DDoS</strong> aunque los efectos a veces se parezcan:</p>
<ul>
<li>Un <strong>artículo tuyo que se vuelve viral</strong> y te manda miles de visitas en una hora es tráfico legítimo, por mucho que te tumbe el hosting.</li>
<li>Un <strong>bot de entrenamiento de IA</strong> que pasa por tu web sacando datos a pelo es scraping agresivo, no un ataque.</li>
<li>Una <strong>herramienta de SEO mal configurada</strong> que te machaca con peticiones es un bot gamberro, no un atacante.</li>
<li>Un <strong>plugin con un bucle infinito</strong> que genera peticiones a <code>wp-cron</code> cada dos segundos es un fallo de configuración, no un DDoS.</li>
</ul>
<h3>¿Y el scraping agresivo de las IAs?</h3>
<p>Para que te hagas una idea del lío que hay con esto, en julio de 2024 el CEO de iFixit denunció que ClaudeBot (el rastreador de Anthropic) había hecho casi un millón de peticiones a su web en 24 horas. <strong>Mucha gente lo llamó DDoS, pero técnicamente no lo era</strong> porque era un bot de entrenamiento sacando datos sin freno.</p>
<p>El efecto (servidores reventados y equipo corriendo a apagar el fuego) sí que <strong>recuerda mucho a un DDoS</strong>, y las defensas se solapan bastante, porque un <code>rate limiting</code> bien puesto te frena tanto a un atacante como a un bot chungo.</p>
<p>Pero no son lo mismo. <strong>Un DDoS lo lanza alguien con intención de hacerte daño</strong>, mientras que un bot de IA, aunque se pase catorce pueblos, solo quiere datos. Por eso en este tutorial <strong>me centro en los ataques con malas intenciones</strong>, que es lo que de verdad duele, aunque muchas de las soluciones te van a servir también para mantener a raya a los bots pesados.</p>
<h2>Los 3 tipos de DDoS que existen</h2>
<p>No todos los ataques son iguales, así que para defenderte bien <strong>tienes que saber contra qué te estás defendiendo</strong>.</p>
<h3>Ataques volumétricos</h3>
<p>Son los más antiguos y los más aparatosos. <strong>El atacante inunda tu conexión con una cantidad bestial de tráfico</strong> que satura el ancho de banda antes de que los datos lleguen a tu servidor, como si intentase meter el agua del mar por una manguera de jardín.</p>
<p>Contra esto <strong>no puedes hacer absolutamente nada desde WordPress, ni siquiera desde tu hosting</strong>.</p>
<p>El tráfico ya te ha petado la red antes de que tú puedas reaccionar, así que <strong>la única defensa real está en la capa CDN</strong>, que es donde Cloudflare y demás tienen infraestructura suficiente como para absorber estos volúmenes.</p>
<h3>Ataques de protocolo</h3>
<p>Estos <strong>van contra las debilidades de los protocolos de red</strong>, y el más conocido es el <code>SYN flood</code>, que manda millones de peticiones de conexión TCP sin completarlas para llenar la tabla de conexiones del servidor hasta que no puede aceptar ni una legítima.</p>
<p><strong>Tampoco se paran desde WordPress</strong>, se paran en el firewall del servidor, en el hosting o en la CDN.</p>
<h3>Ataques a la capa de aplicación (capa 7)</h3>
<p>Los ataques de capa 7 mandan <strong>peticiones HTTP o HTTPS que parecen totalmente legítimas</strong>, no saturan tu ancho de banda ni inundan la red, sino que simplemente le <strong>piden a tu WordPress que haga cosas caras una detrás de otra sin parar, hasta que PHP y MySQL se rinden</strong>.</p>
<p>Los puntos más castigados en WordPress son:</p>
<ul>
<li><code>wp-login.php</code>, para ataques de fuerza bruta disfrazados de DDoS.</li>
<li><code>xmlrpc.php</code>, que permite probar cientos de contraseñas en una sola petición.</li>
<li><code>admin-ajax.php</code>, que muchos plugins usan sin autenticación.</li>
<li>La búsqueda interna, que genera consultas pesadas a la base de datos.</li>
<li>La API REST, si no está bien protegida.</li>
<li><code>wp-cron.php</code>, si se ejecuta en cada petición.</li>
</ul>
<p>Este es el tipo de <strong>ataque que puedes (y debes) parar desde tu propia web, tu servidor y tu CDN</strong>.</p>
<h2>¡Pero si mi web no le importa a nadie! ¿por qué me van a atacar a mi?</h2>
<p>Si piensas «a mí quién me va a atacar, si mi web no es nadie» estás cometiendo un error muy común, porque <strong>los ataques DDoS no siempre van contra objetivos importantes y ni siquiera tienen siempre un motivo racional</strong>.</p>
<p>Estas son las razones habituales, de más a menos graves:</p>
<ul>
<li><strong>Extorsión:</strong> Alguien te escribe diciendo que si no le pagas X cantidad en criptomonedas te tumba la web, y si no pagas la tumba un rato para demostrar que puede. Es más habitual de lo que parece, sobre todo en tiendas online antes de eventos de venta importantes.</li>
<li><strong>Competencia desleal:</strong> Un competidor cabronazo contrata un ataque el día de tu campaña pre-navideña o el lanzamiento de un producto. Parece película, pero pasa, hay gente muy joputa por ahí.</li>
<li><strong>Hacktivismo:</strong> Si tu web tiene contenido que alguien considera ofensivo o contrario a sus ideas, te puede caer un ataque por motivos ideológicos.</li>
<li><strong>Cortina de humo:</strong> El DDoS es ruidoso y lo ve todo el mundo, así que mientras tú y tu equipo estáis apagando ese fuego, otro atacante aprovecha para meterse por la puerta de atrás sin que nadie le mire.</li>
<li><strong>Venganza personal:</strong> Un ex-empleado cabreado o un cliente insatisfecho que ha echado mano de un servicio de DDoS por horas.</li>
<li><strong>Pruebas de gilipollas aburridos:</strong> Los llamados <em>script kiddies</em>, niñatos con tiempo libre que prueban herramientas contra cualquier web que encuentren, sin motivo, por diversión.</li>
<li><strong>Daño colateral:</strong> Estás en un hosting compartido (de los malos) y el ataque va contra otro cliente, pero tu web se va al carajo porque comparte servidor.</li>
<li><strong>Automatización:</strong> Hay botnets que escanean internet buscando WordPress vulnerables y lanzan ataques de prueba para ver qué aguanta, y si tu web aguanta mal se centran en ti.</li>
</ul>
<blockquote><p>Con los <strong>servicios de <code>DDoS-as-a-service</code> por unos pocos euros la hora</strong>, la barrera de entrada para atacar a alguien es ridícula y cualquiera puede lanzar un ataque sin saber ni lo que está haciendo.</p></blockquote>
<h2>Cómo saber si estás bajo ataque</h2>
<p>Lo primero para defenderte es darte cuenta de que estás pasando por un ataque. Estos son los <strong>síntomas más habituales</strong>:</p>
<ul>
<li>La web va muy lenta o directamente no carga, con <strong>errores 502 o 504</strong>.</li>
<li>El panel del hosting muestra la <strong>CPU disparada</strong> o la base de datos al límite.</li>
<li><strong>Picos de tráfico enormes</strong> desde países o regiones donde no tienes audiencia.</li>
<li><strong>Miles de peticiones por minuto</strong> a una URL concreta, normalmente <code>wp-login.php</code>, <code>xmlrpc.php</code> o <code>admin-ajax.php</code>.</li>
<li>El soporte del hosting te avisa de que <strong>estás consumiendo recursos excesivos</strong>.</li>
<li><strong>Caídas intermitentes</strong> cada pocos minutos sin motivo aparente.</li>
</ul>
<h3>Herramientas para confirmarlo</h3>
<p>Antes de ponerte nervioso <strong>confirma que es un ataque real</strong> y no un problema tuyo. Puedes usar estas herramientas, todas gratuitas:</p>
<ul>
<li><strong>Logs de acceso del hosting:</strong> Míralos directamente, cualquier panel decente te los da. Busca picos anormales y repeticiones sospechosas de la misma IP o User-Agent.</li>
<li><strong>Query Monitor</strong>: Esta joya bendita en forma de plugin de WordPress te enseña qué está pasando por dentro.</li>
<li><strong>AbuseIPDB</strong>: Para comprobar si las IPs que sospechas están reportadas por abuso.</li>
<li><strong>Sucuri SiteCheck</strong>: Escaneo rápido y gratis.</li>
<li><strong>El dashboard de Cloudflare:</strong> Si lo tienes configurado, que muestra con mucho detalle qué tipo de tráfico estás recibiendo.</li>
</ul>
<h2>Defensa por capas, que es lo que funciona</h2>
<p><strong>No hay una sola solución contra los DDoS</strong>, lo que funciona es montar varias capas de defensa para que cada una frene un tipo de ataque distinto. Si una falla las demás aguantan el tipo. Vamos capa por capa.</p>
<h3>Capa 1: DNS y CDN</h3>
<p>Esta es la <strong>primera barrera y la más importante contra los ataques volumétricos y de protocolo</strong>. Básicamente, en vez de que el tráfico llegue directamente a tu servidor, pasa primero por una red de servidores enorme que filtra lo malo antes de dejar pasar lo bueno.</p>
<p>Las opciones más habituales son:</p>
<ul>
<li><strong>Cloudflare</strong>, que tiene un plan gratuito con protección básica contra DDoS y un WAF limitado.</li>
<li><strong>BunnyCDN</strong>, con precio asequible y buena infraestructura europea.</li>
<li><strong>QUIC.cloud</strong>, especialmente interesante si usas LiteSpeed Cache.</li>
<li><strong>Sucuri</strong>, algo más caro pero con WAF y limpieza incluida.</li>
</ul>
<p>Si ya usas Cloudflare activa el modo «<strong>Under attack</strong>» en cuanto detectes algo raro, porque ese modo añade una página de verificación JavaScript que los bots no pasan pero los humanos sí. Tienes la guía detallada en <a href="https://ayudawp.com/cabeceras-seguridad-http-wordpress/" target="_blank" rel="ugc noopener">el artículo sobre cabeceras de seguridad HTTP</a>, que complementa muy bien esta configuración.</p>
<h3>Capa 2: Hosting</h3>
<p>Un buen hosting WordPress te pone el trabajo mucho más fácil, porque <strong>los hosting gestionados de calidad tienen su propio WAF, detección de anomalías, limitación de recursos por cuenta y soporte técnico que reacciona rápido</strong> si te están atacando. Los hosting compartidos de medio pelo, en cambio, te van a dejar tirado en cuanto la cosa se ponga seria.</p>
<p>Si buscas un hosting que se tome en serio la seguridad yo uso y recomiendo <a href="https://www.siteground.es/go/ayudawp" target="_blank" rel="sponsored nofollow noopener">SiteGround</a>, que incluye WAF con reglas específicas para WordPress, mitigación automática de ataques pequeños y un panel de seguridad bastante completo. Afortunadamente hay buenos hostings españoles y europeos dignos para estas cosas, en eso casi hasta tenemos suerte. ¿Fuera? todo es campo.</p>
<h3>Capa 3: Servidor</h3>
<p>Aquí empezamos con lo jugoso. El archivo <code>.htaccess</code>, si estás en Apache o LiteSpeed (que es lo más común en hosting para WordPress), te deja bloquear peticiones antes incluso de que PHP se entere de que existen. Es rapidísimo y consume pocos recursos, así que <strong>es la primera línea real de defensa dentro de tu servidor</strong>.</p>
<p>Todas las reglas que siguen se añaden al archivo <code>.htaccess</code> que tienes en la raíz de tu WordPress, antes de las reglas que ya hay de WordPress. Haz siempre una copia de seguridad del archivo antes de tocarlo.</p>
<h4>Bloqueo por User-Agent</h4>
<p>Muchos bots atacantes y scrapers se identifican con cadenas reconocibles, así que bloquearlos por <code>User-Agent</code> te quita de encima un montón de ruido.</p>
<pre># Bloquear bots conocidos por abusivos
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (ahrefsbot|semrushbot|mj12bot|dotbot|petalbot|megaindex) [NC]
RewriteCond %{HTTP_USER_AGENT} (seokicks|blexbot|sogou|baiduspider|yandexbot) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (zoominfobot|serpstatbot|barkrowler|dataforseobot) [NC]
RewriteRule .* - [F,L]
&lt;/IfModule&gt;</pre>
<blockquote><p><strong>Advertencia</strong>: esto no te sirve contra atacantes serios, que falsifican el <code>User-Agent</code> sin problema, pero te quita de encima mucho scraper honesto (dentro de lo que cabe) y algunos bots de SEO cansinos que te consumen recursos a saco.</p></blockquote>
<h4>Restricción de métodos HTTP</h4>
<p>WordPress solo necesita los métodos <code>GET</code>, <code>POST</code> y <code>HEAD</code> para funcionar. Si tu web no tiene una API que use otros métodos <strong>bloquea el resto</strong>.</p>
<pre># Solo permitir métodos HTTP necesarios
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
RewriteRule .* - [F,L]
&lt;/IfModule&gt;</pre>
<p>Si usas la REST API con <code>PUT</code> o <code>DELETE</code> (por ejemplo desde un plugin como WooCommerce Bookings o una app móvil), añade esos métodos a la lista.</p>
<h4>Protección de xmlrpc.php</h4>
<p>XML-RPC es un vector de ataque clásico. Si no lo usas (la mayoría de webs no lo necesitan hoy en día), bloquéalo del todo.</p>
<pre># Bloquear acceso a xmlrpc.php
&lt;Files xmlrpc.php&gt;
    Require all denied
&lt;/Files&gt;</pre>
<p>Si lo necesitas (Jetpack, por ejemplo, aunque cada vez menos), permite solo los accesos desde las IPs autorizadas, entonces mete algo así:</p>
<pre># Permitir xmlrpc.php solo desde IPs concretas
&lt;Files xmlrpc.php&gt;
    Require ip 192.0.66.0/24
    Require ip 195.234.108.0/22
&lt;/Files&gt;</pre>
<h4>Protección de wp-cron.php</h4>
<p>El cron de WordPress se ejecuta por defecto cada vez que alguien visita tu web, y puede ser un punto de abuso. Lo mejor es desactivar esa ejecución automática y poner un cron real del servidor, pero de paso bloquea el acceso externo directo al archivo.</p>
<pre># Bloquear acceso externo a wp-cron.php
&lt;Files wp-cron.php&gt;
    Require all denied
&lt;/Files&gt;</pre>
<p>Para que el cron siga funcionando añade esto a tu <code>wp-config.php</code>:</p>
<pre>define( 'DISABLE_WP_CRON', true );</pre>
<p>Y luego <a href="https://ayudawp.com/wp-cron/" target="_blank" rel="noopener">configura un cron real en el panel del hosting</a> que lance <code>wp-cron.php</code> cada 15 minutos o cada hora, según lo que necesite tu web.</p>
<h4>Protección reforzada de wp-login.php</h4>
<p>El login es el objetivo número uno de los <strong>ataques de fuerza bruta disfrazados de DDoS</strong>. Esta regla limita el acceso a <code>wp-login.php</code> solo desde tu IP, ideal si trabajas siempre desde el mismo sitio.</p>
<pre># Acceso a wp-login.php solo desde IPs autorizadas
&lt;Files wp-login.php&gt;
    Require ip 81.123.45.67
&lt;/Files&gt;</pre>
<p><strong>Nota</strong>: Cambia 81.123.45.67 por tu IP pública real. Si tienes IP dinámica esto no te vale, y en ese caso mejor usa un plugin que cambie la URL del login (lo vemos más adelante).</p>
<h4>Limitar el tamaño de las peticiones</h4>
<p>Algunos ataques mandan peticiones <code>POST</code> enormes para tumbar el servidor, así que limita el tamaño máximo.</p>
<pre># Limitar tamaño máximo de petición a 10 MB
LimitRequestBody 10485760</pre>
<p>Si tu web sube archivos grandes (vídeos, por ejemplo), ajusta el valor a lo que realmente necesites, pero <strong>no lo dejes nunca sin límite</strong>.</p>
<h4>Bloqueo de IPs concretas</h4>
<p>Cuando identifiques IPs atacantes en tus registros bloquéalas directamente.</p>
<pre># Bloquear IPs concretas
&lt;RequireAll&gt;
    Require all granted
    Require not ip 123.45.67.89
    Require not ip 98.76.54.32
    Require not ip 10.20.30.0/24
&lt;/RequireAll&gt;</pre>
<h4>Bloqueo de hotlinking</h4>
<p>El <a href="https://ayudawp.com/que-es-hotlinking-y-como-protegerte/" target="_blank" rel="noopener">hotlinking</a> es cuando otras webs enlazan tus imágenes directamente desde sus servidores, usando tu ancho de banda. <strong>No es un DDoS, pero el efecto acumulado es parecido</strong>.</p>
<pre># Evitar hotlinking de imágenes
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?tudominio\.com [NC]
RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L]
&lt;/IfModule&gt;</pre>
<p><strong>Nota</strong>: Cambia tudominio.com por el tuyo, claro.</p>
<h3>Capa 4: WordPress</h3>
<p>Aunque tengas bien montadas las capas anteriores, desde WordPress también puedes (y debes) apretar tuercas. Estas son las configuraciones que se notan más:</p>
<ul>
<li><strong>Desactivar XML-RPC</strong> si no lo usas, y además de la regla htaccess hay plugins que lo hacen con un clic.</li>
<li><strong>Ocultar la URL del login</strong>, porque si los bots no encuentran <code>wp-login.php</code> no pueden atacarlo.</li>
<li><strong>Proteger la REST API</strong>, restringiendo quién puede acceder a <code>/wp-json/</code> y sus endpoints, que es fundamental para evitar enumeración de usuarios y abuso de <code>endpoints</code>. Si te interesa profundizar tienes <a href="https://ayudawp.com/enumeracion-usuarios-wordpress/" target="_blank" rel="ugc noopener">el artículo sobre enumeración de usuarios</a> que cubre este tema.</li>
<li><strong>Limitar intentos de login</strong>, imprescindible contra la fuerza bruta.</li>
<li><strong>Desactivar pingbacks y trackbacks</strong>, que son una vía de amplificación de ataques.</li>
<li><strong>Usar 2FA en todas las cuentas con privilegios</strong>, que no para el DDoS directamente pero evita que si una cuenta cae bajo fuerza bruta el atacante entre de verdad.</li>
</ul>
<h2>Plugins anti-DDoS para WordPress ¿los hay?</h2>
<p>No hay un plugin que por sí solo te proteja de todo, pero sí hay <strong>plugins que implementan varias de las defensas que hemos visto y te ahorran tener que configurarlas</strong> una por una. Estos son los más completos para la parte que te interesa.</p>
<table>
<thead>
<tr>
<th>Función</th>
<th>Vigilante</th>
<th>Wordfence</th>
<th>Solid Security</th>
<th>AIOS</th>
</tr>
</thead>
<tbody>
<tr>
<td>Rate limiting configurable</td>
<td>Sí</td>
<td>Sí</td>
<td>Sí (Pro)</td>
<td>Sí</td>
</tr>
<tr>
<td>Bloqueo de bad bots</td>
<td>Sí</td>
<td>Sí (mejor en Premium)</td>
<td>Sí</td>
<td>Sí</td>
</tr>
<tr>
<td>IP blacklist/whitelist</td>
<td>Sí</td>
<td>Sí</td>
<td>Sí</td>
<td>Sí</td>
</tr>
<tr>
<td>Restricción de métodos HTTP</td>
<td>Sí</td>
<td>No</td>
<td>No</td>
<td>Parcial</td>
</tr>
<tr>
<td>Custom login URL</td>
<td>Sí</td>
<td>No (solo Premium)</td>
<td>Sí</td>
<td>Sí</td>
</tr>
<tr>
<td>Desactivar XML-RPC</td>
<td>Sí</td>
<td>Sí</td>
<td>Sí</td>
<td>Sí</td>
</tr>
<tr>
<td>Protección REST API</td>
<td>Sí (3 modos)</td>
<td>Limitada</td>
<td>Sí</td>
<td>Sí</td>
</tr>
<tr>
<td>Firewall con patrones</td>
<td>Sí</td>
<td>Sí</td>
<td>Sí (Pro)</td>
<td>Sí</td>
</tr>
<tr>
<td>2FA integrado</td>
<td>Sí</td>
<td>Sí (Premium)</td>
<td>Sí</td>
<td>Sí</td>
</tr>
<tr>
<td>Precio</td>
<td>Gratis total</td>
<td>Gratis / 112 €/año</td>
<td>Gratis / 89 €/año</td>
<td>Gratis / 70 €/año</td>
</tr>
</tbody>
</table>
<p>Mi recomendación de amigo es que pruebes <a href="https://es.wordpress.org/plugins/vigilante/" target="_blank" rel="nofollow noopener">Vigilante</a>, que es mío, por si no lo sabías. Lo hice precisamente porque los demás tenían limitaciones en la parte de métodos HTTP y REST API, que son puntos calientes para los DDoS en WordPress, y además es gratis total, sin versión premium ni cosas de pago escondidas.</p>
<p>Si ya usas Wordfence, Solid Security o AIOS ninguno está mal (bueno, WF sí, lo odio bastante), y pasarse a otro solo por el cambio no suele merecer la pena. Lo que no debes hacer nunca es ejecutar dos plugins de seguridad a la vez, porque te vas a encontrar conflictos raros y vas a bajar el rendimiento sin ganar nada a cambio.</p>
<h2>Sobre los bots de IA, el añadido de VigIA</h2>
<p>Aunque no sean un DDoS en sentido estricto, los bots de entrenamiento de IA (GPTBot, ClaudeBot, Bytespider, PerplexityBot y compañía) pueden generar una carga bestial en tu servidor. Y aquí viene lo interesante, porque lo comprobé con mi propio plugin <a href="https://es.wordpress.org/plugins/vigia/" target="_blank" rel="nofollow noopener">VigIA</a> y <strong>de los archivos <code>robots.txt</code> pasan completamente</strong>, así que <strong>lo único que los para de verdad es bloquearlos por IP o por <code>User-Agent</code></strong> a nivel de servidor, <strong>devolviéndoles un 403</strong>.</p>
<p>Si has puesto las reglas <code>.htaccess</code> anteriores ya estás bloqueando parte, y para rematarlo VigIA te muestra <strong>qué bots de IA están entrando, cuántas veces y qué páginas rastrean</strong>, y te deja <strong>bloquearlos con un clic</strong>. Si la carga te viene por ahí y no por un ataque real, tener VigIA instalado te ahorra el trabajo de identificar manualmente cada bot en los logs.</p>
<h2>Qué hacer si te está pasando ahora mismo</h2>
<p>Vale, has leído hasta aquí porque tu web está hecha mierda, medio caída o del todo, y quieres saber qué hacer ya. Este es el protocolo de crisis, paso a paso.</p>
<h3>Paso 1: confirma que sea de verdad un DDoS</h3>
<p>Mira los logs del hosting y tira de Query Monitor si puedes acceder al admin, y comprueba que hay un pico anormal de peticiones y que muchas vienen de IPs o patrones repetidos. Si ves tráfico normal pero la web va mal, igual es un problema de plugin o base de datos y no un ataque.</p>
<h3>Paso 2: activa el modo bajo ataque en tu CDN</h3>
<p>Si tienes Cloudflare mételo en modo <strong>Under Attack</strong> desde el dashboard, porque eso añade una pantalla de verificación JavaScript que filtra automáticamente a los bots. Lo notarás porque las visitas legítimas verán una pantalla de «<em>Comprobando tu navegador</em>» durante un par de segundos antes de acceder a tu web.</p>
<p>Si no tienes CDN y el ataque es serio, darte de alta en Cloudflare gratis y apuntar los DNS hacia él puede ser la solución más rápida. Tarda unas horas en propagarse, pero en cuanto lo hace el ataque se para en seco en la mayoría de los casos.</p>
<h3>Paso 3: avisa al soporte de tu hosting</h3>
<p>Un buen hosting tiene herramientas para identificar y bloquear ataques que tú desde fuera no tienes, así que abre un ticket, cuéntales lo que ves y pídeles que revisen. Muchas veces ellos ven patrones que tú no y pueden aplicar medidas a nivel de red.</p>
<h3>Paso 4: bloquea lo que puedas bloquear</h3>
<p>Si identificas IPs o rangos atacantes en los logs bloquéalas en htaccess con las reglas que hemos visto, y si el ataque viene de un país donde no tienes audiencia plantéate bloquear el país entero temporalmente (esto se hace en Cloudflare con una regla de firewall).</p>
<h3>Paso 5: activa la página de mantenimiento si no te queda otra</h3>
<p>Si nada de lo anterior frena el ataque, pon <a href="https://ayudawp.com/activar-modo-mantenimiento-en-wordpress-con-archivo-maintenance-sin-plugins/" target="_blank" rel="noopener">una página de mantenimiento estática</a> para ganar tiempo. Una página <strong>HTML simple</strong> sin PHP ni base de datos la puede servir cualquier servidor bajo cualquier carga. No es una solución, es un parche para que al menos los usuarios que llegan vean algo en vez de un error.</p>
<h3>Paso 6: documenta todo</h3>
<p>Mientras pasa el ataque guarda capturas del escritorio, logs, IPs atacantes y horarios, porque lo vas a necesitar para el análisis posterior y, si llega el caso, para denunciarlo.</p>
<h2>Después del ataque, el post-mortem</h2>
<p>El ataque se ha acabado y tu web funciona otra vez, así que ahora toca aprender para que la próxima no te pille igual.</p>
<ul>
<li><strong>Analiza los logs:</strong> ¿Qué URL fue el objetivo principal? ¿Qué IPs o <code>User-Agent</code> destacaron? ¿Qué hora del día fue? ¿Se nota un patrón?</li>
<li><strong>Revisa qué defensas funcionaron y cuáles no:</strong> Si tu WAF paró el 90% del tráfico, bien, pero si lo que te salvó fue activar el modo bajo ataque a lo loco, mala señal, porque la próxima vez igual no estás despierto para hacerlo.</li>
<li><strong>Ajusta las reglas:</strong> Añade las IPs atacantes a la lista negra permanente, y si el ataque fue a un <code>endpoint</code> concreto, refuérzalo.</li>
<li><strong>Considera si necesitas subir de plan:</strong> Si estabas en Cloudflare gratuito y el ataque casi te tumba, el plan Pro (unos 22 euros al mes) te da protección DDoS avanzada y un WAF mejor.</li>
<li><strong>Revisa si el DDoS fue cortina de humo:</strong> Comprueba logs de otros servicios, accesos al admin, usuarios nuevos y archivos modificados, para asegurarte de que mientras tú estabas apagando el incendio nadie entró por otro lado.</li>
<li><strong>Contrata ayuda profesional</strong>: Si después de todo te das cuenta de que necesitas ayuda aprende de la experiencia y no esperes al próximo desastre, déjate ayudar por <a href="https://mantenimiento.ayudawp.com/" target="_blank" rel="noopener">alguien profesional que te ayude a protegerte, reforzar tu web y estar ahí cuando más lo necesites</a>. Hay gente muy buena, y suele ser un servicio realmente barato si tienes en cuenta lo que obtienes frente a la (terrible) alternativa.</li>
</ul>
<h2>Lista rápida: protección anti-DDoS para WordPress</h2>
<p>Te dejo el <strong>resumen de todo lo que hemos visto por capas</strong>, para que lo uses como guía de verificación en tu web.</p>
<h3>Capa DNS y CDN</h3>
<ul>
<li>Tengo Cloudflare (u otra CDN) configurado y apuntando los DNS.</li>
<li>Tengo identificado cómo activar el modo bajo ataque si hiciera falta.</li>
<li>Tengo reglas de firewall básicas configuradas en la CDN.</li>
</ul>
<h3>Capa hosting</h3>
<ul>
<li>Estoy en un hosting WordPress con WAF propio y soporte 24/7.</li>
<li>Tengo backups automáticos diarios.</li>
<li>Tengo el número de soporte o el email a mano.</li>
</ul>
<h3>Capa servidor</h3>
<ul>
<li>He bloqueado bots abusivos por <code>User-Agent</code>.</li>
<li>He restringido los métodos HTTP a los necesarios.</li>
<li>He protegido o bloqueado <code>xmlrpc.php</code>.</li>
<li>He bloqueado el acceso externo a <code>wp-cron.php</code> y configurado cron real.</li>
<li>He limitado el tamaño máximo de las peticiones.</li>
<li>He protegido <code>wp-login.php</code> si mi IP es fija.</li>
<li>He puesto reglas anti-hotlinking.</li>
</ul>
<h3>Capa WordPress</h3>
<ul>
<li>Tengo un plugin de seguridad activo y configurado.</li>
<li>Tengo 2FA activado para administradores.</li>
<li>Tengo la URL del login cambiada.</li>
<li>Tengo XML-RPC desactivado.</li>
<li>Tengo la REST API protegida.</li>
<li>Tengo límite de intentos de login configurado.</li>
<li>Tengo pingbacks y trackbacks desactivados.</li>
<li>Tengo WordPress, tema y todos los plugins actualizados.</li>
</ul>
<h2>Y hasta aquí</h2>
<p>Tengo malas noticias, y es que <strong>los ataques DDoS no se evitan al 100%</strong>, y un ataque lo suficientemente grande te tumba aunque tengas todo bien configurado. Pero <strong>con las capas adecuadas la mayoría de ataques ni te enteras</strong> de que han pasado, y los que sí notas duran mucho menos y hacen mucho menos daño.</p>
<p>La clave está en <strong>no dejar nada a la improvisación</strong>.</p>
<p>Monta las defensas antes de necesitarlas, porque cuando estás bajo ataque no es el momento de ponerse a aprender cómo funciona Cloudflare o a editar <code>.htaccess</code> por primera vez. Empieza por las reglas básicas que he compartido, añade un buen plugin de seguridad y ten claro qué harías si mañana te pasa.</p>
<p>Si te surgen dudas con alguna configuración concreta déjame un comentario y lo vemos.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/ataques-ddos-wordpress/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress 7.0 inminente: backdoors masivos, Presence API y deberes pendientes para tu web – #CrónicasWordPress #DoctorWordPress</title>
		<link>https://ayudawp.com/wordpress-7-0-inminente-backdoors-masivos-presence-api-y-deberes-pendientes-para-tu-web-cronicaswordpress-doctorwordpress/</link>
					<comments>https://ayudawp.com/wordpress-7-0-inminente-backdoors-masivos-presence-api-y-deberes-pendientes-para-tu-web-cronicaswordpress-doctorwordpress/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Fri, 08 May 2026 11:45:41 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Vídeos]]></category>
		<category><![CDATA[#CrónicasWordPress]]></category>
		<category><![CDATA[#DoctorWordPress]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159336</guid>

					<description><![CDATA[Esta semana en el canal oficial de Ayuda WordPress en YouTube ha tocado seguridad a cascoporro, una WordPress 7.0 que asoma la patita y bastantes deberes para que tu web aguante el cambio sin sustos.]]></description>
										<content:encoded><![CDATA[<p>Esta semana en el canal oficial de Ayuda WordPress en YouTube ha tocado seguridad a cascoporro, una WordPress 7.0 que asoma la patita y bastantes deberes para que tu web aguante el cambio sin sustos.</p>
<h2>Crónicas WordPress: backdoors masivos, RC3 a la vista y wp-admin reinventado</h2>
<p>El lunes empezamos por la parte fea. WordPress.org cerró Quick Page/Post Redirect tras descubrirse un backdoor que llevaba activo desde 2021, y poco después tumbaron más de 80 plugins de WPFactory por un posible backdoor en su plugin premium de IVA para WooCommerce.</p>
<p>El informe de WP-Firewall ya habla de más de 185 vulnerabilidades nuevas, así que herramientas como WP Beacon para vigilar la cadena de suministro se vuelven imprescindibles. Aprovechamos para repasar el plan de batalla contra ataques de fuerza bruta porque, viendo lo que está cayendo, hay que tomárselo en serio.</p>
<p>De ahí pasamos al culebrón de la comunidad, con un juez federal obligando a Matt Mullenweg a explicar bajo juramento los mensajes desaparecidos en el caso WP Engine, el Checkout Summit pasando a formato online y la campaña para ayudar a Lua a recuperarse de su lesión.</p>
<p>En la parte de desarrollo el plato fuerte es WordPress 7.0. La RC3 está agendada para el 8 de mayo, hubo una llamada urgente a hostings para probar la colaboración en tiempo real antes del día 4 y llega la Presence API en formato plugin, para ver en directo quién está editando qué en el escritorio.</p>
<p>También comentamos el Subscriptions Health Check de Woo, el experimento de dos ingenieros de Automattic convirtiendo wp-admin en un escritorio operativo (con tienda de apps incluida cortesía de Nick Hamze), el nuevo requisito europeo del enlace de retirada en WooCommerce y la desactivación del HPOS «sincronizar al leer» en WooCommerce 10.7.</p>
<p>Para cerrar, IA por todos lados. Repaso del Core AI Team, novedades del plugin AI 0.8.0 y el experimento de crear una web con IA en media hora con todo lo que vino después y nadie cuenta.</p>
<p>En IA y SEO, el AEO se consolida como categoría formal de servicio en abril, las AI Overviews ya aparecen en el 47 % de búsquedas en Estados Unidos y Perplexity escala a 780 millones de consultas mensuales convirtiendo once veces mejor que Google.</p>
<p>Y de propina, anuncio de la próxima quedada QDD WordPress sobre EmDash CMS.</p>
<p>Vídeo completo: <a href="https://www.youtube.com/watch?v=h0gvJHL2tAM" target="_blank" rel="nofollow noopener">Crónicas WordPress del 4 de mayo en YouTube</a>.</p>
<div class="ast-oembed-container " style="height: 100%;"><iframe loading="lazy" title="#CrónicasWordPress - Noticias, opinión sobre WordPress con Fernando Tellado" width="1600" height="900" src="https://www.youtube.com/embed/h0gvJHL2tAM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
<h2>Doctor WordPress: a punto para WordPress 7.0</h2>
<p>El miércoles en el Doctor WordPress dediqué la sesión a dejar la casa lista para WordPress 7.0, que llega ya esta misma semana.</p>
<p>Repasamos qué hay que mirar en plugins y temas para que no salten chispas el día del despliegue, y qué tocar en webs en producción antes de actualizar: copias, entorno de pruebas, compatibilidad de código y revisión de los cambios en el editor y en la API.</p>
<p>Lo de siempre cuando hay versión mayor, mejor llegar con todo planchado que apagar fuegos el martes siguiente.</p>
<p>Como cada miércoles, también hubo tiempo para preguntas en directo de los asistentes sobre WordPress, SEO, IA y casi cualquier cosa que se cruzase por el camino.</p>
<p>Vídeo completo: <a href="https://www.youtube.com/watch?v=6StjNtDYCwU" target="_blank" rel="nofollow noopener">Doctor WordPress del 6 de mayo en YouTube</a>.</p>
<div class="ast-oembed-container " style="height: 100%;"><iframe loading="lazy" title="#DoctorWordPress - Trucos y consultas WordPress con Fernando Tellado" width="1600" height="900" src="https://www.youtube.com/embed/6StjNtDYCwU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
<p>Si quieres asistir en directo y participar con tus preguntas, <a href="https://www.youtube.com/AyudaWordPressES?sub_confirmation=1" target="_blank" rel="nofollow noopener">suscríbete al canal de Ayuda WordPress en YouTube</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/wordpress-7-0-inminente-backdoors-masivos-presence-api-y-deberes-pendientes-para-tu-web-cronicaswordpress-doctorwordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>¿Ya has preparado tus webs para WordPress 7.0?</title>
		<link>https://ayudawp.com/actualizar-wordpress-7/</link>
					<comments>https://ayudawp.com/actualizar-wordpress-7/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Thu, 07 May 2026 06:28:41 +0000</pubDate>
				<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Principiante]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159191</guid>

					<description><![CDATA[WordPress 7.0 ya tiene fecha confirmada para el 20 de mayo de 2026, y es la versión más grande desde que llegó el editor de bloques con la 5.0. Cambia el editor, el escritorio, los requisitos del servidor, la integración con IAs y la forma en que varios usuarios pueden trabajar a la vez sobre el mismo contenido.]]></description>
										<content:encoded><![CDATA[<p><strong>WordPress 7.0 ya tiene fecha confirmada para el 20 de mayo de 2026</strong>, y <strong>es la versión más grande desde que llegó el editor de bloques con la 5.0</strong>. Cambia el editor, el escritorio, los requisitos del servidor, la integración con IAs y la forma en que varios usuarios pueden trabajar a la vez sobre el mismo contenido.</p>
<p>Buena parte de lo que hayas leído estos días sobre la 7.0 va dirigido a desarrolladores, pero este artículo no. Aquí te cuento <strong>qué vas a notar en tu web WordPress, qué cosas se pueden romper y qué oportunidades nuevas tienes</strong> a partir de mayo.</p>
<p>Si desarrollas plugins o temas lo tienes <a href="https://ayudawp.com/actualizar-plugins-temas-wordpress-7/">en este otro artículo</a>, específico con la parte técnica, este es para tu web.</p>
<h2>¿Que ha pasado con las fechas?</h2>
<p>WordPress 7.0 <strong>estaba previsto inicialmente para el 9 de abril</strong>, pero el equipo retrasó la salida unas semanas porque querían terminar de <strong>afinar la arquitectura de base de datos para la edición en tiempo real</strong>, una de las funcionalidades estrella de esta versión.</p>
<p>Mejor que se retrase un mes a que salga a medio hacer ¿no?, así que <strong>la fecha actual está fijada para el 20 de mayo</strong> de 2026, salvo sorpresa de última hora.</p>
<h2>Qué novedades trae WordPress 7.0</h2>
<p>Te pongo solo lo que vas a ver tú desde el escritorio o el editor, o que debes tener en cuenta sí o sí, sin entrar en APIs ni interioridades.</p>
<h3>PHP 7.4 como mínimo</h3>
<p>Si tu hosting todavía tiene PHP 7.2 o 7.3, <strong>no vas a poder actualizar</strong> a  la versión 7.0 y los sitios en esas versiones se quedan en la rama 6.9, así que esto es lo primero que tienes que comprobar.</p>
<p>Entra en el panel de tu hosting y mira qué versión de PHP estás usando, teniendo en cuenta que <strong>lo recomendable hoy es PHP 8.3 o superior</strong>.</p>
<h3>Edición / colaboración en tiempo real</h3>
<p>Varios usuarios pueden <strong>modificar una misma entrada o página al mismo tiempo, con los cambios sincronizándose en directo</strong>, parecido a Google Docs.</p>
<p>Es opcional y la activas desde <code>Ajustes &gt; Escritura</code>, con un límite (inicialmente) de dos colaboradores simultáneos por entrada por defecto.</p>

<a href="https://ayudawp.com/actualizar-wordpress-7/wordpress-7-activar-colaboracion-tiempo-real/" rel="nofollow"><img width="1200" height="678" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-activar-colaboracion-tiempo-real-1200x678.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-activar-colaboracion-tiempo-real-1200x678.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-activar-colaboracion-tiempo-real-768x434.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-activar-colaboracion-tiempo-real-1536x867.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-activar-colaboracion-tiempo-real.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/actualizar-wordpress-7/wordpress-7-colaboracion-tiempo-real-multiusuario/" rel="nofollow"><img width="1200" height="678" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-colaboracion-tiempo-real-multiusuario-1200x678.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-colaboracion-tiempo-real-multiusuario-1200x678.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-colaboracion-tiempo-real-multiusuario-768x434.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-colaboracion-tiempo-real-multiusuario-1536x867.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-colaboracion-tiempo-real-multiusuario.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>

<blockquote><p>Nota: esta funcionalidad ha sido aplazada y no sale con WordPress 7.0, pero no deja de ser interesante que sepas cómo funciona porque más pronto que tarde estará disponible.</p></blockquote>
<h3>Pantalla nueva para tus IAs</h3>
<p>En <code>Ajustes &gt; Conectores</code> aparece una pantalla central donde <strong>configuras los proveedores de IA</strong> con tu propia clave API, e incluye OpenAI, Anthropic (Claude) y Google (Gemini) por defecto.</p>
<p>Una vez configurado un proveedor todos los plugins de IA compatibles pueden usar esas credenciales sin que tengas que volver a meterlas en cada plugin.</p>
<p><a href="https://ayudawp.com/?attachment_id=159292" rel="nofollow"><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159292 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-conectores-IA-1200x675.jpg" alt="" width="1200" height="675" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-conectores-IA-1200x675.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-conectores-IA-768x432.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-conectores-IA-1536x864.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-conectores-IA.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px"></a></p>
<h3>Escritorio con cara nueva</h3>
<p>El admin estrena un <strong>rediseño visual</strong> al que han llamado darle una «<strong>mano de pintura</strong>», con tipografías unificadas, colores más coherentes (diferentes mas bien) y espaciados nuevos.</p>
<p>El esquema de color por defecto pasa del llamado «Fresco» al «Moderno», pero vamos, que lo cambias en tu perfil si quieres.</p>
<p><a href="https://ayudawp.com/?attachment_id=159296" rel="nofollow"><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159296 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-nuevos-colores-y-estilos-1200x675.jpg" alt="" width="1200" height="675" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-nuevos-colores-y-estilos-1200x675.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-nuevos-colores-y-estilos-768x432.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-nuevos-colores-y-estilos-1536x864.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-nuevos-colores-y-estilos.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px"></a></p>
<h3>Cambios en los listados del editor del sitio</h3>
<p>Las pantallas de listados del editor del sitio usan ahora una interfaz tipo aplicación, con filtros que se aplican sin recargar página y la posibilidad de elegir entre vista de tabla o de cuadrícula.</p>
<p>La navegación es sencilla, pero cambia el aspecto y la forma de filtrar, y hace que la navegación sea más fluida y personalizable. Es un cambio que vendrá más adelante a todos los listados de WordPress.</p>

<a href="https://ayudawp.com/actualizar-wordpress-7/wordpress-7-dataviews-2/" rel="nofollow"><img width="1200" height="675" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-2-1200x675.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-2-1200x675.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-2-768x432.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-2-1536x864.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-2.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/actualizar-wordpress-7/wordpress-7-dataviews-1/" rel="nofollow"><img width="1200" height="675" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-1-1200x675.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-1-1200x675.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-1-768x432.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-1-1536x864.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-DataViews-1.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>

<h3>Bloques nuevos</h3>
<p>Llegan los bloques nativos de <strong>migas de pan</strong> e <strong>icono</strong>, que hasta ahora dependían de plugins.</p>

<a href="https://ayudawp.com/actualizar-wordpress-7/wordpress-7-bloque-migas-pan/" rel="nofollow"><img width="1200" height="678" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-migas-pan-1200x678.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-migas-pan-1200x678.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-migas-pan-768x434.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-migas-pan-1536x867.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-migas-pan.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>
<a href="https://ayudawp.com/actualizar-wordpress-7/wordpress-7-bloque-icono/" rel="nofollow"><img width="1200" height="678" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-icono-1200x678.jpg" class="attachment-medium size-medium" alt="" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-icono-1200x678.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-icono-768x434.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-icono-1536x867.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-bloque-icono.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px" loading="lazy" decoding="async" fetchpriority="low"></a>

<h3>Biblioteca de fuentes</h3>
<p>Tienes una pantalla dedicada para subir, previsualizar y aplicar fuentes personalizadas en todo el sitio y para todo tipo de temas, sin tirar de plugins ni declaraciones <code>@font-face</code> manuales.</p>
<p><a href="https://ayudawp.com/?attachment_id=159295" rel="nofollow"><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159295 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-fuentes-1200x678.jpg" alt="" width="1200" height="678" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-fuentes-1200x678.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-fuentes-768x434.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-fuentes-1536x867.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-fuentes.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px"></a></p>
<h3>Paleta de comandos</h3>
<p>Pulsando <code>Cmd+K</code> en Mac o <code>Ctrl+K</code> en Windows abres un buscador rápido del escritorio que te lleva directo a editar una página, ir a un ajuste o instalar un plugin sin pasar por los menús.</p>
<p><a href="https://ayudawp.com/?attachment_id=159298" rel="nofollow"><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159298 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-paleta-comandos-global-1200x678.jpg" alt="" width="1200" height="678" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-paleta-comandos-global-1200x678.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-paleta-comandos-global-768x434.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-paleta-comandos-global-1536x867.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-paleta-comandos-global.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px"></a></p>
<h3>Revisiones visuales</h3>
<p>Cuando comparas versiones de una entrada ya no ves un <code>diff</code> de código en plan técnico, sino una comparación visual con los cambios resaltados.</p>
<p><a href="https://ayudawp.com/?attachment_id=159299" rel="nofollow"><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159299 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-revisiones-1200x678.jpg" alt="" width="1200" height="678" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-revisiones-1200x678.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-revisiones-768x434.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-revisiones-1536x867.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-revisiones.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px"></a></p>
<h3>Ocultar bloques por dispositivo</h3>
<p>De lejos, lo que me parece un cambio más importante es poder (por fin) especificar <a href="https://ayudawp.com/ocultar-bloques-por-dispositivo/" target="_blank" rel="noopener">qué bloques quieres mostrar/ocultar según el dispositivo</a> desde el que se visite la página.</p>
<p>Esto dependía de plugins pero ya está en el editor de bloques nativo, que mira que les ha costado algo tan relevante y fundamental.</p>
<p><a href="https://ayudawp.com/?attachment_id=159297" rel="nofollow"><img loading="lazy" decoding="async" class="sombra alignnone wp-image-159297 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-ocultar-bloques-dispositivos-1200x678.jpg" alt="" width="1200" height="678" srcset="https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-ocultar-bloques-dispositivos-1200x678.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-ocultar-bloques-dispositivos-768x434.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-ocultar-bloques-dispositivos-1536x867.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/05/WordPress-7-ocultar-bloques-dispositivos.jpg 1920w" sizes="auto, (max-width: 1200px) 100vw, 1200px"></a></p>
<h2>Lo que se puede romper al actualizar a WordPress 7.0</h2>
<p>Aquí está la parte que más te interesa, y no es para asustar, pero conviene tenerlo claro antes de darle al botón de actualizar.</p>
<h3>Plugins con botones desalineados o estilos rotos</h3>
<p>El rediseño del admin trae cambios solo en CSS y no toca el HTML, lo que suena inofensivo pero no lo es tanto, porque <strong>todo plugin que use estilos propios para sus botones, tablas o avisos puede mostrarse desalineado</strong> a partir de la 7.0.</p>
<p>Pasa especialmente con plugins que tiraban de píxeles fijos, <code>!important</code> por todas partes o selectores muy agresivos.</p>
<p>Los plugins bien hechos, que usan las clases nativas del admin, no se ven afectados, mientras que los que llevan años sin actualizarse o los hechos a la rápida sí.</p>
<h3>El aviso de «esta entrada usa plugins que no son compatibles con la colaboración en tiempo real»</h3>
<p>Si activas la edición en tiempo real y abres una entrada te puede aparecer este aviso. Significa que algún plugin que tienes instalado añade una caja meta clásica a esa entrada, y <strong>las cajas meta clásicas no se sincronizan en tiempo real</strong>.</p>
<p>La colaboración se desactiva para esa entrada, pero <strong>todo lo demás sigue funcionando</strong> normalmente.</p>
<p>Sobre cómo identificar qué plugin es el culpable y qué hacer con él, lo tienes detallado en <a href="https://ayudawp.com/plugins-incompatibles-colaboracion-tiempo-real/" target="_blank" rel="noopener ugc">este artículo sobre plugins incompatibles con la colaboración en tiempo real</a>.</p>
<h3>Plugins que tocan las listas de entradas</h3>
<p>Algunos plugins añaden columnas, filtros o acciones rápidas en las pantallas del editor del sitio.</p>
<p>Con eso de las <code>DataViews</code>, parte de esos cambios pueden mostrarse mal o directamente desaparecer hasta que el plugin se actualice para la nueva interfaz.</p>
<h3>PHP inferior a la versión 7.4</h3>
<p>Si tu sitio sigue en PHP 7.2 o 7.3 <strong>WordPress 7.0 ni siquiera se va a dejar instalar o actualizar</strong>. Te quedarías en la rama 6.9.x hasta que tu hosting suba la versión.</p>
<h2>Lo mejor de WordPress 7.0 … en mi opinión</h2>
<p>Vamos con la otra cara, que también la tiene.</p>
<h3>Controles de visibilidad de bloques por dispositivo</h3>
<p>Imprescindible. No tenía sentido que faltase poder decidir qué bloque se muestra o no a la hora de maquetar y diseñar una web</p>
<h3>Una sola pantalla para todas tus IAs</h3>
<p>Hasta ahora, cada plugin de IA tenía su propio sistema para guardar la API key. Si usabas tres plugins de IA, gestionabas tres integraciones distintas.</p>
<p>Con la pantalla de <strong>conectores IA</strong> metes la clave una sola vez y todos los plugins compatibles la reutilizan. Es un cambio pequeño en apariencia y enorme en la práctica.</p>
<p>Plugins como AI Studio, AI Engine y compañía, que tienen pantalla propia para sus conectores, son un caso aparte que voy a tratar en otro artículo dedicado.</p>
<h3>Paleta de comandos para ir más rápido</h3>
<p>Los atajos que te he comentado antes, <code>Cmd+K</code> o <code>Ctrl+K</code>. Lo dices una vez, lo usas siempre. Para gente que pasa horas al día en el escritorio, <strong>el ahorro de clics es la leche, yo soy muy fan</strong>, y lo sabes.</p>
<h3>Conectores nativos que abren puertas a la IA</h3>
<p>Más allá de la propia pantalla de conectores, lo que hay debajo es una <strong>infraestructura común de IA en el núcleo de WordPress</strong>.</p>
<p>Esto significa que en los próximos meses van a empezar a salir plugins que se apoyan en esa base, sin tener que reinventar la rueda cada uno por su lado.</p>
<p>Si te interesa entender por dónde van los tiros y qué es la Abilities API que hay detrás de todo esto lo cuento en <a href="https://ayudawp.com/abilities-api/" target="_blank" rel="noopener ugc">este artículo sobre la Abilities API</a>.</p>
<p>Y un apunte más, porque ya que la 7.0 mete más IA en tu WordPress, no estaría de más que vigilaras también qué bots de IA están rastreando tu sitio, con el plugin <a href="https://es.wordpress.org/plugins/vigia/" target="_blank" rel="nofollow noopener">VigIA</a> lo tienes fácil.</p>
<h2>Cómo saber si tu web está lista para WordPress 7.0</h2>
<p>Antes de actualizar a 7.0 comprueba estas cosas en este orden.</p>
<ul>
<li><strong>Versión de PHP:</strong> Entra en tu panel de hosting o en <code>Herramientas &gt; Salud del sitio</code>. Si pone 7.2 o 7.3 no sigas. Pide a tu hosting que te suba a 8.2 o superior.</li>
<li><strong>Plugins críticos:</strong> Mira la página de cada plugin importante en wordpress.org y busca el dato «<code>Probado hasta</code>«. Si pone 7.0 o algo posterior buena señal. Si lleva mucho tiempo sin actualizarse mala.</li>
<li><strong>Tema:</strong> Si usas Astra, GeneratePress, Kadence o cualquier tema mantenido activamente debería estar al día. Si tu tema es de hace cuatro años y nadie lo toca pruébalo antes.</li>
<li><strong>Plugins comerciales:</strong> Para plugins de pago como Yoast, Rank Math, WPML, WP Rocket, WooCommerce o Gravity Forms, mira el blog del desarrollador. Suelen anunciar la compatibilidad con WordPress 7.0 antes de que salga.</li>
<li><strong>Cajas meta de pagos, formularios o CPTs:</strong> Si tu web depende de plugins que añaden campos extra al editor (cajas meta) y quieres usar la colaboración en tiempo real, comprueba si el plugin tiene una versión compatible. Si no, la colaboración no funcionará en esos contenidos.</li>
</ul>
<p>Si quieres ver al detalle qué plugins están registrando cajas meta instala <a href="https://ayudawp.com/query-monitor/" target="_blank" rel="noopener">Query Monitor</a>. Te muestra exactamente qué componente añade cada caja.</p>
<h2>Pasos para actualizar sin sobresaltos</h2>
<p>Esta es la rutina que sigo yo en cualquier actualización mayor y te sirve también para la 7.0.</p>
<ul>
<li><a href="https://playground.wordpress.net/?php=8.3&amp;wp=beta&amp;networking=yes&amp;language=es_ES&amp;multisite=no" target="_blank" rel="nofollow noopener">Prueba WordPress 7.0 en playground</a> sin tener que instalar nada si quieres echar un vistazo rápido e incluso probar algunos de tus plugins favoritos.</li>
<li>Haz <strong>backup completo</strong> del sitio, base de datos y archivos. Sin esto no hagas absolutamente nada.</li>
<li>Monta una copia real de tu web. La mayoría de hosting serios te lo dan en un clic y otros tienen algún tipo de entorno de pruebas.
<ul>
<li>Actualiza primero todos los plugins y el tema en el sitio de pruebas a la última versión disponible.</li>
<li>Actualiza WordPress a 7.0 en el sitio de pruebas y revisa que todo funciona inicialmente sin sorpresas.</li>
<li>Prueba las pantallas que más uses. Edita una entrada, sube una imagen, mira los pedidos si tienes tienda, prueba el formulario de contacto.</li>
<li>Mira la pantalla de salud del sitio, te avisará de cualquier aviso nuevo.</li>
</ul>
</li>
<li>Solo si todo va bien actualiza en producción. Pero antes de hacerlo, crea otro backup, por si acaso, siempre hay tiempo de borrar las copias más tarde, y las echas de menos cuando no las tienes y pasan <em>cosas</em>.</li>
</ul>
<h2>Cuándo actualizar a WordPress 7.0</h2>
<p>No tienes obligación ninguna de actualizar el primer día, <strong>lo razonable es esperar</strong> una o dos semanas a que el ecosistema de plugins y temas saque sus actualizaciones de compatibilidad.</p>
<p>La excepción son los sitios pequeños sin muchas dependencias, donde puedes actualizar antes sin demasiado riesgo.</p>
<p>Si gestionas webs de clientes, en cambio, no tengas prisa. Mejor un cliente que tarda en estrenar WordPress 7.0 que un cliente con la web rota.</p>
<p><strong>WordPress 7.0 va a estar instalado en muchas webs</strong> antes de que termine la primavera. Cuanto antes hagas las comprobaciones de arriba menos te vas a tener que apurar el día 20.</p>
<p>Y si te ha pillado el toro y necesitas ayuda con algo concreto, te leo en los comentarios.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/actualizar-wordpress-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>¿Ya has preparado tus plugins y temas para WordPress 7.0?</title>
		<link>https://ayudawp.com/actualizar-plugins-temas-wordpress-7/</link>
					<comments>https://ayudawp.com/actualizar-plugins-temas-wordpress-7/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Wed, 06 May 2026 06:28:51 +0000</pubDate>
				<category><![CDATA[Plugins WordPress]]></category>
		<category><![CDATA[Programación + WordPress]]></category>
		<category><![CDATA[Temas WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159198</guid>

					<description><![CDATA[Esto no es una guía de actualización a WordPress 7.0 para usuarios, sino para devs, y nos vamos a centrar en lo que necesita atención técnica, en qué orden meterle mano y qué APIs nuevas merecen la pena para algo más que ir corriendo detrás de la compatibilidad.]]></description>
										<content:encoded><![CDATA[<p>Si has llegado aquí doy por hecho que <strong>desarrollas plugins, temas o código a medida para WordPress</strong>, así que voy al grano. <strong>Esto no es una guía de actualización a WordPress 7.0 para usuarios, sino para devs</strong>, y nos vamos a centrar en lo que necesita atención técnica, en qué orden meterle mano y qué APIs nuevas merecen la pena para algo más que ir corriendo detrás de la compatibilidad.</p>
<p><strong>WordPress 7.0 sale el 20 de mayo de 2026</strong> tras el retraso de unas semanas que el equipo decidió para cerrar la arquitectura de la edición en tiempo real. La fase de RC ha sido más larga de lo habitual y la guía de campo está publicada con todas las dev notes individuales, así que tienes <strong>información de sobra para preparar el terreno</strong> antes de que llegue.</p>
<h2>Vista rápida de los cambios técnicos que hay que revisar</h2>
<p>Estos son los puntos <strong>donde WordPress 7.0 te puede afectar a desarrolladores</strong>, ordenados por probabilidad de que te toque hacer algo:</p>
<ul>
<li><strong>Estilos propios del admin</strong> desalineados tras el rediseño visual del escritorio.</li>
<li><strong>Metaboxes clásicas</strong> que desactivan la edición en tiempo real en las entradas donde aparecen.</li>
<li><strong>Block API v3 </strong>y el comportamiento del editor en iframe.</li>
<li><strong><code>WP_List_Table</code></strong> sustituida por <code>DataViews</code> en las pantallas de listados del editor del sitio.</li>
<li><strong>PHP 7.4 mínimo</strong> en core, lo que afecta también a la compatibilidad de tus plugins y temas.</li>
</ul>
<p>Y luego, lo que abre puertas nuevas:</p>
<ul>
<li><strong>Connectors API</strong> para poder reutilizar las credenciales de IA centralizadas.</li>
<li><strong>Abilities API</strong> en core y no como experimento, lista para registrar capacidades en tu código para que cualquier IA externa pueda descubrirlas y usarlas.</li>
</ul>
<h2>PHP 7.4 mínimo</h2>
<p>WordPress 7.0 sube el suelo a PHP 7.4 y deja atrás 7.2 y 7.3. Para ti como desarrollador esto significa dos cosas, y la primera es que la cabecera <code>Requires PHP</code> de tus plugins y temas debe declarar al menos <code>7.4</code>, porque si dejas <code>7.0</code> o <code>7.2</code> el repositorio va a entender que tu código funciona en <strong>versiones con las que el core ya no admite</strong>.</p>
<p>Luego, además, te afecta el hecho de que <strong>puedes empezar a usar sintaxis que estuvo limitada hasta ahora</strong>, como <code>arrow functions</code>, <code>typed properties</code>, <code>null coalescing assignment</code> o <code>spread operator</code> en arrays asociativos.</p>
<p>Lo razonable es <strong>declarar la compatibilidad que hayas probado</strong>. Si tu plugin funciona desde PHP 7.4 hasta PHP 8.3, pones <code>Requires PHP: 7.4</code> y compruebas en las dos puntas del rango, sin subir el mínimo a 8.0 sin necesidad, porque cerrarías la puerta a los hosting que todavía no han migrado a 8.x.</p>
<h2>Block API v3 y el editor en iframe</h2>
<p>Aquí hay un matiz que mucha gente está contando regular, no por mala fe, sino porque <strong>ha habido cambios</strong>. Originalmente la versión 7.0 iba a forzar el iframe en el editor de entradas para todos los bloques sin importar su <code>apiVersion</code>, pero en febrero el equipo del editor revisó el calendario y eligió un despliegue gradual.</p>
<p>Lo que pasa de verdad en WordPress 7.0 es que <strong>el editor comprueba la versión de los bloques insertados en el post, no la de los registrados en general</strong>, y si todos los bloques que hay en la entrada son v3 o superior el editor se carga en iframe, mientras que si hay alguno con v2 se queda fuera del iframe igual que ahora.</p>
<p>Esto significa que el iframe sigue avanzando, pero <strong>no se te va a romper la web el 20 de mayo si tu bloque está en la v2</strong>. Lo que sí toca hacer es migrar cuanto antes, porque la fase de aviso ha terminado y los próximos pasos sí van a ser obligatorios.</p>
<p>El cambio mínimo es trivial. En tu archivo <code>block.json</code> subes la <code>apiVersion</code> a la 3:</p>
<pre>{
    "apiVersion": 3,
    "name": "ayudawp/mi-bloque",
    ...
}</pre>
<p>Si tu bloque solo pinta cosas con React y no toca el DOM directamente con eso suele bastar. El problema viene cuando dentro del bloque accedes a <code>document</code> o <code>window</code> de forma directa, porque dentro del iframe esos objetos apuntan al iframe y no al admin, y <strong>ahí es donde se rompen muchas integraciones de scripts antiguos</strong>.</p>
<p><strong>La forma correcta</strong> es usar el contexto del nodo del bloque mediante una referencia, accediendo a <code>ownerDocument</code> y <code>defaultView</code>:</p>
<pre>import { useRef, useEffect } from '@wordpress/element';

export default function Edit() {
    const ref = useRef();

    useEffect( () =&gt; {
        // Acceso correcto al document que contiene el bloque
        const doc = ref.current.ownerDocument;
        const win = doc.defaultView;

        // A partir de aqui, doc y win apuntan al iframe del editor
        // y todo lo que hagas se aplica donde toca
    }, [] );

    return &lt;div ref={ ref }&gt;...&lt;/div&gt;;
}</pre>
<p>Si dependes de librerías de terceros que tiran de <code>window</code> global, como plugins jQuery antiguos o sliders sin namespacing, toca revisar uno por uno. La buena noticia es que <strong>un bloque que ya funciona en el editor del sitio o en el editor de plantillas está prácticamente preparado</strong>, porque esos editores llevan años funcionando en iframe.</p>
<h2>Cajas meta clásicas y la edición en tiempo real</h2>
<p>Aquí no hay matiz que valga. Si tu código registra una caja meta clásica con <code>add_meta_box()</code>, la edición en tiempo real se desactiva en las entradas donde aparece esa caja, y el editor le muestra al usuario un aviso que pone «<em>esta entrada usa plugins que no son compatibles con la colaboración en tiempo real</em>».</p>
<p>No es un fallo, es una decisión arquitectónica del equipo, porque <strong>las cajas meta clásicas guardan datos por fuera de la capa del editor de bloques y no se pueden sincronizar entre clientes en tiempo real sin riesgo</strong> de perder cambios por el camino.</p>
<p>El camino correcto es registrar tu caja meta con <code>register_post_meta()</code> y <code>show_in_rest</code> a <code>true</code>, para que esté dentro de la capa de datos del editor de bloques:</p>
<pre>/**
 * Registra el meta del plugin de forma compatible con la colaboracion en tiempo real.
 */
function ayudawp_register_post_meta() {
    register_post_meta(
        'post',
        '_ayudawp_destacado',
        array(
            'show_in_rest'  =&gt; true,
            'single'        =&gt; true,
            'type'          =&gt; 'boolean',
            'default'       =&gt; false,
            'auth_callback' =&gt; function() {
                return current_user_can( 'edit_posts' );
            },
        )
    );
}
add_action( 'init', 'ayudawp_register_post_meta' );</pre>
<p>A partir de aquí, en lugar de ofrecer la caja meta clásica entregas un panel en la barra lateral del editor de bloques con <code>PluginDocumentSettingPanel</code> y enganchas los datos del meta usando los hooks de <code>@wordpress/data</code>.</p>
<p>Si quieres ver el caso real con todo el código de migración, en <a href="https://ayudawp.com/plugins-incompatibles-colaboracion-tiempo-real/" target="_blank" rel="noopener ugc">este artículo enseño cómo migré la caja meta de AI Share &amp; Summarize</a> a un panel lateral del editor manteniendo la compatibilidad con el editor clásico, porque ambos sistemas leen y escriben en la misma clave de meta.</p>
<p>Si por lo que sea no puedes migrar antes del 20 de mayo no es ningún drama, ya que la caja meta clásica sigue funcionando como hasta ahora y lo único que pierde el usuario es la edición simultánea en esas entradas. Eso sí, deja claro en el <code>changelog</code> del plugin que la migración está en marcha, porque la gente que active la colaboración va a ver el aviso y va a buscar al culpable.</p>
<blockquote><p>Nota: la funcionalidad de colaboración en tiempo real al final no sale con WordPress 7.0, se ha aplazado por falta de solidez de la funcionalidad</p></blockquote>
<h2>Rediseño visual del admin</h2>
<p>El admin de WordPress 7.0 estrena lo que en el ticket #64308 de Trac llaman un «<strong><em>coat of paint visual reskin</em></strong>».</p>
<p><strong>Son cambios solo en CSS</strong> y no tocan markup ni JavaScript, así que sobre el papel cualquier plugin debería seguir funcionando igual, pero en la práctica te dejan mal, porque hay muchos plugins con estilos propios para sus botones, sus tablas y sus avisos, y esos estilos chocan con los nuevos espaciados y tipografías unificadas.</p>
<p>El esquema por defecto pasa del <em>fresco</em> al <em>moderno</em>, los componentes del sistema de diseño están alineados con <code>@wordpress/components</code> y <code>@wordpress/base-styles</code>, y el resultado es que <strong>cualquier estilo que pelee contra el sistema queda desalineado o con dimensiones raras</strong>.</p>
<p>Te lo digo desde la experiencia, he tenido que repasar estilos en plugins propios y ajenos para que las pantallas de ajustes vuelvan a verse limpias, y no es algo que se solucione con un parche en cinco minutos cuando hay mucho CSS heredado.</p>
<p>La forma de evitar este problema, ahora y en futuras versiones, es usar las clases nativas del admin y dejar de inventar selectores propios para cosas que el core ya genera:</p>
<ul>
<li>Botones con <code>button</code>, <code>button-primary</code>, <code>button-secondary</code> y <code>button-link</code> en lugar de tus propias clases.</li>
<li>Tablas con <code>wp-list-table widefat fixed striped</code>.</li>
<li>Avisos con <code>notice notice-success</code>, <code>notice notice-error</code>, <code>notice notice-warning</code> e <code>notice notice-info</code>, añadiendo <code>is-dismissible</code> si quieres el botón de cerrar.</li>
<li>Formularios con <code>form-table</code> y la API de Settings, que ya te da el aspecto correcto sin escribir CSS propio.</li>
</ul>
<p>Si ya tienes hojas de estilo propias para el admin, una limpieza rápida pasa por quitar los <code>!important</code> innecesarios, sustituir píxeles fijos por las variables CSS del sistema de diseño y revisar selectores demasiado genéricos del tipo <code>.button</code> o <code>input[type="submit"]</code> sin contexto, encerrándolos en el contenedor de tu plugin para que no se peleen con nada del core.</p>
<h2>DataViews en vez de WP_List_Table</h2>
<p>Las pantallas de listados en el editor del sitio pasan a usar el sistema <code>DataViews</code> en lugar de la vieja <code>WP_List_Table</code>. Para el usuario es una mejora visible, con filtros que se aplican sin recargar y vistas configurables, y para el desarrollador es un cambio de modelo, porque los ganchos de siempre que añadían columnas, filtros o acciones rápidas no se aplican igual.</p>
<p>Si usas hooks como <code>manage_posts_columns</code>, <code>manage_pages_columns</code>, <code>manage_media_columns</code> o sus equivalentes para acciones rápidas y acciones en lote, siguen funcionando con retro-compatibilidad, pero la experiencia ya no es la misma y algunos casos avanzados se rompen.</p>
<p>La parte donde más he visto problemas, porque soy un bobo y me pasa de todo, es en plugins que pintaban cajas meta ocultas vinculados a columnas, o que insertaban controles personalizados directamente en el <code>thead</code> de la tabla.</p>
<p>Si tu plugin o tema necesita integrarse con estas pantallas, toca pasar por <code>@wordpress/dataviews</code> y registrar las vistas con la nueva API. Hay también un cambio menor pero importante en la API, el parámetro <code>groupByField</code> como string ha sido sustituido por un objeto <code>groupBy</code> con más opciones, así que si has tocado esto en versiones anteriores, ajústalo.</p>
<p>Para la mayoría de código, que solo añade una columna o un filtro sencillo, no hay que hacer nada urgente, pero conviene probar la pantalla en un staging con WordPress 7.0 antes de soltarlo a producción.</p>
<h2>Connectors API: integración con la IA desde el core</h2>
<p>Una de las novedades más interesantes para devs que tocamos IA es la pantalla nueva en <code>Ajustes &gt; Conectores</code>.</p>
<p>Hasta ahora, cada plugin que conectaba con OpenAI, Anthropic, Gemini o cualquier otro proveedor montaba su propia pantalla de ajustes con su propio formulario para la API key, lo que provocaba que el usuario tuviera que meter la misma clave en tres sitios distintos si usaba tres plugins de IA. Con la <code>Connectors API</code> esto cambia.</p>
<p>De serie vienen tres conectores, OpenAI, Anthropic y Google, y si quieres registrar el tuyo propio o ajustar los metadatos de uno existente, lo haces a través del action <code>wp_connectors_init</code>:</p>
<pre>/**
 * Registra un conector personalizado para un proveedor de IA
 */
function ayudawp_register_connector( $registry ) {
    $registry-&gt;register( 'mi-proveedor-ia', array(
        'name'              =&gt; 'Mi Proveedor IA',
        'description'       =&gt; __( 'Conector para mi servicio de IA personalizado.', 'mi-plugin' ),
        'authentication'    =&gt; 'api_key',
        'icon'              =&gt; plugins_url( 'assets/icon.svg', __FILE__ ),
        'documentation_url' =&gt; 'https://miproveedor.com/docs/',
    ) );
}
add_action( 'wp_connectors_init', 'ayudawp_register_connector' );</pre>
<p>El registro automático genera un nombre de opción siguiendo el patrón <code>connectors_ai_{$id}_api_key</code>, y la API key queda disponible para cualquier plugin compatible que la quiera usar mediante <code>wp_ai_client_prompt()</code>. Eso significa que si tu plugin usa el AI Client del core no tienes que pedirle al usuario una clave API propia, ya está.</p>
<p>Un apunte importante es que en la versión 7.0 de WordPress solo los conectores con identificación de tipo <code>api_key</code> reciben la UI completa en la pantalla de conectores, mientras que otros métodos de identificación están aceptados por el registro PHP pero la integración visual completa llegará en la 7.1. Si tu proveedor usa OAuth conviene esperar o registrar la UI por tu cuenta de momento.</p>
<h2>Abilities API ya de verdad en WordPress 7.0</h2>
<p>Si solo te llevas una cosa de este artículo que sea esta. <strong>La Abilities API entra en 7.0 ya a tope en el núcleo de WordPress</strong> y no como experimento ni como propuesta, y es la pieza que va a transformar la forma en que las IAs interactúan con tu sitio.</p>
<p>La idea es que si tu desarrollo registra <code>abilities</code> concretas con un nombre, una descripción, parámetros y un <code>callback</code>, y esas capacidades quedan disponibles tanto vía REST como vía MCP para que cualquier IA externa las pueda descubrir y ejecutar de forma estandarizada.</p>
<p>Te dejo un ejemplo mínimo de registro de una <code>ability</code>:</p>
<pre>/**
 * Registra una ability para que pueda ser descubierta por agentes externos.
 */
function ayudawp_register_ability() {
    wp_register_ability( 'ayudawp/contar-entradas', array(
        'label'        =&gt; __( 'Contar entradas publicadas', 'ayudawp' ),
        'description'  =&gt; __( 'Devuelve el numero de entradas publicadas en el sitio.', 'ayudawp' ),
        'input_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'post_type' =&gt; array(
                    'type'        =&gt; 'string',
                    'default'     =&gt; 'post',
                    'description' =&gt; __( 'Tipo de contenido a contar.', 'ayudawp' ),
                ),
            ),
        ),
        'execute_callback' =&gt; function( $input ) {
            $post_type = isset( $input['post_type'] ) ? sanitize_key( $input['post_type'] ) : 'post';
            $count     = wp_count_posts( $post_type );

            return array(
                'count' =&gt; isset( $count-&gt;publish ) ? (int) $count-&gt;publish : 0,
            );
        },
        'permission_callback' =&gt; function() {
            return current_user_can( 'edit_posts' );
        },
    ) );
}
add_action( 'abilities_api_init', 'ayudawp_register_ability' );</pre>
<p>A partir del momento en que tu código registra esta <code>ability</code> una IA con acceso al sitio puede descubrirla, leer su esquema de entrada, pedir el permiso correspondiente y ejecutarla, todo sin que tengas que escribir un endpoint REST adicional ni una integración específica con cada IA del mercado.</p>
<p>Si te interesa entender por qué esto cambia el panorama y qué es exactamente la <strong>Abilities API a fondo</strong>, lo cuento en <a href="https://ayudawp.com/abilities-api/" target="_blank" rel="noopener ugc">este artículo introductorio</a>, y para el caso práctico de cómo registrar <code>abilities</code> en tus plugins y temas tienes el detalle en <a href="https://ayudawp.com/implementar-abilities-plugins-temas/" target="_blank" rel="noopener ugc">este otro</a>.</p>
<p>El siguiente paso natural, una vez que tienes <code>abilities</code> registradas, es exponerlas usando MCP para que herramientas como Claude Code, Cursor o cualquier asistente compatible con el <a href="https://ayudawp.com/mcp-wordpress/" target="_blank" rel="noopener">Model Context Protocol</a> puedan usarlas directamente. Eso es harina de otro costal y da para un artículo aparte, pero conviene que lo tengas en el radar.</p>
<h2>Resumen de comprobaciones antes del 20 de mayo</h2>
<p>Si tienes un plugin o tema en producción y quieres asegurarte de que no se te rompe nada con la actualización a 7.0, esta es la rutina que sigo yo:</p>
<ul>
<li>Comprueba la cabecera <code>Requires PHP</code> súbela a <code>7.4</code> si todavía está en <code>7.2</code> o <code>7.3</code>.</li>
<li>Sube la cabecera <code>Tested up to</code> a <code>7.0</code> tras probarlo de verdad, no por las buenas.</li>
<li>Cambia la <code>apiVersion</code> de tus bloques a <code>3</code> en el <code>block.json</code>.</li>
<li>Revisa los <code>document</code> y <code>window</code> directos en el código del bloque y sustitúyelos por <code>ownerDocument</code> y <code>defaultView</code> a través de una referencia.</li>
<li>Si registras cajas meta clásicas, plantea la migración a <code>register_post_meta()</code> con <code>show_in_rest</code> a <code>true</code>.</li>
<li>Pasa todas las pantallas de ajustes de tu plugin o tema por el navegador con WordPress 7.0 y mira si hay desalineaciones en botones, tablas o avisos.</li>
<li>Si tu desarrollo manipula columnas, filtros o acciones rápidas en las pantallas de entradas, páginas o medios, prueba el comportamiento con <code>DataViews</code> activado.</li>
<li>Si conectas con IAs de terceros, valora migrar la gestión de credenciales a la Connectors API.</li>
<li>Si quieres dar un paso más allá, registra <code>abilities</code> concretas de tu plugin o tema para que las puedan descubrir agentes externos.</li>
<li>Activa <code>SCRIPT_DEBUG</code> en tu entorno de pruebas y revisa la consola del navegador en busca de avisos de <code>deprecated</code>.</li>
</ul>
<h2>Recursos oficiales para profundizar</h2>
<p>Para entrar al detalle técnico de cualquiera de estos cambios, los enlaces que conviene tener a mano son:</p>
<ul>
<li><a href="https://make.wordpress.org/core/wordpress-7-0-field-guide/" target="_blank" rel="nofollow noopener">Guía de campo de WordPress 7.0</a>, con todas las dev notes individuales recopiladas en un único índice.</li>
<li><a href="https://make.wordpress.org/core/tag/dev-notes-7-0/" target="_blank" rel="nofollow noopener">Etiqueta dev-notes-7-0 en Make WordPress Core</a>, donde están publicadas las notas a medida que salen.</li>
<li><a href="https://developer.wordpress.org/block-editor/reference-guides/block-api/block-api-versions/block-migration-for-iframe-editor-compatibility/" target="_blank" rel="nofollow noopener">Guía de migración de bloques a iframe</a> en el handbook del editor de bloques.</li>
<li><a href="https://make.wordpress.org/core/2026/03/18/introducing-the-connectors-api-in-wordpress-7-0/" target="_blank" rel="nofollow noopener">Introducing the Connectors API in WordPress 7.0</a>, dev note oficial.</li>
</ul>
<h2>Y si quieres pasar el resumen a tus clientes</h2>
<p>Mañana publico el artículo hermano de este, dirigido a propietarios de webs hechas con WordPress, y lo escribo justo para que se lo puedas pasar a quien delegue en ti la actualización del sitio sin entrar en código. Lo enlazaré aquí en cuanto esté disponible.</p>
<p>Si en tus revisiones ves algún caso raro que no termina de encajar con lo que cuento, escríbeme en los comentarios. Cualquier patrón que aparezca en plugins reales y que merezca la pena cubrir lo voy añadiendo en revisiones del artículo.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/actualizar-plugins-temas-wordpress-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>No, Contact Form 7 no va a cerrar</title>
		<link>https://ayudawp.com/contact-form-7-no-cierra/</link>
					<comments>https://ayudawp.com/contact-form-7-no-cierra/#comments</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Tue, 05 May 2026 06:28:04 +0000</pubDate>
				<category><![CDATA[Análisis]]></category>
		<category><![CDATA[Opinión]]></category>
		<category><![CDATA[Plugins WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Contact Form 7]]></category>
		<category><![CDATA[Principiante]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159271</guid>

					<description><![CDATA[Lo de Contact Form 7 es tremendo, y te reconozco que me tiene un poco molesto. Una noticia importante pero técnica, en una ponencia técnica, en un congreso técnico, y a las 48 horas medio sector de los plugins de formularios escribiendo necrológicas.]]></description>
										<content:encoded><![CDATA[<p><strong>Lo de Contact Form 7 es tremendo</strong>, y te reconozco que me tiene un poco molesto. Una noticia importante pero técnica, en una ponencia técnica, en un congreso técnico, y a las 48 horas <strong>medio sector de los plugins de formularios escribiendo necrológicas</strong>.</p>
<p>Que si <em>«<strong>feature freeze</strong>«</em>, que si <em>«<strong>el plugin se acaba</strong>«</em>, que si <em>«<strong>migra antes de que sea tarde</strong>«</em>. La realidad es algo más aburrida y, sobre todo, mucho <strong>menos urgente de lo que te están vendiendo</strong>.</p>
<p>Vamos a verlo con calma.</p>
<h2>Lo que anunció Miyoshi, sin el filtro del marketing oportunista</h2>
<p>El 11 de abril de 2026, durante <a href="https://asia.wordcamp.org/2026/speaker/takayuki-miyoshi/" target="_blank" rel="nofollow noopener">WordCamp Asia 2026 en Mumbái</a>, Takayuki Miyoshi presentó la ponencia <em>Schema sharing makes web forms management sustainable</em> (<a href="https://wordpress.tv/2026/04/21/schema-sharing-makes-web-forms-management-sustainable/" target="_blank" rel="nofollow noopener">disponible en WordPress.tv</a>).</p>
<p>Y ahí, entre la propuesta de un sistema de esquemas compartidos para formularios web, soltó <strong>la frase que ha desencadenado el espectáculo</strong>:</p>
<blockquote><p>Tras la version <a href="https://contactform7.com/" target="_blank" rel="nofollow noopener">Contact Form 7</a> 6.2, el plugin entra en congelación de funcionalidades.</p></blockquote>
<p>Esto es lo que <em>feature freeze</em> significa de verdad:</p>
<ul>
<li>El plugin sigue publicado en WordPress.org con sus <strong>10 millones de instalaciones activas</strong>.</li>
<li>Sigue recibiendo <strong>parches de seguridad cuando hagan falta</strong>. La última versión, la 6.1.5 de febrero de 2026, fue precisamente un parche de seguridad para inyección de cabeceras de correo.</li>
<li>Sigue manteniendo <strong>compatibilidad con las nuevas versiones</strong> de WordPress.</li>
<li>Lo que se para de momento son las funciones nuevas, no el desarrollo en sí.</li>
<li><strong>Miyoshi sigue activo</strong> en el ecosistema WordPress, dirigiendo Rock Lobster Inc., colaborando como voluntario patrocinado por Kinsta y desarrollando otros proyectos como Bogo o la propia idea de schema sharing que presentó.</li>
</ul>
<p>O sea, que <strong>Contact Form 7 no se cierra, no se abandona y no desaparece</strong>, se estabiliza. Es exactamente lo que pasa con software maduro que ya hace lo que tiene que hacer.</p>
<p>WordPress mismo lleva años discutiendo si TinyMCE, jQuery o ciertas APIs deberían estar en <em>feature freeze</em>, y nadie está montando funerales por ello.</p>
<h2>El zoo de la vergüenza</h2>
<p>Lo verdaderamente curioso es <strong>la velocidad con la que se ha montado el carnaval</strong>. Repaso lo que han publicado los competidores y los enlaces para que veas con tus ojos el nivel de exageración.</p>
<h3>WPForms: la urgencia inventada</h3>
<p>WPForms ha publicado <a href="https://wpforms.com/reasons-to-systematic-switch-from-contact-form-7-to-wpforms/" target="_blank" rel="nofollow noopener">«11 Reasons to Switch From Contact Form 7 to WPForms»</a> donde el titular ya marca el tono. Que CF7 está en <em>feature freeze</em>, que el desarrollador «se va a otro proyecto» y que <strong>tu sitio es un riesgo de seguridad inminente</strong>.</p>
<p>Está bien escrita, todo hay que decirlo, y técnicamente es verdad en muchos puntos, pero el mensaje de fondo es la del pánico controlado.</p>
<p>La frase clave del artículo es decir que «<strong>bug fixes</strong>» y «<strong>mantener compatibilidad activa</strong>» son cosas distintas, lo cual es verdad, pero también es trampa, pues <strong>CF7 lleva veinte años manteniendo compatibilidad con WordPress y no hay ningún indicio de que eso vaya a cambiar</strong>.</p>
<h3>Fluent Forms: el más agresivo</h3>
<p>Fluent Forms ha sacado tres posts en cadena. La principal, <a href="https://fluentforms.com/switch-from-contact-form-7-to-fluent-forms/" target="_blank" rel="nofollow noopener">«13 Reasons to Switch From Contact Form 7 to Fluent Forms»</a>, abre directamente con que el desarrollo de CF7 «<strong>se está acabando</strong>» y que «<strong>el riesgo se acumula cuanto más esperes</strong>«.</p>
<p>Tienen además una guía específica de <a href="https://fluentforms.com/migrate-from-contact-form-7-to-fluent-forms-one-click/" target="_blank" rel="nofollow noopener">migración con un clic</a> y una <a href="https://fluentforms.com/contact-form-7-vs-fluent-forms/" target="_blank" rel="nofollow noopener">comparativa</a> donde, casualmente, todas las casillas verdes están de su lado.</p>
<p>El subtexto comercial es evidente, que por 79 dólares al año en cuanto pasas a la versión Pro, que es donde están el 90% de las funciones que destacan.</p>
<h3>SureForms: la apuesta de Brainstorm Force</h3>
<p>SureForms ha publicado <a href="https://sureforms.com/news/contact-form-7-alternative-sureforms/" target="_blank" rel="nofollow noopener">su mensaje de «alternativa moderna»</a> y una <a href="https://sureforms.com/news/contact-form-7-vs-sureforms/" target="_blank" rel="nofollow noopener">comparativa directa</a>. Tono más comedido, pero la conclusión es la misma, que CF7 está congelado y SureForms es el futuro.</p>
<p>Como producto está bien hecho y la integración con bloques de Gutenberg es notable, pero llevan apenas un par de años en el mercado y todavía les falta ecosistema y rodaje.</p>
<p>Brainstorm Force es la gente detrás de Astra y Spectra, así que potencia comercial y de marketing tienen de sobra.</p>
<h3>WPBeginner: amplificador estructural</h3>
<p>WPBeginner, que es el medio anglosajón más leído sobre WordPress y que tiene <strong>relación directa con WPForms</strong> (mismo dueño, Syed Balkhi), <a href="https://www.wpbeginner.com/news/wpbeginner-spotlight-23-wpvibe-brings-ai-to-wordpress-smarter-automations-seo-fundraising-tools/" target="_blank" rel="nofollow noopener">recogió la noticia en su newsletter de abril</a> con titular del estilo «<strong>uno de los plugins más antiguos y usados de WordPress cierra oficialmente la puerta a nuevas funciones</strong>«.</p>
<p>Cuando <strong>el medio que define la idea pública del ecosistema y el plugin que más se beneficia comparten propietario</strong>, la noticia tiende a sonar bastante más grave de lo que es en la realidad técnica.</p>
<h3>El resto del coro</h3>
<p>Everest Forms, Forminator, Gravity Forms, Bit Form, WPZOOM Forms, Ninja Forms… todos han publicado o reactualizado sus comparativas con CF7.</p>
<p>Todos tienen su importador «con un clic», t<strong>odos te dicen que tu sitio está en riesgo y que ellos son la solución</strong>.</p>
<p>Cuando todo el mercado se mueve a la vez con el mismo mensaje y la misma llamada a la acción, no estamos ante un análisis técnico sino ante <strong>una campaña coordinada de captación oportunista</strong>.</p>
<h2>Lo que tienes gratis con CF7 frente a lo que te cobran los que lo quieren enterrar ya</h2>
<p>Esta es <strong>la parte que se les olvida</strong>, porque lo que repiten es que CF7 es básico y ellos ofrecen soluciones completas.</p>
<p>Pero la realidad es que <strong>CF7, junto con su <a href="https://ayudawp.com/las-mejores-extensiones-gratuitas-para-contact-form-7/" target="_blank" rel="noopener">enorme ecosistema de extensiones gratuitas</a>, lleva más de una década dando funciones que sus rivales entierran detrás de muros de pago</strong>, de ahí esas prisas repentinas por enterrarlo.</p>
<p>Repasamos <strong>punto por punto lo que ofrece cada plugin de pago como gancho</strong> premium <strong>y dónde lo tienes en el universo Contact Form 7 sin pagar un euro</strong>:</p>
<table border="1" cellspacing="0" cellpadding="8">
<thead>
<tr>
<th>Funcionalidad</th>
<th>CF7 + extensión gratuita</th>
<th>WPForms</th>
<th>Fluent Forms</th>
<th>Gravity Forms</th>
</tr>
</thead>
<tbody>
<tr>
<td>Almacenar envíos en WordPress</td>
<td>Flamingo (gratis, del propio Miyoshi)</td>
<td>Plan Basic, 49,50 $/año</td>
<td>Plan Free</td>
<td>Plan Basic, 59 $/año</td>
</tr>
<tr>
<td>Lógica condicional</td>
<td>CF7 Conditional Fields (gratis)</td>
<td>Plan Basic, 49,50 $/año</td>
<td>Plan Free</td>
<td>Plan Basic, 59 $/año</td>
</tr>
<tr>
<td>Formularios multipaso</td>
<td>CF7 Multi-Step Forms (gratis)</td>
<td>Plan Basic, 49,50 $/año</td>
<td>Plan Pro, 79 $/año</td>
<td>Plan Basic, 59 $/año</td>
</tr>
<tr>
<td>Pagos con PayPal</td>
<td>CF7 PayPal Extension (gratis)</td>
<td>Plan Pro</td>
<td>Plan Pro</td>
<td>PayPal Add-On, plan Elite</td>
</tr>
<tr>
<td>Pagos con Stripe</td>
<td>Stripe for Contact Form 7 (gratis)</td>
<td>Plan Pro</td>
<td>Plan Pro</td>
<td>Stripe Add-On, plan Pro</td>
</tr>
<tr>
<td>Pagos con Bizum y Redsys</td>
<td>Sí (ver <a href="https://ayudawp.com/bizum-redsys-contact-form-7/" target="_blank" rel="noopener">guía</a>)</td>
<td>No nativo</td>
<td>No nativo</td>
<td>Solo vía add-ons de terceros</td>
</tr>
<tr>
<td>Selector de fechas</td>
<td>CF7 DatePicker (gratis)</td>
<td>Plan Free</td>
<td>Plan Free</td>
<td>Plan Basic</td>
</tr>
<tr>
<td>Firma manuscrita</td>
<td>CF7 Signature Addon (gratis)</td>
<td>Plan Pro</td>
<td>Plan Pro</td>
<td>Signature Add-On, plan Elite</td>
</tr>
<tr>
<td>Integración con Mailchimp</td>
<td>CF7 MailChimp Extension (gratis)</td>
<td>Plan Plus, 99 $/año</td>
<td>Plan Pro</td>
<td>Mailchimp Add-On, plan Pro</td>
</tr>
<tr>
<td>Integración con WooCommerce</td>
<td>CF7 WooCommerce Orders (gratis)</td>
<td>Plan Pro</td>
<td>Plan Pro</td>
<td>Add-Ons varios</td>
</tr>
<tr>
<td>Convertir envíos en entradas</td>
<td>CF7 to WordPress Post (gratis)</td>
<td>Post Submissions Add-On, plan Pro</td>
<td>Plan Pro</td>
<td>Advanced Post Creation, plan Pro</td>
</tr>
<tr>
<td>Honeypot antispam</td>
<td>CF7 Honeypot (gratis)</td>
<td>Plan Free</td>
<td>Plan Free</td>
<td>Plan Basic</td>
</tr>
<tr>
<td>Personalizador visual</td>
<td>CF7 Customizer (gratis)</td>
<td>Plan Pro</td>
<td>Plan Pro</td>
<td>Plan Basic</td>
</tr>
<tr>
<td>Campos dinámicos por URL</td>
<td>CF7 Dynamic Text Extension (gratis)</td>
<td>Plan Pro</td>
<td>Plan Pro</td>
<td>Plan Basic</td>
</tr>
<tr>
<td>Akismet, reCAPTCHA, Cloudflare Turnstile</td>
<td>Integración nativa (gratis)</td>
<td>Plan Free</td>
<td>Plan Free</td>
<td>Plan Basic</td>
</tr>
<tr>
<td>Coste total</td>
<td><strong>0 €</strong></td>
<td>Desde 49,50 $/año</td>
<td>Desde 79 $/año</td>
<td>Desde 59 $/año</td>
</tr>
</tbody>
</table>
<p>Cuando ves la tabla entera <strong>el discurso de los competidores se desinfla solo</strong>.</p>
<p>La diferencia real no está en lo que CF7 ofrece, está en cómo lo ofrece, módulos sueltos en vez de una suite cerrada. Eso, dependiendo de quién seas, es ventaja o inconveniente, pero presentarlo como «carencia» es basura comercial.</p>
<h2>Lo que ofrece de verdad cada alternativa, y lo que infla</h2>
<p>Vamos a repasar un poco más en detalle <strong>qué hace bien y qué exagera cada una de las alternativas que más están empujando</strong> ahora mismo.</p>
<h3>Fluent Forms</h3>
<ul>
<li><strong>Lo real:</strong> es un plugin sólido, ligero, con una versión gratuita generosa de verdad. Su gratuita incluye lógica condicional, formularios conversacionales y almacenamiento de entradas, cosa que ni WPForms ni Gravity Forms ofrecen sin pagar. La interfaz tipo de arrastrar y soltar está bien resuelta y el migrador desde CF7 funciona razonablemente bien.</li>
<li><strong>Lo inflado:</strong> en su comparativa pintan a CF7 como un plugin del paleolítico que casi no envía correos. Insisten en que CF7 «no almacena entradas» como si fuera un fallo escandaloso, ignorando que existe Flamingo, hecho por el mismo Miyoshi, gratis y que hace exactamente eso. El discurso del riesgo de seguridad inminente es deshonesto, pues CF7 ha tenido vulnerabilidades a lo largo de su historia y se han parcheado, igual que las ha tenido Fluent Forms y todas las demás.</li>
</ul>
<h3>WPForms</h3>
<ul>
<li><strong>Lo real:</strong> es la opción más cómoda para quien no quiere complicarse la vida. La curva de aprendizaje es la más suave del mercado y para webs de clientes que no tocan nada, va muy bien. La integración con email marketing es buena.</li>
<li><strong>Lo inflado:</strong> la versión Lite (gratis) está deliberadamente capada para empujarte al plan Basic en cuanto necesitas algo serio. Lo que venden como «WPForms ya hace más que CF7 gratis» es cuestionable cuando lo comparas con CF7 más sus extensiones gratuitas. Y la frase de que el desarrollador de CF7 «se va a otro proyecto» es directamente falsa, porque Miyoshi ha dicho que congela funciones, no que abandone el plugin. Hay una diferencia conceptual y comercial enorme.</li>
</ul>
<h3>SureForms</h3>
<ul>
<li><strong>Lo real:</strong> tiene generación de formularios por IA en lenguaje natural que está bien resuelta y la integración con bloques de Gutenberg es de las mejores del mercado. Si creas webs con Spectra y temas de bloques encaja muy natural.</li>
<li><strong>Lo inflado:</strong> es muy joven. El ecosistema de integraciones todavía está en construcción, la documentación es limitada y depende mucho del calendario de Brainstorm Force. La promesa de «el futuro de los formularios» es válida como aspiración pero hoy mismo no es lo más maduro que puedes instalar.</li>
</ul>
<h3>Forminator</h3>
<ul>
<li><strong>Lo real:</strong> probablemente la versión gratuita más completa del mercado en 2026. Incluye lógica condicional, pagos con Stripe, cuestionarios, encuestas y cálculos sin pagar nada. Para quien quiera salir de CF7 y no soltar un euro quizás es la opción más interesante.</li>
<li><strong>Lo inflado:</strong> pertenece al ecosistema WPMU DEV y empuja sus servicios de pago de forma a veces invasiva. Los avisos en el panel de administración son constantes.</li>
</ul>
<h3>Gravity Forms</h3>
<ul>
<li><strong>Lo real:</strong> sigue siendo el rey de los formularios profesionales. Estable, bien documentado, con una comunidad de desarrolladores muy madura y una API de plugin para extensiones muy bien diseñada. Para sitios serios y agencias, sigue siendo la opción de menor riesgo.</li>
<li><strong>Lo inflado:</strong> nada en particular, porque Gravity Forms casi no se ha sumado al hype del feature freeze. Han hecho lo más inteligente, que es callarse y dejar que los demás peleen por la gracia del momento.</li>
</ul>
<h2>El elefante en la habitación es la dependencia de extensiones</h2>
<p>Una crítica que sí tiene sentido sobre el modelo de Contact Form 7 es que <strong>depende mucho de extensiones de terceros</strong>. Aquí sí hay algo a vigilar, sobre todo si tu formulario depende de:</p>
<ul>
<li>Conditional Fields (mantenido activamente, sin riesgo aparente).</li>
<li>Multi-Step Forms (lleva sin actualizarse desde hace años, en zona de riesgo).</li>
<li>CF7 Customizer (mantenimiento intermitente).</li>
<li>Algún plugin de PayPal, Stripe o Redsys de terceros sin desarrollo activo.</li>
<li>Integraciones con CRM viejas y abandonadas.</li>
</ul>
<p>… entonces sí tienes un problema real, y no es por el <em>feature freeze</em> de CF7, sino porque <strong>tu formulario está montado sobre piezas de mantenimiento incierto</strong>. Eso ya era cierto antes del anuncio de Mumbái, y va a seguir siendo cierto independientemente de lo que haga CF7.</p>
<p>La solución no es necesariamente migrar de plugin de formularios, es <strong>revisar tu pila de plugins y decidir qué piezas reemplazar</strong>.</p>
<p>El consejo práctico aquí es hacer un <strong>inventario de extensiones</strong> CF7 en tus sitios, mirar la fecha de última actualización de cada una en WordPress.org, y reemplazar las zombi por alternativas mantenidas o por código propio si tienes habilidad.</p>
<p>Para el 90% de los casos eso te resuelve el problema sin tocar el plugin principal.</p>
<h2>Cuándo migrar de verdad tiene sentido</h2>
<p>Pese a todo lo anterior, no estoy diciendo que nadie deba migrar. Hay escenarios donde dejar CF7 es la decisión correcta y conviene reconocerlos sin disfraz:</p>
<ul>
<li><strong>Si gestionas formularios complejos con cinco o seis extensiones de CF7 encadenadas</strong>, una suite todo en uno te va a simplificar el mantenimiento y la vida.</li>
<li><strong>Si tus clientes finales necesitan crear y modificar formularios por sí mismos</strong>, un constructor visual les va a costar mucho menos que enseñarles los shortcode tags de CF7.</li>
<li><strong>Si trabajas con flujos de pago serios</strong>, especialmente recurrentes, suscripciones, pasarelas múltiples y conciliación contable, una solución profesional integrada es más defendible que una caja de extensiones gratuitas montadas a piezas.</li>
<li><strong>Si necesitas almacenamiento de entradas con interfaz rica</strong> (búsqueda, etiquetado, exportación a PDF, paneles de seguimiento), la combinación de CF7 más Flamingo se queda corta. Aquí sí ganan los rivales.</li>
<li><strong>Si tienes formularios con muchísimo volumen</strong> y necesitas gestionar miles de envíos al mes con automatizaciones complejas y conexión con CRM, CF7 no es la herramienta adecuada y nunca lo ha sido.</li>
</ul>
<h2>Cuándo NO migrar (que es la mayoría de casos)</h2>
<p>Estos son los escenarios donde el ruido del marketing está intentando empujarte a un cambio que no necesitas:</p>
<ul>
<li><strong>Formulario de contacto sencillo en una web corporativa o profesional</strong>: nombre, email, mensaje, antispam y a correr. CF7 va a seguir haciendo esto perfectamente durante años. Cambiarlo es trabajo gratis para ti.</li>
<li><strong>Formularios de presupuesto con campos básicos</strong>: cinco o seis campos, condicional simple, envío a un par de direcciones. Lo tienes resuelto con CF7 más una extensión y nada justifica meterse en una migración.</li>
<li><strong>Sitios pequeños con poco volumen</strong>: si recibes diez o veinte envíos al mes, el coste-beneficio de cambiar es negativo casi seguro.</li>
<li><strong>Formularios con integraciones que ya funcionan</strong>: la regla del «si no está roto, no lo toques» se aplica especialmente aquí. Las migraciones siempre rompen algo, y la pregunta no es si va a pasar, es qué va a pasar y cuánto te va a costar arreglarlo.</li>
<li><strong>Webs con varios años de historial de formularios</strong>: si tienes un volumen importante de envíos archivados con Flamingo o algún otro sistema, cualquier migración te va a obligar a decidir qué haces con ese histórico.</li>
</ul>
<h2>Huye del oportunismo … en mi opinión</h2>
<p>Si me preguntas como profesional que mantiene decenas de webs mi posición es clara, mía, pero te la cuento.</p>
<p>Para los formularios sencillos que tienen el 80% de los sitios WordPress (un contacto, un presupuesto básico, una suscripción a newsletter), <strong>Contact Form 7 sigue siendo la opción más eficiente, ligera y económica que existe</strong>.</p>
<p>El <em>feature freeze</em> no cambia eso lo más mínimo, lo único que cambia es que los nuevos juguetes (IA generadora de formularios, formularios conversacionales tipo Typeform, integraciones de moda con cada SaaS que sale) no van a llegar a CF7. Si no los necesitas no te afecta.</p>
<p>Para casos avanzados, complejos o con clientes finales que quieren autonomía, las alternativas modernas tienen algunas ventajas, pero la decisión debe estar guiada por tus necesidades, no por el calendario de marketing de tres plugins de pago que han visto una oportunidad.</p>
<p>Y si te empuja a tomar una decisión apresurada un artículo titulado «<strong>13 razones para migrar ya mismo</strong>«, recuerda quién lo ha escrito y qué vende.</p>
<p>Hay buenos plugins de formularios en el mercado (Fluent Forms, Forminator, Gravity Forms) y los recomiendo cuando tiene sentido recomendarlos, <strong>lo que no recomiendo nunca es decidir por miedo a una noticia que no es lo que parece</strong>.</p>
<h2>Lo que pasará y lo que no los próximos meses</h2>
<p>Para que tengas el panorama claro, <strong>esto es lo previsible</strong>:</p>
<ul>
<li><strong>Contact Form 7 versión 6.2 saldrá en la primera mitad de 2026</strong> con soporte para WordPress 6.9+ y PHP 8.3+ obligatorio. Si tu hosting va con PHP antiguo, este es momento de actualizar igualmente.</li>
<li><strong>El número de instalaciones activas bajará lentamente</strong> durante 2026 y 2027 a medida que algunos usuarios se vayan a otras opciones por la presión del marketing, pero la caída no será dramática.</li>
<li>Algunas extensiones zombi (Multi-Step, varias de pasarelas viejas) probablemente quedarán definitivamente abandonadas. Tendrás que sustituirlas si las usas.</li>
<li>Las extensiones mantenidas activamente (Conditional Fields, Flamingo, las extensiones del propio Miyoshi) seguirán funcionando perfectamente.</li>
<li><strong>Los competidores publicarán dos o tres rondas más de artículos</strong> de «<strong>migra ya</strong>» durante 2026 cada vez que CF7 saque un parche. Es marketing reciclable y barato.</li>
<li>WordPress 7.0, previsto para este año, será probablemente el primer momento crítico real para CF7 si Miyoshi tarda en publicar parches de compatibilidad. Hasta entonces no hay nada urgente.</li>
</ul>
<p>Mi consejo es <strong>que tengas preparado un plan B</strong> documentado para cada uno de tus sitios importantes (qué plugin alternativo elegirías, qué migrador usarías, qué riesgos tendrías), pero <strong>no lo ejecutes hasta que haya una razón concreta para hacerlo</strong>.</p>
<p>Tener el plan listo es responsable, ejecutarlo por miedo a un artículo de marketing no lo es.</p>
<p>Si quieres profundizar en cualquier extensión concreta para CF7 tienes <a href="https://ayudawp.com/tag/contact-form-7/" target="_blank" rel="noopener">decenas de artículos</a> sobre cómo sacarle todo el partido sin pagar nada extra.</p>
<p>Y si después de leer todo esto sigues queriendo migrar, al menos hazlo con criterio, no porque WPForms haya decidido que tu sitio está en peligro.</p>
<p>Para todo lo demás, incluso debatir, me tienes ahí abajo, en la sección de comentarios.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/contact-form-7-no-cierra/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>