Blog

v2.6.2 Annual Subscription Updated Jun 5, 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…
Hyvä Compatible 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
Try the live demo
  • Updates and support included for 12 months
  • License key delivered immediately by email
  • 30-day money-back guarantee
  • Full documentation included
  • Compatible with Hyvä themes
  • Composer-ready installation

Blog

Run a real editorial blog directly inside Magento — no WordPress side-install, no third-party SaaS, no extra hosting. This module brings full post, category, author, tag and comment management to the Magento admin, with multi-store and multi-language content scoped per store view, clean SEO-friendly URLs, RSS feed, sitemap providers, REST and GraphQL APIs, and a built-in WordPress importer to migrate an existing blog in one command.

Designed for merchants who treat content as a sales channel — product launches, buying guides, knowledge base articles, brand storytelling — without the operational overhead of running a second CMS.

Who it's for

  • Merchants who want their blog hosted on the same domain as the shop (one SEO authority, one analytics stack, one infra to maintain)
  • Multi-store / multi-language stores that need every post, category, author and meta translated per store view
  • Teams migrating an existing WordPress blog into Magento without losing posts, authors, tags or comments
  • Agencies who need a REST/GraphQL-driven blog for headless and mobile-app frontends

Key benefits

  • Full editorial workflow — posts with rich content, featured image, excerpt, scheduled publishing, reading-time estimate, view counter; categories with images; tags via a many-to-many pivot; authors as first-class entities with photo, bio, social links and per-store slug/meta.
  • Multi-store, multi-language out of the box — titles, slugs, descriptions and meta are scopable per store view. URLs read /{category-slug}/{post-slug} and switch automatically when the customer changes store.
  • Native comments with moderation and anti-spam — three moderation modes (approve all / moderate all / moderate first only), honeypot, per-IP rate limiting, optional reCAPTCHA v3, admin grid with bulk actions, guest commenting toggle.
  • SEO and discoverability — clean URLs per store view, FPC identity tags so saving a post flushes only the relevant cache entries, sitemap providers, RSS 2.0 feed at /blog/rss, full-text MySQL/MariaDB search on title + excerpt + content with LIKE fallback and a dedicated /blog/search results page.
  • REST API and GraphQL — public-read / admin-write endpoints for posts, categories, authors and comments (/rest/V1/wimakeit-blog/*), plus GraphQL queries and a wimakeitBlogCreateComment mutation for headless frontends.
  • One-shot WordPress importbin/magento wimakeit:blog:import-wp --file=wp-export.xml maps authors, categories, tags, posts and comments, with optional --download-images and --dry-run.
  • CMS widget — drop a "Latest Posts" widget anywhere with category filter and per-toggle image/excerpt/date options.

Compatibility

  • Magento 2.4.x / Mage-OS equivalent
  • PHP 8.1, 8.2, 8.3
  • Requires wimakeit/module-core ^3.0 and wimakeit/module-page-builder ^1.4
  • Sequences Magento_Widget and Magento_GraphQl automatically
  • Translations shipped: en_US, fr_FR, nl_NL, it_IT, es_ES

Install this module via Composer. Make sure your auth.json is configured with your Wimakeit credentials.

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
License
Annual Subscription
Support
12 months
Last updated
Jun 5, 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

Compatibility checker

Pick your stack to see if this module fits.

Compatibility 4

Yes. Blog is tested against Magento Open Source 2.4.4 → 2.4.7, Adobe Commerce on the same line, and Mage-OS 2.0+ — on PHP 8.1, 8.2 and 8.3. The Specifications tab lists the exact tested combinations. If your stack is in the list, we guarantee a clean install. Wimakeit is an Adobe-certified Magento agency based in Presles (Charleroi / Namur region), Wallonia, Belgium and runs every module against the same matrix we ship to enterprise clients across Belgium, France and the Netherlands.
Yes — fully. Blog ships a native Hyvä-compatible frontend (Tailwind + Alpine.js) and integrates with Hyvä Checkout when applicable. No companion fallback module needed. Every Hyvä-marked module is built and maintained by the same Wimakeit team that ships Hyvä builds for production stores.
Hyvä Storefront (Tailwind + Alpine.js, server-rendered) and Hyvä Checkout (React-based, headless on top of Magento) are two distinct packages. Blog ships native Hyvä Storefront compatibility — its frontend is rendered through Hyvä templates with no Luma fallback. Hyvä Checkout integration is delivered when the module has a checkout-step touchpoint (custom payment input, terms checkbox, etc.); otherwise the module runs server-side without any Hyvä Checkout customisation needed. See the Specifications tab for the exact Hyvä integration scope of this module.
Yes. Blog respects the standard Magento scope (default / website / store / store_view). Every configuration is overridable per store view. Frontend labels use Magento's standard translation files — shipped in French, English and Dutch out of the box. Currencies follow your Magento currency setup with no extra wiring. A typical Wimakeit Magento store runs an fr_BE / nl_BE / en_GB triplet from a single backend — Blog is ready for this B2B / international setup.

Pricing & licensing 4

€99 — one-time payment, perpetual licence, no recurring fees. Includes 1 year of minor updates + email support in French, English and Dutch, 1 production domain + 1 staging/dev domain. Renewing the support window after year 1 is optional. Volume licences are negotiated directly — write to contact@wimakeit.com for agency or multi-store pricing.
Yes. Blog has a live demo on demo.wimakeit.be/module-blog where you can poke around the admin and frontend with a real install pre-populated with sample data. For longer evaluations, request an evaluation licence via our contact form — evaluations cover the same scope as the paid licence and convert to a permanent key on purchase.
We review refund requests case by case. If the module doesn't deliver what was advertised, email contact@wimakeit.com from the address tied to your licence. The refund policy is published on the terms page and applies to every module sold through this marketplace.
Blog is distributed under a commercial proprietary licence — not MIT, GPL or any other open-source licence. The PHP source ships in vendor/wimakeit/ once you composer require the package, so you can read it, audit it, and patch it locally for your own Magento install. You may NOT redistribute it, sublicense it, publish it on a public package registry, or sell it on. One licence = one production domain + one staging/dev domain (see terms for the full EULA). Wimakeit modules are NOT part of Magento's open-source repository on packagist.org — they are distributed exclusively via the private Composer registry packages.wimakeit.be.

Installation & updates 6

Run composer require wimakeit/module-blog:^2.6.0, then bin/magento setup:upgrade, bin/magento setup:di:compile, and finally bin/magento cache:flush. The Installation tab on this page lists every configuration step (ACLs, cron jobs, default values) so a deploy takes minutes, not hours. If you need a hand, Wimakeit offers Magento installation services from our Wallonian office (Presles, between Charleroi and Namur).
Step 1: get a token on packages.wimakeit.be → My account → Tokens. Step 2: at the root of your project add to auth.json: {"http-basic": {"packages.wimakeit.be": {"username": "YOUR-EMAIL", "password": "YOUR-TOKEN"}}}. Step 3: register the repo: composer config repositories.wimakeit composer https://packages.wimakeit.be. Step 4: composer require wimakeit/module-blog:^2.6.0. In CI/CD pipelines, inject COMPOSER_AUTH as a JSON env var instead of committing auth.json.
Most merchants are live within 30 minutes: composer install (1-2 min) → setup:upgrade + di:compile (5-10 min depending on stack size) → admin configuration (5-15 min following the Installation tab) → smoke test on a product or order. Allow extra time if you have a custom theme overriding similar templates. The Wimakeit team has shipped this exact module to B2B and DTC stores across Belgium.
Blog is built for Magento 2.4.x / Mage-OS 2.0+ and has no Magento 1 equivalent. When migrating from Magento 1, the Wimakeit team handles the audit, the data migration and the integration of Blog into the new backend as part of a Magento migration project. Migrating from Adobe Commerce to Mage-OS is transparent for Blog: same composer require, same module code, same database schema — no fork to maintain, no licence change.
Updates ship through your composer dependency (this exact package), hosted on Wimakeit's private Composer repository at packages.wimakeit.be. Each release is announced on the Changelog tab + the Wimakeit news and follows semantic versioning — composer update is safe within a major.
All .phtml templates are overridable from your theme: copy the file into app/design/frontend/{YourVendor}/{theme}/Wimakeit_{Module}/templates/ keeping the same relative path. Blocks, ViewModels and Helpers are overridable via DI preference in your own custom module — declare <preference for="Wimakeit\…\OriginalClass" type="YourVendor\Override\Class" /> in etc/di.xml. Layout XML is extended (preferred) or overridden the standard Magento way. Wimakeit modules never use the final keyword on classes you might reasonably want to override — overriding is a first-class scenario, not a hack.

Support & security 3

Open a ticket through the contact form on wimakeit.be or email contact@wimakeit.com with the module name, version, Magento/Mage-OS version and the steps to reproduce. Fixes ship in the next patch release. Wimakeit support is staffed in French, English and Dutch on business days (CET working hours).
Send security reports privately to contact@wimakeit.com with a clear [SECURITY] subject prefix — please include the module name, version and the steps to reproduce. We acknowledge promptly on business days and credit reporters in the Changelog if they wish. Wimakeit is a Belgian SRL (société à responsabilité limitée) bound by Belgian and EU privacy and disclosure law.
Yes. Blog stores only the data its feature scope requires, never tracks shoppers across sites, and ships zero third-party calls by default. Combine it with the Wimakeit GDPR module to publish cookie banners and data-subject request forms compliant with Belgian, French and Dutch DPA guidance. Wimakeit's EU-based hosting partners (OVH Roubaix / Gravelines, Cblue Gembloux) keep every customer's data inside the EU.

About Wimakeit 1

Wimakeit is an Adobe-certified Magento partner agency based in Presles, Wallonia (between Charleroi and Namur), Belgium, building Magento and Mage-OS stores since 2020 across BE / FR / NL. Every module on this marketplace runs in production on at least one Wimakeit client (we eat our own dog food). Direct line to the developers who built the code, multilingual support (FR / EN / NL), CET business hours, no offshore handoff. See our portfolio for the kind of Magento builds we ship.

Found something not covered by the FAQ?

Report a bug or ask a question — the form is prefilled with this module.

Report a 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).

Found a bug? Tell us about it.

A short form opens in a new tab — the module name and your language are already filled in. Share what you tried, what went wrong, and we will get back to you within one business day.

Report a bug for Blog
Module SKU: wimakeit-module-blog · Language: en_US

Need help?

Our team is available to assist with integration.

Contact us
Planifier un appel