En el corazón de WordPress, enterrado en wp-settings.php, hay una puerta trasera oficial:
if ( WP_CACHE && file_exists( WP_CONTENT_DIR . '/advanced-cache.php' ) ) {
require WP_CONTENT_DIR . '/advanced-cache.php';
}
Esta línea se ejecuta antes de:
Es tu ventana de menos de 1 ms para:
Archivo:
wp-content/advanced-cache.php
Debe existir y ser legible por PHP.
Constante en wp-config.php:
define('WP_CACHE', true);
Sin esto, WordPress ignora el archivo.
Nada más. No necesitas plugins, hooks, ni permisos especiales.
wp-config.php y define ABSPATH, WP_CONTENT_DIR, etc.WP_CACHE es true y wp-content/advanced-cache.php existe, WordPress lo incluye inmediatamente.exit(), WordPress nunca se carga.exit(), WordPress continúa su flujo normal.Este es el único punto en todo WordPress donde puedes intervenir antes de que se inicie cualquier lógica del núcleo.
<?php
$cache_file = WP_CONTENT_DIR . '/cache/' . md5($_SERVER['REQUEST_URI']) . '.html';
if (file_exists($cache_file)) {
readfile($cache_file);
exit;
}
// Si no hay caché, no hacer nada → WordPress generará la página
<?php
$blocked_ips = ['203.0.113.10', '198.51.100.55'];
if (in_array($_SERVER['REMOTE_ADDR'], $blocked_ips)) {
http_response_code(403);
exit('Access denied.');
}
<?php
if (strpos($_SERVER['HTTP_HOST'], 'staging.') === 0 &&
strpos($_SERVER['REQUEST_URI'], '/wp-admin') === 0) {
if ($_SERVER['REMOTE_ADDR'] !== '192.168.1.100') {
http_response_code(403);
exit('Admin access restricted.');
}
}
<?php
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$bad_patterns = ['sqlmap', 'nikto', 'masscan'];
foreach ($bad_patterns as $pattern) {
if (stripos($user_agent, $pattern) !== false) {
http_response_code(403);
exit();
}
}