Cualquiera puede ejecutar las tareas programadas de tu sitio a través de wp-cron.php
Instrucciones generales. Abre este artículo desde tu informe de PageCheck para verlo con la dirección de tu sitio y las reglas para su servidor web.
Qué es
WordPress ejecuta sus tareas programadas —publicar entradas programadas, enviar correos, copias de seguridad, actualizaciones de plugins— a través del archivo wp-cron.php. Por defecto lo lanza él mismo mientras los visitantes navegan por el sitio, así que el archivo tiene que responder a peticiones de internet.
Qué falla
El archivo responde a cualquiera, así que cualquiera, bots incluidos, puede lanzar las tareas programadas del sitio tantas veces como quiera. Cada petición hace que WordPress se cargue entero, así que las peticiones repetidas son una forma barata de cargar el servidor y ralentizar el sitio. Las tareas lanzadas por las visitas además no son fiables: en un sitio con poco tráfico se ejecutan tarde.
Cómo arreglarlo
Sigue los pasos en este orden: bloquear primero el archivo detendría las entradas programadas y los correos.
1. Ejecuta las tareas programadas desde el servidor. Añade en el panel del hosting una tarea programada (cron) que se ejecute cada 5 minutos:
-
Plesk: Websites & Domains → Scheduled Tasks → Add Task, tipo «Run a PHP script», script
httpdocs/wp-cron.php. -
cPanel: Cron Jobs, comando
cd /home/USER/public_html && php wp-cron.php(con tu propio nombre de cuenta y carpeta). -
Un servidor con WP-CLI:
wp cron event run --due-now --path=/path/to/site.
Ejecuta el archivo con PHP en el servidor, no abriendo su dirección por internet (wget o curl): el paso 3 lo bloquea. Los hostings de WordPress gestionado suelen tener ya una tarea de servidor; pregúntales.
2. Impide que WordPress lo lance en cada visita.
Añade esta línea a wp-config.php, encima de la línea /* That's all, stop editing! */:
wp-config.php
define( 'DISABLE_WP_CRON', true );
3. Cierra el archivo al exterior. Usa la regla de tu servidor web (tu hosting puede decirte cuál es):
Apache o LiteSpeed: en el archivo .htaccess de la carpeta principal del sitio, encima de la línea «# BEGIN WordPress»
<Files "wp-cron.php">
Require all denied
</Files>nginx: en el bloque server del sitio
location = /wp-cron.php {
deny all;
} Con Cloudflare puedes bloquearlo allí en su lugar: Security → WAF → Custom rules, una regla «URI Path equals /wp-cron.php» con la acción Block.
4. Compruébalo.
Abre https://example.com/wp-cron.php: ahora debería responder «Forbidden» (403). Programa una entrada de prueba unos minutos más tarde, comprueba que se publica a su hora y después vuelve a ejecutar esta comprobación.
Close wp-cron.php on my WordPress site to requests from the internet, without breaking scheduled tasks. https://example.com/wp-cron.php currently answers anyone.
The web server type is not known; check which one the site runs on.
Steps, in this order:
1. Set up a server-side scheduled task that runs WordPress cron every 5 minutes with PHP on the server (php wp-cron.php from the site's folder, or wp cron event run --due-now). Not wget/curl over HTTP: step 3 would block it.
2. Add define( 'DISABLE_WP_CRON', true ); to wp-config.php above "That's all, stop editing!".
3. Deny HTTP access to /wp-cron.php: on Apache/LiteSpeed a <Files "wp-cron.php"> Require all denied </Files> block in .htaccess above # BEGIN WordPress; on nginx location = /wp-cron.php { deny all; } in the server block.
4. Verify: /wp-cron.php answers 403, wp cron event list shows no overdue events after 10 minutes, and a post scheduled a few minutes ahead is published on time.
Tell me exactly which files you changed and what to check in the hosting control panel.
Resources:
- Hooking WP-Cron into the system task scheduler (WordPress.org): https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/
Asunto: example.com – ejecutar las tareas programadas de WordPress desde el servidor y cerrar wp-cron.php Hola: Una comprobación del sitio (PageCheck) ha detectado que https://example.com/wp-cron.php responde a cualquiera, así que cualquiera puede lanzar las tareas programadas de nuestro sitio y cargar el servidor. Por favor, en este orden: 1. Añadir un cron en el servidor que ejecute wp-cron.php con PHP cada 5 minutos. 2. Añadir define( 'DISABLE_WP_CRON', true ); a wp-config.php. 3. Bloquear las peticiones web a wp-cron.php (en .htaccess, la configuración de nginx o el cortafuegos). 4. Comprobar que las entradas programadas y los correos siguen saliendo a su hora. Recursos: - Hooking WP-Cron into the system task scheduler (WordPress.org): https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/ ¡Gracias!
Revisa tu sitio para ver si tiene este problema. Revisar un sitio web