Avec la structure de permaliens /%category%/%postname%/, la règle (.+?)/([^/]+)(?:/([0-9]+))?/?$ lit un dernier segment numérique comme un numéro de page : l'article répond 404 tout en restant listé partout. Deux chemins produisaient un tel slug : - un titre vide à la première publication — le cœur retombe alors sur l'ID du post et ne régénère plus jamais le slug ensuite, même titre corrigé ; c'est ce que provoquait post-title-required.php, qui laisse le post s'écrire en publish avant d'annuler son statut ; - un titre légitimement numérique (« 1917 »). - inc/post-slug-guard.php : filtre wp_unique_post_slug limité à post/page, suffixe les slugs purement numériques (1917 → 1917-2). Les nav_menu_item et attachments, dont les slugs numériques sont normaux, ne sont pas touchés. - pods-save-error-handler.php : l'annulation de statut vide aussi post_name quand le titre est vide, pour qu'il se régénère depuis le vrai titre. Les deux articles déjà touchés en prod restent à re-sluguer à la main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011w7RzAHv4r1Yahnm2NwDDG
50 lines
2.3 KiB
PHP
Executable File
50 lines
2.3 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Bootstrap du thème : init Timber puis chargement des modules inc/*.
|
|
* Chaque module est autonome (fonctions + hooks) ; l'ordre compte :
|
|
* config et i18n d'abord (helpers utilisés par tous les autres).
|
|
*/
|
|
|
|
require_once __DIR__ . '/vendor/autoload.php';
|
|
Timber\Timber::init();
|
|
Timber::$dirname = 'templates';
|
|
|
|
add_theme_support( 'title-tag' );
|
|
|
|
// Identifiants centralisés (catégories par slug, couleurs de rubrique)
|
|
require_once __DIR__ . '/inc/config.php';
|
|
// Multilingue maison (langue, |bilingual, |en_url, |cat_name, switcher)
|
|
require_once __DIR__ . '/inc/i18n.php';
|
|
// Avatars (Simple Local Avatar → Gravatar → initiales)
|
|
require_once __DIR__ . '/inc/avatars.php';
|
|
// Enqueue des assets front et admin
|
|
require_once __DIR__ . '/inc/assets.php';
|
|
// Contexte Twig global (menus, gc, axes courants, switcher)
|
|
require_once __DIR__ . '/inc/context.php';
|
|
// Tri/filtre par date d'événement + helpers de listes (épinglés, groupes d'axes)
|
|
require_once __DIR__ . '/inc/event-dates.php';
|
|
// Séances de séminaire : résolution du parent + redirection #seance-{ID}
|
|
require_once __DIR__ . '/inc/seance-helpers.php';
|
|
// Handlers AJAX du scroll infini (grille + agenda)
|
|
require_once __DIR__ . '/inc/ajax.php';
|
|
// Restrictions contributeurs, Vie du labo, redirections login/dashboard
|
|
require_once __DIR__ . '/inc/access-control.php';
|
|
// Customisations admin (display_name, colonnes, admin bar, /autres…)
|
|
require_once __DIR__ . '/inc/admin-tweaks.php';
|
|
// Filtre « Statut » sur la liste des utilisateurs
|
|
require_once __DIR__ . '/inc/admin-users-filter.php';
|
|
// Patchs Pods : validation conditionnelle requise, erreurs de sauvegarde
|
|
require_once __DIR__ . '/inc/pods-conditional-required.php';
|
|
require_once __DIR__ . '/inc/pods-custom-simple-decode.php';
|
|
require_once __DIR__ . '/inc/pods-taxonomy-sync.php';
|
|
require_once __DIR__ . '/inc/pods-save-error-handler.php';
|
|
require_once __DIR__ . '/inc/post-title-required.php';
|
|
// Slugs purement numériques → irroutables avec /%category%/%postname%/
|
|
require_once __DIR__ . '/inc/post-slug-guard.php';
|
|
// Helpers partagés des pages d'archives (filtres GET, rubriques, « Autres »)
|
|
require_once __DIR__ . '/inc/archive-filters.php';
|
|
// Helpers de données pour les templates
|
|
require_once __DIR__ . '/inc/post-card-helpers.php';
|
|
require_once __DIR__ . '/inc/single-helpers.php';
|
|
require_once __DIR__ . '/inc/author-helpers.php';
|