Blog

v2.6.2 Abonnement annuel Mis à jour le 5 juin 2026

Blog

Module de blog natif pour Magento 2 / MageOS, concu pour offrir une gestion complete des articles et categories directement depuis le back-office, avec un…
Compatible Hyvä Magento 2.4.4 Magento 2.4.5 Magento 2.4.6 Magento 2.4.7 Mage-OS 2.0 Mage-OS 2.1
99,00 €
Essayer la démo en ligne
  • Mises à jour et support inclus pendant 12 mois
  • Clé de licence livrée immédiatement par email
  • Garantie satisfait ou remboursé 30 jours
  • Documentation complète incluse
  • Compatible avec les thèmes Hyvä
  • Installation prête pour Composer

Blog

Animez un véritable blog éditorial directement dans Magento — pas de WordPress en parallèle, pas de SaaS tiers, pas d'hébergement supplémentaire. Ce module apporte la gestion complète des posts, catégories, auteurs, tags et commentaires dans l'admin Magento, avec un contenu multi-store et multi-langue scopé par store view, des URLs propres pour le SEO, un flux RSS, des sitemap providers, des API REST et GraphQL, et un importeur WordPress intégré pour migrer un blog existant en une seule commande.

Pensé pour les marchands qui traitent le contenu comme un canal de vente — lancements produits, guides d'achat, base de connaissances, brand storytelling — sans l'overhead opérationnel d'un second CMS.

À qui ça s'adresse

  • Marchands qui veulent héberger leur blog sur le même domaine que la boutique (une seule autorité SEO, une seule stack analytics, une seule infra)
  • Boutiques multi-store / multi-langue qui doivent traduire chaque post, catégorie, auteur et meta par store view
  • Équipes qui migrent un blog WordPress existant vers Magento sans perdre posts, auteurs, tags ou commentaires
  • Agences qui ont besoin d'un blog piloté par REST/GraphQL pour des frontends headless et applications mobiles

