Pages Compétences, Contact et Qui suis-je
This commit is contained in:
parent
e06ad42369
commit
da05adede1
10 changed files with 1242 additions and 0 deletions
51
inc/errors.php
Normal file
51
inc/errors.php
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
/**
|
||||
* Pages d'erreur WordPress au style du portfolio.
|
||||
* - wp_die() côté site public (l'admin, la page de connexion, AJAX/REST gardent l'affichage natif)
|
||||
* - wp-content/php-error.php (erreur fatale PHP) utilise le même modèle : inc/error-template.php
|
||||
* Le modèle est généré par ~/yb-erreurs/build.py (pages Apache et NPM identiques).
|
||||
*/
|
||||
|
||||
function yb2026_error_titles()
|
||||
{
|
||||
return array(400 => '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('<br>', 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('#</?p[^>]*>#i', ' ', (string) $message)); // le modèle fournit déjà le paragraphe
|
||||
yb2026_render_error($code, $t, wp_kses_post($message));
|
||||
};
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue