'Requête invalide', 401 => 'Authentification requise', 403 => 'Accès interdit', 404 => 'Page introuvable', 405 => 'Méthode non autorisée', 410 => 'Page supprimée', 429 => 'Trop de requêtes', 500 => 'Erreur interne', 503 => 'Maintenance en cours'); } /* Affiche la page d'erreur (code HTTP, titre, message HTML déjà sûr) puis s'arrête */ function yb2026_render_error($code, $title, $msg_html) { $yb_code = (int) $code ?: 500; $yb_title = $title !== '' ? $title : (yb2026_error_titles()[$yb_code] ?? 'Erreur'); $yb_msg = $msg_html; if (!headers_sent()) { status_header($yb_code); nocache_headers(); header('Content-Type: text/html; charset=utf-8'); header('X-Robots-Tag: noindex, nofollow'); } // on vide les tampons de sortie (dont celui d'Autoptimize) : la page sort à l'identique des pages Apache / NPM while (ob_get_level() > 0) ob_end_clean(); include __DIR__ . '/error-template.php'; exit; } add_filter('wp_die_handler', function ($handler) { if (is_admin() || wp_doing_ajax() || (defined('REST_REQUEST') && REST_REQUEST) || (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) || (isset($GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php')) { return $handler; } return function ($message, $title = '', $args = array()) { $args = wp_parse_args($args, array('response' => 500)); if (is_wp_error($message)) { $data = $message->get_error_data(); if (is_array($data) && !empty($data['status'])) $args['response'] = $data['status']; $message = implode('
', array_map('esc_html', $message->get_error_messages())); } $code = (int) $args['response']; // le titre WordPress par défaut (« Erreur WordPress ») n'apporte rien : on garde un titre lisible $t = is_string($title) && $title !== '' && stripos($title, 'WordPress') === false ? wp_strip_all_tags($title) : ''; $message = trim(preg_replace('#]*>#i', ' ', (string) $message)); // le modèle fournit déjà le paragraphe yb2026_render_error($code, $t, wp_kses_post($message)); }; });