Bénéfices clés

  • Workflow éditorial complet — posts avec contenu riche, image à la une, extrait, publication programmée, estimation du temps de lecture, compteur de vues ; catégories avec image ; tags via pivot many-to-many ; auteurs en entité de premier rang avec photo, bio, liens sociaux et slug/meta par store.
  • Multi-store et multi-langue nativement — titres, slugs, descriptions et meta sont scopables par store view. Les URLs se présentent en /{category-slug}/{post-slug} et s'adaptent automatiquement au changement de store.
  • Comments natifs avec modération et anti-spam — trois modes de modération (approve all / moderate all / moderate first only), honeypot, rate limiting par IP, reCAPTCHA v3 optionnel, grid admin avec actions de masse, toggle pour les commentaires invités.
  • SEO et découvrabilité — URLs propres par store view, identity tags FPC pour ne flusher que les entrées de cache concernées à la sauvegarde, sitemap providers, flux RSS 2.0 à /blog/rss, full-text search MySQL/MariaDB sur titre + extrait + contenu avec fallback LIKE et page de résultats dédiée /blog/search.
  • REST API et GraphQL — endpoints public-read / admin-write pour posts, catégories, auteurs et commentaires (/rest/V1/wimakeit-blog/*), plus des queries GraphQL et une mutation wimakeitBlogCreateComment pour les frontends headless.
  • Import WordPress en une commandebin/magento wimakeit:blog:import-wp --file=wp-export.xml mappe auteurs, catégories, tags, posts et commentaires, avec --download-images et --dry-run optionnels.
  • CMS widget — déposez un widget "Latest Posts" n'importe où, avec filtre par catégorie et toggles individuels image/extrait/date.

Compatibilité

  • Magento 2.4.x / équivalent Mage-OS
  • PHP 8.1, 8.2, 8.3
  • Nécessite wimakeit/module-core ^3.0 et wimakeit/module-page-builder ^1.4
  • Sequence automatiquement Magento_Widget et Magento_GraphQl
  • Traductions livrées : en_US, fr_FR, nl_NL, it_IT, es_ES

Installez ce module via Composer. Assurez-vous que votre auth.json est configuré avec vos identifiants Wimakeit.

Terminal
$ composer require wimakeit/module-blog:^2.6.2
$ bin/magento setup:upgrade
$ bin/magento setup:di:compile

Installation notes

The standard composer require + setup:upgrade + setup:di:compile flow applies. The points below cover what's specific to this module.

Required dependencies

PackageMinimum
wimakeit/module-core^3.0
wimakeit/module-page-builder^1.4

Both are pulled automatically from the Wimakeit registry as long as it is declared in your project's composer.json.

Module sequencing

The module declares a <sequence> on Magento_Widget (for the CMS widget) and Magento_GraphQl (for the GraphQL schema) — no manual action needed, Magento resolves the load order at setup:upgrade.

ACL permissions

After installation, five ACL resources are available under System → Permissions → User Roles, nested under Content:

ResourceDefault
Wimakeit_Blog::post (manage posts)granted to Administrator role only
Wimakeit_Blog::category (manage categories)granted to Administrator role only
Wimakeit_Blog::author (manage authors)granted to Administrator role only
Wimakeit_Blog::tag (manage tags)granted to Administrator role only
Wimakeit_Blog::comment (moderate comments)granted to Administrator role only

A separate Wimakeit_Blog::config lives under Stores → Configuration for module settings access.

Schema patches

setup:upgrade runs the following one-shot migrations the first time the module is enabled. On a large legacy blog they can take a few seconds:

  • backfill of authors from existing post.author_id / admin_user rows
  • seed of the wimakeit_blog_post_category pivot from existing primary categories
  • creation of the MySQL/MariaDB FULLTEXT index on wimakeit_blog_post_store
  • creation of secondary indexes on wimakeit_blog_post_tag(tag_id), wimakeit_blog_post_store(store_id), wimakeit_blog_comment(parent_id), wimakeit_blog_post(author_id) (since 2.4.0)
  • addition of default_sort_field and default_sort_direction columns on wimakeit_blog_category (since 2.5.0)

Configuration

The module ships with sensible defaults. Go to Stores > Configuration > WiMakeIT > Blog only if you want to change them.

Comments

SettingDefault
Enable CommentsYes
Moderation ModeModerate all
Allow Guest CommentsYes
Moderation Notification Email(blank — disabled)
Rate Limit (seconds between comments per IP)30
reCAPTCHA v3 Site Key(blank — disabled)
reCAPTCHA v3 Secret Key(blank)
reCAPTCHA v3 Minimum Score0.5

Moderation Mode options: Approve all (publish immediately) / Moderate all (hold every comment) / Moderate first, then auto-approve (only the visitor's first comment needs approval).

Per-category settings

Each category has its own default sort (Content > Blog > Categories, edit a category):

SettingDefault
Default Sort FieldPublish Date (options: Publish Date, Title, Author, View Count, Manual Position)
Default Sort DirectionDescending

Visitors can override the default via the sort tabs on the category page (?sort=field-direction).

Routes and feeds

URLDescription
/{category-slug}/{post-slug}Post detail page
/{category-slug}Category listing page
/blog/tag/{slug}Tag landing page (all posts carrying the tag)
/blog/author/{slug}Author page
/blog/search?q=… (optional cat={id})Full-text search results, optionally scoped to a category
/blog/rss (optional category_id=X)RSS 2.0 feed
/wimakeit_blog/post/trackViewView-counter beacon (POST, called by the post page JS)
/rest/V1/wimakeit-blog/*REST endpoints (admin ACL required)

REST endpoints all require the matching Wimakeit_Blog::* admin ACL — they are not anonymous. If you need a public read API, expose your own controller backed by a repository that filters is_active = 1.

Featured-image uploads

The Post and Category forms accept JPG, JPEG, PNG, GIF, WEBP up to 2 MB. Uploads are validated by both file extension and actual MIME content (mime_content_type / finfo), so a renamed PHP file is rejected. Saved paths are restricted to pub/media/wimakeit/blog/.

WordPress import (one-shot)

bin/magento wimakeit:blog:import-wp \
    --file=wp-export.xml \
    --store=1 \
    --default-category=2 \
    --download-images \
    --dry-run

Run with --dry-run first to validate the mapping. Drop the flag for the real import. Comments are inserted in batches of 250 rows; attachments are pre-indexed so the importer scales to multi-thousand-post WXR files.

Companion module (optional)

To keep the admin dashboard widget after upgrading from 2.1.x, install alongside:

composer require wimakeit/module-blog-admin-dashboard

The widget was extracted in 2.2.2 so the core blog module stays installable on stores that don't use wimakeit/module-admin-dashboard.

Version
v2.6.2
Licence
Abonnement annuel
Support
12 mois
Dernière mise à jour
5 juin 2026
Magento
Magento 2.4.4 Magento 2.4.5 Magento 2.4.6 Magento 2.4.7 Mage-OS 2.0 Mage-OS 2.1
PHP
PHP 8.1 PHP 8.2 PHP 8.3
Hyvä
Compatible
Package
wimakeit/module-blog

Vérifier la compatibilité

Indiquez votre stack pour vérifier la compatibilité du module.

Compatibilité 4

Oui. Blog est testé sur Magento Open Source 2.4.4 → 2.4.7, Adobe Commerce sur la même ligne, et Mage-OS 2.0+ — en PHP 8.1, 8.2 et 8.3. L'onglet « Spécifications » liste les combinaisons testées. Si votre stack y figure, l'installation est garantie. Wimakeit est une agence Magento certifiée Adobe basée à Presles, en Wallonie (entre Charleroi et Namur) — chaque module est validé sur la même matrice que celle livrée à nos clients enterprise en Belgique, France et Pays-Bas.
Oui — complètement. Blog embarque un frontend natif compatible Hyvä (Tailwind + Alpine.js) et s'intègre avec Hyvä Checkout le cas échéant. Aucun module de compatibilité supplémentaire requis. Chaque module estampillé Hyvä est développé par la même équipe Wimakeit qui réalise les migrations Hyvä pour nos clients en production.
Hyvä Storefront (Tailwind + Alpine.js, rendu serveur) et Hyvä Checkout (React, headless au-dessus de Magento) sont deux packages distincts. Blog embarque une compatibilité Hyvä Storefront native — son frontend est rendu via les templates Hyvä, sans fallback Luma. L'intégration Hyvä Checkout est livrée quand le module a un touchpoint d'étape checkout (input de paiement custom, case CGV, etc.) ; sinon le module tourne côté serveur sans customisation Hyvä Checkout nécessaire. Voir l'onglet Spécifications pour le scope Hyvä exact de ce module.
Oui. Blog respecte le scope Magento standard (default / website / store / store_view). Chaque configuration est surchargeable par store view. Les libellés frontend utilisent les fichiers de traduction Magento standard — livrés en français, anglais et néerlandais d'origine. Les devises suivent la configuration Magento standard, sans câblage supplémentaire. Un store Magento Wimakeit type fait tourner un triplet fr_BE / nl_BE / en_GB depuis un seul back-office — Blog est prêt pour ce setup B2B / international.

Tarification & licence 4

99 € — paiement unique, licence perpétuelle, pas de frais récurrents. Inclut 1 an de mises à jour mineures + support email en français, anglais et néerlandais, 1 domaine production + 1 domaine staging/dev. Le renouvellement du support après 1 an est optionnel. Tarifs agence ou multi-store négociés directement à contact@wimakeit.com.
Oui. Blog dispose d'une démo en ligne sur demo.wimakeit.be/module-blog où vous pouvez explorer l'admin et le frontend avec une installation réelle pré-remplie de données. Pour une évaluation plus longue, demandez une licence d'évaluation via notre formulaire de contact — l'évaluation couvre la même scope que la licence payante et se convertit en clé permanente à l'achat.
Nous étudions les demandes de remboursement au cas par cas. Si le module ne livre pas ce qui est annoncé, envoyez un email à contact@wimakeit.com depuis l'adresse liée à votre licence. La politique de remboursement Wimakeit est publiée sur la page Conditions Générales et s'applique à tous les modules de cette marketplace.
Blog est distribué sous licence commerciale propriétaire — pas MIT, pas GPL, pas open source. Le code PHP est livré dans vendor/wimakeit/ après composer require, donc vous pouvez le lire, l'auditer, et le patcher localement pour votre propre installation Magento. Vous ne pouvez PAS le redistribuer, le sous-licencier, le publier sur un registre Composer public, ou le revendre. 1 licence = 1 domaine production + 1 domaine staging/dev (voir les Conditions Générales pour l'EULA complet). Les modules Wimakeit ne sont PAS sur le packagist.org public — ils sont distribués exclusivement via le registre Composer privé packages.wimakeit.be.

Installation & mises à jour 6

Lancez composer require wimakeit/module-blog:^2.6.0, puis bin/magento setup:upgrade, bin/magento setup:di:compile, et enfin bin/magento cache:flush. L'onglet « Installation » de cette page liste chaque étape de configuration (ACLs, crons, valeurs par défaut) — un déploiement prend quelques minutes, pas des heures. Besoin d'aide ? Wimakeit propose des prestations d'installation Magento depuis notre bureau wallon (Presles, entre Charleroi et Namur).
Étape 1 : récupérez un token sur packages.wimakeit.be → Mon compte → Tokens. Étape 2 : à la racine de votre projet, ajoutez à auth.json : {"http-basic": {"packages.wimakeit.be": {"username": "VOTRE-EMAIL", "password": "VOTRE-TOKEN"}}}. Étape 3 : enregistrez le repo : composer config repositories.wimakeit composer https://packages.wimakeit.be. Étape 4 : composer require wimakeit/module-blog:^2.6.0. Dans les pipelines CI/CD, injectez COMPOSER_AUTH en variable d'environnement JSON pour éviter de commiter auth.json.
La plupart des marchands sont en ligne en 30 minutes : composer install (1-2 min) → setup:upgrade + di:compile (5-10 min selon la taille de la stack) → configuration admin (5-15 min en suivant l'onglet Installation) → smoke test sur un produit ou une commande. Comptez plus de temps si vous avez un thème custom qui override des templates similaires. L'équipe Wimakeit a livré ce module sur de nombreuses boutiques B2B et DTC en Belgique.
Blog est conçu pour Magento 2.4.x / Mage-OS 2.0+ et n'a pas d'équivalent Magento 1. Lors d'une migration depuis Magento 1, l'équipe Wimakeit prend en charge l'audit, la migration de données et l'intégration de Blog dans le nouveau back-office, dans le cadre d'un projet de migration Magento. Passer d'Adobe Commerce à Mage-OS est transparent pour Blog : même composer require, même code module, même schéma de base — pas de fork à maintenir, pas de changement de licence.
Les mises à jour passent par votre dépendance composer (ce package exact), hébergée sur le registre Composer privé Wimakeit packages.wimakeit.be. Chaque release est annoncée sur l'onglet Changelog + les actualités Wimakeit et suit le versioning sémantique — composer update reste sûr à l'intérieur d'une version majeure.
Tous les templates .phtml sont overridables depuis votre thème : copiez le fichier dans app/design/frontend/{VotreVendor}/{theme}/Wimakeit_{Module}/templates/ en respectant le même chemin relatif. Blocks, ViewModels et Helpers s'override via DI preference dans votre propre module custom — déclarez <preference for="Wimakeit\…\OriginalClass" type="VotreVendor\Override\Class" /> dans etc/di.xml. Le XML layout s'étend (préféré) ou s'override de manière standard Magento. Les modules Wimakeit n'utilisent jamais le keyword final sur les classes que vous pourriez raisonnablement vouloir override — surcharger est un scénario de premier ordre, pas un hack.

Support & sécurité 3

Ouvrez un ticket via le formulaire de contact wimakeit.be ou envoyez un email à contact@wimakeit.com avec le nom du module, sa version, votre version Magento/Mage-OS et les étapes pour reproduire. Les correctifs sont livrés dans le prochain patch. Le support Wimakeit répond en français, anglais et néerlandais en jours ouvrables (horaires CET).
Envoyez les rapports privés à contact@wimakeit.com avec le préfixe [SECURITY] dans l'objet — précisez le module, la version et les étapes de reproduction. Accusé de réception en jours ouvrables, mention dans le Changelog sur souhait du déclarant. Wimakeit est une SRL belge (société à responsabilité limitée) soumise au droit belge et européen sur la vie privée et la divulgation responsable.
Oui. Blog ne stocke que les données nécessaires à son périmètre fonctionnel, ne suit jamais les acheteurs entre les sites, et ne fait aucun appel tiers par défaut. Combinez-le avec le module RGPD Wimakeit pour publier les bandeaux cookies et les formulaires de demande d'accès aux données conformes aux guidances DPA belge, française et néerlandaise. Les hébergeurs Wimakeit (OVH Roubaix / Gravelines, Cblue Gembloux) gardent toutes les données en UE.

À propos de Wimakeit 1

Wimakeit est une agence Magento certifiée Adobe basée à Presles, en Wallonie (entre Charleroi et Namur), Belgique, qui construit des boutiques Magento et Mage-OS depuis 2020, pour des clients BE / FR / NL. Chaque module de cette marketplace tourne en production chez au moins un client Wimakeit (eat your own dog food). Ligne directe avec les développeurs qui ont écrit le code, support multilingue (FR / EN / NL), horaires CET, pas d'offshore. Consultez nos références pour voir le type de projets Magento que nous livrons.

Quelque chose n'est pas couvert par la FAQ ?

Signalez un bug ou posez une question — le formulaire est pré-rempli avec ce module.

Signaler un bug

Changelog

Categories: Security, Feature, Fix, Perf, Admin, Deps.

[2.6.0] - 2026-05-25

Security + perf hardening pass following the 2026-05-25 audit. All high-severity security findings + the actionable high-impact perf findings are resolved. No change to public URLs, REST/GraphQL contracts or admin layouts.

Security

  • SQL column-injection closed in every admin grid — the four listing data providers (Post, Author, Category, Comment) now whitelist sort/filter column names. A crafted sorting[field]=id,SLEEP(5)-- from an authenticated admin no longer reaches the DB.
  • Path-traversal closed on Category featured_image and Author photo — the same sanitiser that already protected Post.featured_image (extracted into MediaPathSanitizer) now rejects anything that isn't a relative path under wimakeit/blog/ on the other two admin Save controllers.
  • XSS closed in the BreadcrumbList JSON-LD on category pagesjson_encode now emits JSON_HEX_* flags. A category name containing </script> can no longer break out of the script tag. Same fix already shipped for post pages in 2.4.0.
  • SSRF closed in bin/magento wimakeit:blog:import-wp --download-images — the image downloader now validates the URL scheme, resolves the hostname and rejects private/reserved IPs (cloud metadata, internal services, 127/8, 10/8, …), uses curl with bounded timeouts and no redirect-follow, caps the response at 10 MB, and sanitises the saved filename. The CLI also rejects --file= paths outside the Magento install (BP).
  • XXE mitigated on the WP import XML parser (LIBXML_NONET added).
  • Imported comments are now PENDING regardless of wp:comment_approved — source DBs are untrusted, moderators review each carried-over comment.
  • Comment rate-limiter no longer bypassable when the source IP is unavailable (was returning "not limited", now returns "limited" — fail-closed).
  • Author social URLs sanitised at write-time — only http(s):// is persisted. Stored javascript: / data: URIs can no longer leak into the public profile or the GraphQL resolver.
  • GraphQL BlogAuthor resolver lists columns explicitlyemail and admin_user_id are excluded from the SELECT so they can never leak even if the GraphQL schema is extended.
  • Post-view counter (TrackView) enforces same-origin Origin/Referer in addition to the session debounce. External <img>/<iframe> payloads can no longer inflate view counts cross-site.
  • Category default_sort_direction is whitelisted to ASC / DESC on save.

Perf

  • TrackView is now a single UPDATE (was SELECT-EXISTS + UPDATE) — saves one round-trip per published beacon hit.
  • Post view controller skips the mediumtext content column when building the page metas (canonical, OG, hreflang, breadcrumbs). The full content is loaded once, by the ViewModel that actually renders it.
  • GraphQL BlogCategories resolver lists columns explicitly — drops SELECT c. so featured_image, default_sort_, timestamps are no longer transferred when not requested.
  • Pagination clamped to 1000 pages on /blog/search and /blog/tag/{slug} — blocks ?p=999999 DoS via deep OFFSET.

DB

  • Composite (tag_id, post_id) index on wimakeit_blog_post_tag — tag-grouped JOINs (category tag pills, sitemap provider, related-by-tag) now resolve post_id index-only.
  • Composite (category_id, position) index on wimakeit_blog_post — speeds up previous/next-post lookups on the post view.
  • (updated_at) index on wimakeit_blog_post — used by the tag/author sitemap providers' GROUP BY + MAX(updated_at).
  • Run bin/magento setup:upgrade after composer update so the new indexes get created.

Notes

  • The constructor of the three admin Save controllers gained one extra dependency (MediaPathSanitizer); Post/TrackView gained two (StoreManagerInterface, BotDetector). All auto-injected via DI — no di.xml change is required in consumer projects.

[2.5.6] - 2026-05-25

Feature

  • Author pages now have a canonical + breadcrumbs + Open Graph block — every /blog/author/{slug} declares rel="canonical" to the same URL the sitemap emits, renders a Home > Author Name trail and exposes og:url, og:type=profile, og:title, og:description, og:site_name. Author pages were previously SEO-orphan.

Fix

  • Post breadcrumb shows the full title — the 40-char / em-dash truncation that turned long titles into something like "Pharmamed" in the breadcrumb is gone. The crumb now matches the H1 and the slug visible in the URL.

[2.5.5] - 2026-05-24

Feature

  • Tag pages now in the XML sitemap — every /blog/tag/{slug} is added by a new sitemap item provider, restricted to tags that have at least one active + published post on the current store. Priority 0.5, change-frequency weekly. SEO crawlers can discover the tag landings without a manual sitemap edit.
  • Author pages now in the XML sitemap — same treatment for /blog/author/{slug}: only authors with at least one published post visible on the store, per-store-view slug from wimakeit_blog_author_store. Priority 0.5, change-frequency weekly.

[2.5.4] - 2026-05-22

Feature

  • Tag pills with article counts on every category landing — below the search form, render the active tags for that category as orange pills, each suffixed with a compact numeric badge (e.g. #Magento 25, #Sécurité 6). Sorted by post count DESC. New ViewModel method joins wimakeit_blog_tag_post_tag_post_post_category and filters published + active posts only.
  • Tags moved to the top of the post page — the #tag row sits directly under the hero meta (date / reading time) instead of next to the Share buttons at the bottom. Visitors see the topic at a glance before scrolling.

Admin

  • Category card CTA is now context-aware in three branches — services keep "Learn more", news categories (actualites, news, nieuws, blog) say "Read the article" / "Lire l'article" / "Lees het artikel", every other category (projects, references…) keeps "Read the case study". Same rule extended to the count noun in the hero (30 articles vs 30 projets).

[2.5.3] - 2026-05-22

Feature

  • .blog-tldr callout class — write <div class="blog-tldr"><ul><li>…</li></ul></div> and the "TL;DR" label is auto-prepended, the box gets the brand-orange left border and a light tint, bullets are tightly aligned. No more hand-written <p class="font-semibold">TL;DR</p> header in every article.
  • Inline <code> and CLI <pre> styled in brand orange<code> renders as smaller monospace in #EF7013 on a soft orange tint, matching the marketplace PDP changelog/install code styling. Fenced <pre> blocks get the same tint with a 3 px orange left border and horizontal scroll for long shell one-liners.

Fix

  • Blog content list bullets<ul> / <ol> inside post content lost their bullets after Hyvä's Tailwind preflight reset (list-style: none; padding: 0). Restored list-style: disc / decimal, padding-left: 1.5rem and brand-orange ::marker. Bullets are now visible and properly indented in every post body.

[2.5.2] - 2026-05-22

Feature

  • Sticky table of contents on the left — long-form posts now show a 280 px lateral TOC on desktop (≥ 1024 px), pinned with position: sticky; top: 90px, so readers keep their place while scrolling. Rendered only when the JS detects at least 3 headings. Stacks above the content on tablet/mobile.
  • TOC visual refresh — switched to a numbered <ol> with 1., 2., … prefixes; H3s indented under their parent. White rounded card with subtle border and shadow; hover paints the row light grey; the active section is brand orange #EF7013 on a 10% orange tint — same treatment as the front-end /fr/checkmo-availability#how-it-works Sommaire.

[2.5.1] - 2026-05-22

Fix

  • Admin Tag listing now loads — missing <updateUrl path="mui/index/render"/> on the listing data source made the grid AJAX fall through to the default render endpoint and the UI showed "Something went wrong with processing the default view…". Same patch as the 2.2.4 author/comment fix; Tags were introduced in 2.4.0 and missed it.
  • Post save accepts locale-formatted publish dates — saving a post with a French date picker (22/05/2026) raised DateMalformedStringException deep in Pdo\Mysql::formatDate() and surfaced as "Could not save blog post: Failed to parse time string (22/05/2026)…". The admin Post Save now runs publish_date through Stdlib\DateTime\Filter\Date, which parses with the current locale and returns the MySQL-compatible Y-m-d format.

[2.5.0] - 2026-05-22

Feature

  • Per-category default sort in admin: pick the field (publish date, title, author, view count, manual position) and direction (ASC/DESC) used when a visitor opens the category without an explicit sort.
  • Sort tabs on the category page — Most recent / Oldest / Most read / Title A-Z / Z-A / Author A-Z. Active tab highlighted; pagination links preserve the ?sort= selection.
  • Real category-scoped search — the search input on the category hero now submits to /blog/search?q=…&cat={id} instead of a JS-only filter on the current page. Placeholder is category-aware ("Search in {Category}…") and the results page shows the active scope with a one-click escape to "Search all categories".
  • Locale-aware dates — every blog date (post hero, category cards, related posts, author page, Latest Posts widget) now renders in the store's locale via IntlDateFormatter. A FR store sees "17 mai 2026" instead of "17 May 2026".

Admin

  • New category settings Default Sort Field and Default Sort Direction under Content > Blog > Categories.

[2.4.0] - 2026-05-22

Security

  • REST endpoints under /rest/V1/wimakeit-blog/* now all require the matching admin ACL (previously anonymous). Closes draft-post enumeration via filter[is_active][eq]=0 and a public leak of author.email.
  • GraphQL: WimakeitBlogAuthor.email removed from the public type. wimakeitBlogCreateComment now applies the same post-existence, parent integrity, rate-limit and reCAPTCHA enforcement as the HTTP form via a shared service.
  • Comment submit: every payload is validated (post must exist and be active, parent must belong to the same post and be approved, reply depth capped at 2). Author website URLs are restricted to http(s) schemes both at write time and at display time on author / comment pages.
  • Featured-image uploads: extension whitelist now backed by a real MIME-content check (mime_content_type / finfo), so a shell.jpg with PHP bytes is rejected.
  • Featured-image save path is sanitized to only accept wimakeit/blog/-prefixed relative paths (blocks .. traversal and absolute paths).
  • Admin Post Save now intersects category_ids / tag_ids against the DB before inserting pivots — orphan rows can no longer be smuggled in via crafted POST.
  • Admin Author Save validates admin_user_id against admin_user.user_id.
  • Post template <script> blocks render json_encode with JSON_HEX_TAG flags — closes a stored-XSS path through a crafted post slug.
  • Store switcher rebuilds the redirect URL from the target store's base URL instead of trusting the incoming host.
  • Comment submit no longer leaks raw exception messages to the visitor.
  • New Wimakeit_Blog::tag ACL resource for the tags CRUD.

Feature

  • Tags CRUD in admin under Content > Blog > Tags (listing, edit, slug auto-generated) and tag_ids multiselect on the post form.
  • Public tag page at /blog/tag/{slug} — paginated listing of every post that carries the tag for the current store.
  • Tags rendered on the post view are now clickable links to their tag page.

Perf

  • view_count decoupled from the request path — incremented out-of-band via a JS beacon hitting Controller/Post/TrackView, so Full Page Cache can serve the post page without the synchronous UPDATE. Session-debounced so the same visitor counts once per session.
  • N+1 killed in the category listing: post specs are now batch-loaded for the whole page in one query instead of one per card.
  • getIdentities() on the category and Latest Posts widget no longer issue SQL — they used to JOIN three tables on every FPC cache-tag check, including cache hits.
  • Hreflang generation on the post page batched into one IN (?) lookup per table (was 2 × N queries with N stores).
  • ViewModel/PostView memoizes category, author, tags and related posts per request — duplicate calls inside the same render are free now.
  • ViewModel/PostList / TagList no longer pull the content mediumtext column for listing queries; getTotalCount() memoized so paged listings don't run the COUNT twice.
  • GraphQL BlogPosts resolver inspects the requested fields and only joins ps.content when the query actually asks for it.
  • New DB indexes on wimakeit_blog_post_tag(tag_id), wimakeit_blog_post_store(store_id), wimakeit_blog_comment(parent_id), wimakeit_blog_post(author_id).
  • Ui/DataProvider/Post/ListingDataProvider uses COUNT(DISTINCT main.id) so admin grid pagination no longer drifts from the JOIN multiplier.
  • WordPress importer: comments are inserted via insertMultiple in batches of 250 (was one ORM save per row), and the attachment lookup is pre-indexed once (was O(n) per post).
  • Sitemap provider batches the post fetch in 500-row pages so the cron stays within memory limits on large catalogs.
  • Category and post templates: ~400 lines of inline CSS extracted to view/frontend/web/css/blog.css — smaller FPC payload, browser-cacheable styles, CSP-compatible.

Admin

  • og:site_name now resolves to the store name (was hardcoded).
  • All admin controllers normalized to public const ADMIN_RESOURCE and every execute() declares a ResultInterface return type.

[2.2.4] - 2026-05-19

Fix

  • Admin Authors and Comments grids no longer break on load with the "Something went wrong with processing the default view" error — the listings now declare the mui/index/render updateUrl so bookmark, filter, paging and sorting AJAX calls hit the standard UI renderer instead of resolving to /undefined.

[2.2.2] - 2026-05-12

Admin

  • Dashboard widget extracted to companion module wimakeit/module-blog-admin-dashboard. The main module is now installable on stores that don't use wimakeit/module-admin-dashboard.

Deps

  • To keep the dashboard widget, install wimakeit/module-blog-admin-dashboard alongside this module.

[2.2.0] - 2026-05-09

Feature

  • Per-store builder canvas inside each FR/EN/NL fieldset of the post form. Editors compose post content visually through wimakeit/module-page-builder instead of a raw HTML textarea.

Admin

  • Switched to the shared Wimakeit PageBuilder helpers; persists per-store builder state alongside the rendered HTML.

Deps

  • Requires wimakeit/module-page-builder ^1.4.

[2.1.0] - 2026-05-05

Feature

  • Native Magento Page Builder replaced by wimakeit/module-page-builder for post content. Better multi-store handling and a lighter editor footprint.

[2.0.1] - 2026-03-15

Fix

  • Featured-image fields in post/category/author edit forms now render the existing image instead of staying empty — the fileUploader UI component receives the proper array shape on load.
  • Page Builder / WYSIWYG no longer crashes the admin with a LocalizedException on every load — invalid <value> elements removed from etc/widget.xml (defaults now resolved in the LatestPosts block).
  • Featured-image uploads from the post and category forms no longer 404 — added the missing upload controllers for the wimakeit_blog/post/upload and wimakeit_blog/category/upload routes.

[2.0.0] - 2026-03-10

Feature

  • New Authors entity (tables wimakeit_blog_author + wimakeit_blog_author_store): photo, email, bio, title, per-store slug and meta, social links. Admin CRUD under Content > Blog > Authors and frontend page at /blog/author/{slug}.
  • New Comments with moderation and anti-spam: DB-backed comments, per-post listing, reply threading, honeypot, IP rate limiting, optional reCAPTCHA v3, three moderation modes (approve all / moderate all / moderate first only). Admin grid under Content > Blog > Comments with mass actions (approve / pending / spam / trash / delete). Guest commenting toggle.
  • New CMS widget Blog - Latest Posts with widget title, post limit, category filter and per-toggle image/excerpt/date.
  • New multi-category support via pivot wimakeit_blog_post_category. Primary category stays on post.category_id (canonical URL); migration patch seeds the pivot from existing data.
  • Tag persistence from the post form (tag_ids input) — the pivot existed but was never wired.
  • New view counter on post view (skips bots via User-Agent, skips ?preview=1).
  • Related posts now rank by shared tag overlap first, then same category, then recency (previously same category only).
  • New WordPress import CLI: bin/magento wimakeit:blog:import-wp --file=wp-export.xml [--store=1] [--default-category=X] [--download-images] [--dry-run]. Maps authors, categories, tags, posts, comments.
  • New REST API at /rest/V1/wimakeit-blog/* with public read / admin write for posts, categories, authors, comments plus search endpoints.
  • New GraphQL API with queries wimakeitBlogPost(s), wimakeitBlogCategory(ies), wimakeitBlogAuthor, wimakeitBlogComments and mutation wimakeitBlogCreateComment.
  • New full-text search via MySQL/MariaDB FULLTEXT index on wimakeit_blog_post_store (title + excerpt + content), with automatic LIKE fallback and dedicated /blog/search?q=... results page.

Perf

  • FPC identity tags on Post and Category blocks and models — saving a post or category now flushes only the relevant cache entries instead of the whole page cache.

Admin

  • Post and Category data interfaces expose a CACHE_TAG constant and implement IdentityInterface.
  • Repository interfaces gained deleteById() and getList(SearchCriteriaInterface) to match Magento service-contract expectations.
  • New Comments settings group under Stores > Configuration > WiMakeIT > Blog > Comments.

Deps

  • Sequences Magento_Widget (CMS widget) and Magento_GraphQl (GraphQL schema).

Vous avez trouvé un bug ? Faites-nous-en part.

Un court formulaire s'ouvre dans un nouvel onglet — le nom du module et votre langue sont déjà pré-remplis. Décrivez ce que vous avez tenté, ce qui n'a pas fonctionné, et nous vous répondrons sous un jour ouvré.

Signaler un bug pour Blog
SKU module : wimakeit-module-blog · Langue : fr_FR

Besoin d'aide ?

Notre équipe est disponible pour vous accompagner dans l'intégration.

Contactez-nous
Planifier un appel