Changelog

Historique des versions de PipnHub

Dernière version — 1.3.1
v1.3.1 2 changements
  • Fix Admin Import CSV — remplacement destructif : l'application d'un import (admin.inc.php) supprimait toutes les valeurs existantes d'une meta key (ex : Tradker) avant de réinsérer celles du CSV, avec risque de perte de données si le CSV ne reprenait pas 100% des valeurs déjà en base. Le comportement est désormais additif : seules les valeurs absentes de l'existant sont ajoutées (array_diff), aucune valeur déjà présente n'est supprimée
  • Fix Admin Import CSV — aperçu dry-run : le tableau d'aperçu affiche désormais "Valeurs existantes (conservées)" et "Valeurs à ajouter" au lieu de "Valeur actuelle" / "Nouvelle valeur", pour refléter la logique additive
v1.3.0 4 changements
  • BREAKING — Retrait du mécanisme pnh_layout : la meta pnh_layout, le sélecteur "Layout d'affichage" de la metabox "Flags Pip'n'Hub", le routage correspondant dans single.php et les templates single-hub.php / single-channel.php sont retirés. Ce mécanisme ne reliait jamais réellement le template choisi à la donnée de regroupement du même nom (le bloc Clips/Albums ne s'affichait que sur single-default.php, jamais sur single-hub.php) et mélangeait deux responsabilités indépendantes : le choix du template et la donnée de regroupement
  • BREAKING — Retrait du bloc Clips/Albums de single-default.php : ce bloc, codé en dur pour la meta Hub et les slugs de catégorie Clips/Albums, est retiré du template générique. Le regroupement par catégorie est désormais une responsabilité du thème enfant
  • Nouvelle fonction PNH_GetPostsByMetaAndCategory() (lib/posts.inc.php) : généralise PNH_GetPostsByHubAndCategory() à n'importe quelle meta key (Pip, Hub, Channel, ou autre) et n'importe quel slug de catégorie — destinée à être appelée depuis un template de thème enfant routé par catégorie. PNH_GetPostsByHubAndCategory() est conservée en alias de compatibilité (@deprecated)
  • Doc : CLAUDE.md mis à jour — Pip/Hub/Channel documentées comme données de regroupement pures, le déclenchement d'affichage groupé appartenant au thème enfant (catégorie + clé), pas au thème parent
v1.2.9 9 changements
  • Footer — Kahlendar optionnel : nouvelle constante PNH_SIDEBAR_KAHLENDAR_ENABLED (défaut : true) dans parts/sidebar/full-bottom.php — permet à un thème enfant de désactiver le bloc Kahlendar sans dupliquer le fichier ni générer d'appel à l'API kahlendar.com quand désactivé
  • Footer — Blocs configurables : nouvelle constante PNH_SIDEBAR_WIDGETS (array) dans parts/sidebar/full-bottom.php — permet à un thème enfant de choisir la liste et l'ordre des blocs de la grille (défaut inchangé : last-posts, categories, tags, social, about)
  • Footer — Fix doublon newsletter : quand newsletter est inclus manuellement dans PNH_SIDEBAR_WIDGETS, il n'est plus ajouté une seconde fois automatiquement lorsque PNH_SIDEBAR_NEWSLETTER_FULLWIDTH est à false
  • Widget "à propos" : nouvelle constante PNH_WIDGET_ABOUT_IMAGE dans widget-about.php — affiche une image optionnelle au-dessus du texte, indépendante du logo du site
  • Home — Grille images carrées : nouveau paramètre force_columns dans parts/front-page/posts-grid.php — permet de désactiver le remap automatique de colonnes (3→5, 4→6, 5→8) sur les blocs 100% carrés, pour conserver un nombre de colonnes fixe si besoin
  • Fix FOUC (flash au chargement) : PNH_Deferred_Styles() (lib/setup.inc.php) sépare désormais le CSS critique (variables, reset, base, layout, child-variables) chargé en <link rel="stylesheet"> bloquant classique, du CSS non-critique conservé en preload différé — élimine le flash de contenu non stylé au premier paint
  • Fix cascade couleurs enfant : suppression des @import redondants dans assets/css/pipnhub.css — ce fichier réimportait variables.css, reset.css, base.css, layout.css, components.css, utilities.css, article.css, loading.css et header.css en interne, via un chemin relatif pointant toujours vers les fichiers du thème parent. Chargé en dernier dans la cascade, il écrasait systématiquement la surcharge des couleurs d'un thème enfant (variables.css enfant) juste après le premier affichage
  • Fix breadcrumb — catégories imbriquées : parts/components/breadcrumb.php remonte désormais toute la chaîne des catégories parentes via get_ancestors() (pages catégorie et articles) — un article dans une catégorie fille affiche Accueil / Catégorie mère / Catégorie fille / Titre au lieu d'ignorer la catégorie mère
  • Fix cartes — effet de survol : suppression du transform: scale(...) au survol des images (post-card, hero-image, spotlight-image, post-list-image) dans components.css et components.spaced.css — le zoom rognait visuellement les vignettes au survol. Suppression également du transform: translateY(-4px) sur .post-card:hover (effet de soulèvement de la carte) ; l'ombre portée et la bordure d'accent au survol sont conservées
v1.2.8 8 changements
  • Single — Layout par post : nouvelle meta pnh_layout permettant à un post de charger un template d'affichage différent (parts/single/single-{layout}.php), sur le même principe que le routeur de pages (page.php). single.php route désormais dynamiquement via locate_template(), avec fallback sur single-default.php si la meta est vide ou si le template n'existe pas
  • Single — Layout par post : nouveau champ <select> dans la metabox "Flags Pip'n'Hub" (PNH_PostFlagsMetaboxRender) pour choisir le layout (Défaut, Hub, Channel), sauvegardé via PNH_PostFlagsSaveMeta
  • Single — Nouveaux templates : single-hub.php et single-channel.php créés (affichage basique du contenu du post, à enrichir ultérieurement)
  • Meta Channel : nouvelle meta de regroupement de posts, même logique que Hub, déclarée via register_post_meta
  • Liens externes : nouvelles meta keys Wikipedia, Genius, Imdb, Discogs (un seul lien par plateforme), déclarées via register_post_meta
  • Liens externes : nouveau groupe Liens dans PNH_GetGroups() pour l'export/import CSV des champs personnalisés
  • Liens externes : nouveau fichier parts/single/article-source.php affichant les liens renseignés (non encore intégré dans les templates single)
  • Fix Admin Custom Fields : l'export CSV (admin_post_pnh_export_csv) utilisait un tableau $groups codé en dur, resté désynchronisé de PNH_GetGroups() depuis le refactor de la 1.2.3 — il pointe maintenant vers PNH_GetGroups(), garantissant que tout nouveau groupe (dont Liens) est disponible à l'export
v1.2.7 6 changements
  • Blocs bilingues : le shortcode [lang] est remplacé par un attribut natif Gutenberg (pnhLang) — chaque bloc dispose désormais d'un sélecteur FR / EN / Aucune dans le panneau latéral de l'éditeur, sans quitter l'expérience Gutenberg (liens, images et tous les blocs natifs sont pleinement supportés)
  • Blocs bilingues : nouveau fichier assets/js/lang-editor.js — extension Gutenberg chargée uniquement dans le backoffice via enqueue_block_editor_assets
  • Blocs bilingues : les blocs marqués sont visuellement identifiés dans l'éditeur par une bordure colorée (bleu France pour FR, bleu marine pour EN)
  • Blocs bilingues : le rendu front est identique à l'ancien shortcode — deux blocs consécutifs sont groupés côte à côte dans un wrapper flex pnh-lang-group--2, un bloc isolé dans pnh-lang-group--1
  • Setup : enqueue du script éditeur pnh-lang-editor avec ses dépendances Gutenberg (wp-blocks, wp-hooks, wp-element, wp-block-editor, wp-components, wp-compose)
  • Suppression : shortcode [lang], variable globale $pnh_lang_pending et fonction PNH_LangShortcode retirés de utils.inc.php
v1.2.6 8 changements
  • FontAwesome : le subset CSS et les polices woff2 sont désormais auto-hébergés dans le thème (assets/css/fa7sub.css, assets/font/) — suppression de la dépendance au CDN externe cdn.skwizd.com
  • Setup : les constantes PNH_FONTAWESOME_VERSION et PNH_FONTAWESOME_CDN_PATH mises à jour pour pointer vers les assets locaux (version 7.2.sub)
  • Setup : fix regex cache headers — les assets versionnés via query string (?ver=x) sont désormais correctement détectés par le filtre Cache-Control
  • Setup : suppression des preconnect / dns-prefetch vers cdn.skwizd.com et googletagmanager.com (commentés)
  • Footer : URL du script de partage Reziztanz mise à jour vers reziztanz.org/share.js
  • Footer : URL du script GoBots mise à jour vers bots.krafsht.com/call.js — suppression de l'ancienne dépendance cdn.skwizd.com
  • Footer : suppression du bloc cartouche Reziztanz (#cartouche + cdn.reziztanz.org/cartouche.js)
  • Tradker : URL des logos boutiques mise à jour vers skwizd.com/img/ (ancienne URL cdn.skwizd.com/zzz/shops/ supprimée)
v1.2.5 3 changements
  • Admin Import CSV : détection du groupe par intersection — les colonnes inconnues du CSV sont désormais ignorées silencieusement (plus d'erreur si le fichier contient des colonnes supplémentaires comme Amazon, Fnac, etc.)
  • Admin Import CSV : la position des colonnes est calculée par nom (plus par index), ce qui garantit la lecture correcte même si l'ordre ou le nombre de colonnes varie
  • Admin Import CSV : les erreurs "post introuvable" sont séparées des erreurs fatales — elles s'affichent dans une notice warning avec le nombre de lignes ignorées et un lien dépliable listant les IDs concernés
v1.2.4 3 changements
  • PIP MESH : nouveau module de suggestion de maillage interne (pipmesh.inc.php) — scanne tous les posts publiés et détecte les opportunités de liens internes en croisant les tags et catégories du site avec le contenu de chaque article
  • PIP MESH : déclenchement manuel via un bouton "Lancer le scan" (appel AJAX sécurisé par nonce), résultats affichés dans un tableau avec lien "Éditer" direct vers chaque post concerné
  • PIP MESH : aucune modification automatique — l'outil est purement suggérateur
v1.2.3 13 changements
  • Admin Custom Fields : export CSV par groupement depuis la page Champs PNH (bouton "Exporter CSV", via admin-post.php, avec nonce)
  • Admin Custom Fields : import CSV avec aperçu dry-run et confirmation avant application — détection automatique du groupe depuis les colonnes, support des valeurs multiples séparées par |
  • Admin Custom Fields : les requêtes SQL méta sont factorisées dans PNH_GetMetaKeys() et PNH_GetMetaDuplicates() (plus de duplication entre la page admin et l'endpoint AJAX)
  • Admin Custom Fields : les groupements sont centralisés dans PNH_GetGroups() (partagés entre affichage, export et import)
  • Admin Custom Fields : affichage des valeurs multiples par meta key (une <code> par valeur)
  • Admin Custom Fields : fix HTML — la section Meta Keys est correctement incluse dans le .wrap WordPress
  • Admin Redirections : wp_date() utilisé à la place de date() pour respecter la timezone WordPress
  • Admin Redirections : filtrage de la liste effectué une seule fois avant la boucle d'affichage (fix doublon de filtre)
  • Admin Recherche articles : nonce AJAX ajouté sur pnh_search_posts (fix sécurité)
  • Admin Flags : sanitize_key() utilisé pour construire la clé d'option (au lieu de esc_attr())
  • Admin Comptage mots : traitement par lots de 200 articles pour éviter les memory exhaustion sur les grandes bases
  • Sécurité : correction de sorties non échappées dans plusieurs fichiers (wp_kses_post() ou esc_html() selon le contexte)
  • API : .htaccess simplifié — les endpoints sched.json.php et stats.json.php sont autorisés via une exception FilesMatch directe (suppression du bloc séparé redondant)
v1.2.2 9 changements
  • SEO : les schemas JSON-LD FAQ, VideoObject et Product ne sont plus injectés en doublon quand RankMath ou Yoast est actif — VideoObject et Product sont conservés uniquement si les meta keys Youtube ou Tradker sont présentes sur l'article
  • Setup : chargement conditionnel du CSS et JS du formulaire de contact (form-feedback.css / form-feedback.js) uniquement sur la page contact, avec handle pnh-bundle enregistré pour résoudre les dépendances
  • Setup : les meta keys Pip, Hub, Youtube et Tradker sont enregistrées en REST API avec auth_callback (remplacement des anciennes clés PIP/HUB typées integer sans protection)
  • Table des matières : fix — l'injection d'id= sur les titres préserve désormais le HTML interne de la balise Hx (<strong>, <em>…) au lieu de le supprimer
  • Table des matières : fix — la détection "titre déjà pourvu d'un id=" est précise au titre concerné (plus de faux positif sur n'importe quel Hx du contenu)
  • Footer : l'année de copyright de début est paramétrable via le customizer WordPress (pnh_copyright_year)
  • Formulaire contact : nonce désanitisé proprement avant vérification (sanitize_text_field + wp_unslash)
  • Sécurité : sorties echo $notice sécurisées avec wp_kses_post() dans admin.inc.php et sitemap.inc.php ; _e() remplacé par esc_html_e() dans taxonomy.inc.php
  • Remote / Kahlendar : remplacement des opérateurs nullsafe (??) par des isset() pour compatibilité PHP 7 ; indentation uniformisée
v1.2.1 7 changements
  • Newsletter : le script JS est désormais un fichier externe, il n'est plus injecté en inline dans les pages
  • SEO : le logo utilisé dans Schema.org est maintenant le logo configuré dans WordPress (Apparence → Personnaliser)
  • Mention IA (Rediacteur) : si la meta rediacteur est renseignée sur un article, une mention "rédigé avec l'assistance de l'IA" s'affiche automatiquement avec le lien source
  • Sitemap : limite réduite à 10 000 posts par fichier (conformité recommandations Google)
  • Sécurité : cookie captcha avec SameSite: Strict, clés API et URL hardcodées supprimées et remplacées par des constantes
  • Mise à jour automatique : URL du serveur de mise à jour changée vers www.pipnhub.com
  • PIPNEST : le thème supporte nativement la structure PIPNHEST pour les sous-domaines et domaines externes
v1.2.0 2 changements
  • Admin : nouvelle page "Redirections 301" pour créer et gérer des redirections sans plugin
  • Admin : la page Meta Keys est beaucoup plus rapide sur les gros sites (une seule requête SQL au lieu d'une par article)
v1.1.9 3 changements
  • Shortcode [lang] : permet d'afficher des blocs bilingues côte à côte dans les articles — [lang code="fr"]...[/lang][lang code="en"]...[/lang]
  • Shortcode [hidden] : masque visuellement un bloc de contenu, révélable au clic, mais reste présent dans le DOM pour Google
  • Fix : le widget Kahlendar pouvait provoquer des timeouts à cause d'une URL incorrecte (redirection manquante côté serveur distant)
v1.1.8 1 changement
  • Grilles : les pages catégorie, tag, auteur et les résultats de recherche s'adaptent maintenant automatiquement au format carré des images, comme la home page depuis la 1.1.7
v1.1.7 1 changement
  • Grilles images carrées : quand tous les articles d'un bloc ont une image carrée, la grille passe automatiquement en mode grid-all-square avec plus de colonnes pour mieux tirer parti de l'espace
v1.1.6 4 changements
  • Widget Kahlendar : nouveau widget affichant les éphémérides du jour (saints, anniversaires, événements) via l'API kahlendar.com
  • SEO admin : interface de configuration SEO par catégorie refactorisée avec variables cliquables et palette d'aide
  • Reziztanz : intégration du script de partage Reziztanz dans le footer
  • Page contact HEI : nouveau template de formulaire de contact alternatif
v1.1.4 *0.1.4 → 1.1.x* 6 changements
  • Thème enfant : le thème est maintenant conçu pour être surchargé proprement depuis un thème enfant — chaque fichier CSS est chargé individuellement pour permettre la surcharge par cascade
  • Home page modulaire : la page d'accueil est maintenant un orchestrateur configurable (parts/front-page/front-page.php) à surcharger dans le thème enfant avec les blocs souhaités (posts-grid, posts-list, posts-remote, hero-featured, spotlight-grid)
  • Routeur de pages amélioré : les pages peuvent désormais choisir leur template via un custom field Template sans dépendre du slug
  • Modules distants : ajout de remote.inc.php (appels API) et game.inc.php
  • Nouveaux widgets : categories-simple, last-posts-simple, links, pages
  • Nouveaux templates de page : archive-grid, latest-modified, latest-published, latest-random, selektroma
v1.1.2 *0.1.2 → 0.1.x* 4 changements
  • Tri par date de modification : les blocs de la home peuvent maintenant être triés par modified (date de dernière mise à jour) en plus de date
  • Contrôles de tri : les boutons de tri sur la home sont réactivés et correctement synchronisés avec l'état initial rendu par PHP
  • Admin "Articles Courts" : nouvelle page listant les articles dont le contenu est inférieur à un seuil de mots configurable (défaut : 500)
  • Nouveaux templates de page : archive-grid, latest-modified, latest-published, latest-random
v0.0.8 1 changement
  • Images carrées : les miniatures carrées ne sont plus déformées dans les grilles — détection automatique du ratio et affichage non recadré
v0.0.7 Initial release 8 changements
  • Architecture modulaire WordPress (lib/ : setup, posts, display, SEO, sitemap, admin, update...)
  • Système de design CSS avec variables centralisées — 3 couleurs à changer pour tout personnaliser
  • Templates complets : home, single, page, category, tag, author, search
  • Composants réutilisables : breadcrumb, table des matières, articles similaires, widgets sidebar
  • SEO avancé : Schema.org, Open Graph, sitemaps XML, robots.txt
  • API privée avec authentification par clé (/api/sched, /api/stats)
  • Fonts auto-hébergées (FugazOne + Roboto Condensed), lazy loading, headers de sécurité HTTP
  • Support multi-langue fr_FR / en_GB