Blog

v2.6.2 Jaarabonnement Updated 5 jun. 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ä Compatibel 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
Probeer de 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

Beheer een volwaardige redactionele blog rechtstreeks in Magento — geen WordPress-installatie ernaast, geen externe SaaS, geen extra hosting. Deze module brengt volledig post-, categorie-, auteur-, tag- en comment-beheer in de Magento-admin, met multi-store en multi-language content gescoped per store view, propere SEO-vriendelijke URLs, RSS feed, sitemap providers, REST en GraphQL APIs, en een ingebouwde WordPress-importer om een bestaande blog in één commando over te zetten.

Ontworpen voor handelaars die content als verkoopkanaal behandelen — productlanceringen, koopgidsen, knowledge base, brand storytelling — zonder de operationele overhead van een tweede CMS.

Voor wie

  • Handelaars die hun blog op hetzelfde domein als de winkel willen hosten (één SEO-autoriteit, één analytics stack, één infra)
  • Multi-store / multi-language winkels die elke post, categorie, auteur en meta per store view moeten vertalen
  • Teams die een bestaande WordPress-blog naar Magento migreren zonder posts, auteurs, tags of comments te verliezen
  • Agencies die een door REST/GraphQL gestuurde blog nodig hebben voor headless frontends en mobiele apps

Belangrijkste voordelen

  • Volledige redactionele workflow — posts met rich content, featured image, samenvatting, geplande publicatie, leestijdschatting, view-teller; categorieën met afbeelding; tags via many-to-many pivot; auteurs als eersterangs entiteit met foto, bio, sociale links en slug/meta per store.
  • Multi-store en multi-language out of the box — titels, slugs, beschrijvingen en meta zijn scopable per store view. URLs zien er uit als /{category-slug}/{post-slug} en schakelen automatisch mee wanneer de klant van store wisselt.
  • Native comments met moderatie en anti-spam — drie moderatiemodi (approve all / moderate all / moderate first only), honeypot, rate limiting per IP, optionele reCAPTCHA v3, admin grid met bulk-acties, toggle voor gast-comments.
  • SEO en vindbaarheid — propere URLs per store view, FPC identity tags zodat het opslaan van een post enkel de relevante cache-entries flusht, sitemap providers, RSS 2.0 feed op /blog/rss, full-text MySQL/MariaDB search op titel + samenvatting + content met LIKE fallback en een dedicated /blog/search resultatenpagina.
  • REST API en GraphQL — public-read / admin-write endpoints voor posts, categorieën, auteurs en comments (/rest/V1/wimakeit-blog/*), plus GraphQL queries en een wimakeitBlogCreateComment mutation voor headless frontends.
  • WordPress-import in één commandobin/magento wimakeit:blog:import-wp --file=wp-export.xml mapt auteurs, categorieën, tags, posts en comments, met optionele --download-images en --dry-run.
  • CMS widget — plaats een "Latest Posts" widget waar u wilt, met categoriefilter en aparte toggles voor image/excerpt/date.

Compatibiliteit

  • Magento 2.4.x / Mage-OS equivalent
  • PHP 8.1, 8.2, 8.3
  • Vereist wimakeit/module-core ^3.0 en wimakeit/module-page-builder ^1.4
  • Sequenced automatisch Magento_Widget en Magento_GraphQl
  • Vertalingen meegeleverd: en_US, fr_FR, nl_NL, it_IT, es_ES

Installeer deze module via Composer. Zorg ervoor dat uw auth.json is geconfigureerd met uw Wimakeit-inloggegevens.

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.

Versie
v2.6.2
Licentie
Jaarabonnement
Ondersteuning
12 maanden
Last updated
5 jun. 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ä
Compatibel
Pakket
wimakeit/module-blog

Compatibility checker

Pick your stack to see if this module fits.

Compatibiliteit 4

Ja. Blog is getest tegen Magento Open Source 2.4.4 → 2.4.7, Adobe Commerce op dezelfde lijn, en Mage-OS 2.0+ — op PHP 8.1, 8.2 en 8.3. Het tabblad Specificaties toont de geteste combinaties. Staat uw stack erbij, dan garanderen wij een schone installatie. Wimakeit is een Adobe-gecertificeerd Magento-bureau in Presles, Wallonië (tussen Charleroi en Namen), België — elke module wordt getest op dezelfde matrix die we naar onze enterprise-klanten in België, Frankrijk en Nederland uitrollen.
Ja — volledig. Blog bevat een native Hyvä-compatibele frontend (Tailwind + Alpine.js) en integreert met Hyvä Checkout waar van toepassing. Geen extra fallback-module nodig. Elke Hyvä-gemarkeerde module wordt gebouwd door hetzelfde Wimakeit-team dat Hyvä-migraties in productie uitvoert.
Hyvä Storefront (Tailwind + Alpine.js, server-rendered) en Hyvä Checkout (React-gebaseerd, headless bovenop Magento) zijn twee aparte pakketten. Blog bevat native Hyvä Storefront-compatibiliteit — de frontend wordt gerenderd via Hyvä-templates, zonder Luma-fallback. Hyvä Checkout-integratie wordt geleverd wanneer de module een raakvlak heeft met een checkout-stap (custom betaalinput, voorwaarden-checkbox, ...); anders draait de module server-side zonder Hyvä Checkout-aanpassing. Zie het tabblad Specificaties voor de exacte Hyvä-scope van deze module.
Ja. Blog respecteert het standaard Magento-scope (default / website / store / store_view). Elke configuratie is overschrijfbaar per store view. Frontend-labels gebruiken de standaard Magento-vertaalbestanden — by-default in het Nederlands, Frans en Engels. Valuta's volgen uw Magento-valutaconfiguratie zonder extra werk. Een typische Wimakeit Magento-webshop draait een fr_BE / nl_BE / en_GB-triplet vanuit één backend — Blog is klaar voor deze B2B / internationale setup.

Prijs & licentie 4

€99 — eenmalige betaling, eeuwigdurende licentie, geen abonnementskosten. Inclusief 1 jaar minor updates + e-mailsupport in Nederlands, Frans en Engels, 1 productie + 1 staging/dev-domein. Het verlengen van het supportvenster na jaar 1 is optioneel. Bureau- of multi-store-tarieven worden rechtstreeks onderhandeld via contact@wimakeit.com.
Ja. Blog heeft een live demo op demo.wimakeit.be/module-blog waar u admin en frontend kan verkennen met een echte installatie inclusief sample data. Voor langere evaluaties vraagt u een evaluatielicentie aan via ons contactformulier — de evaluatie dekt dezelfde scope als de betaalde licentie en wordt na aankoop omgezet in een permanente sleutel.
Wij beoordelen terugbetalingsverzoeken geval per geval. Levert de module niet wat aangekondigd? Mail contact@wimakeit.com vanaf het e-mailadres gekoppeld aan uw licentie. Het Wimakeit-terugbetalingsbeleid staat in de algemene voorwaarden en geldt voor elke module op deze marketplace.
Blog wordt verspreid onder een commerciële proprietary licentie — geen MIT, GPL of andere open-source licentie. De PHP-broncode komt na composer require in vendor/wimakeit/ terecht; u kan ze lezen, auditen en lokaal patchen voor uw eigen Magento-installatie. U mag de code NIET herverspreiden, sublicentiëren, op een publiek Composer-register publiceren of doorverkopen. Eén licentie = één productiedomein + één staging/dev-domein (zie de algemene voorwaarden voor de volledige EULA). Wimakeit-modules staan NIET op het publieke packagist.org — ze worden uitsluitend verspreid via het private Composer-register packages.wimakeit.be.

Installatie & updates 6

Voer composer require wimakeit/module-blog:^2.6.0 uit, daarna bin/magento setup:upgrade, bin/magento setup:di:compile en tot slot bin/magento cache:flush. Het tabblad Installation op deze pagina lijst elke configuratiestap (ACL's, crons, defaultwaarden) — een deploy duurt minuten, geen uren. Hulp nodig? Wimakeit biedt Magento-installatiediensten vanuit ons Waalse kantoor (Presles, tussen Charleroi en Namen).
Stap 1: haal een token op via packages.wimakeit.be → Mijn account → Tokens. Stap 2: voeg in de root van uw project aan auth.json toe: {"http-basic": {"packages.wimakeit.be": {"username": "UW-E-MAIL", "password": "UW-TOKEN"}}}. Stap 3: registreer het repo: composer config repositories.wimakeit composer https://packages.wimakeit.be. Stap 4: composer require wimakeit/module-blog:^2.6.0. In CI/CD-pipelines injecteert u COMPOSER_AUTH als JSON-environment-variabele in plaats van auth.json te commit'en.
De meeste merchants zijn binnen 30 minuten live: composer install (1-2 min) → setup:upgrade + di:compile (5-10 min afhankelijk van de stack) → adminconfiguratie (5-15 min volgens het Installation-tabblad) → smoke test op een product of order. Reken meer tijd als u een custom theme heeft dat vergelijkbare templates overschrijft. Het Wimakeit-team heeft deze module geleverd aan B2B- en DTC-shops in heel België.
Blog is ontworpen voor Magento 2.4.x / Mage-OS 2.0+ en heeft geen Magento 1-equivalent. Bij een migratie vanaf Magento 1 neemt het Wimakeit-team de audit, datamigratie en integratie van Blog in de nieuwe backoffice voor zijn rekening, in het kader van een Magento-migratieproject. De overstap van Adobe Commerce naar Mage-OS is transparant voor Blog: zelfde composer require, zelfde modulecode, zelfde databaseschema — geen fork om te onderhouden, geen licentiewijziging.
Updates lopen via uw composer-dependency (exact dit pakket), gehost op het private Composer-register van Wimakeit op packages.wimakeit.be. Elke release wordt aangekondigd op het Changelog-tabblad + het Wimakeit-nieuws en volgt semver — composer update blijft veilig binnen een major.
Alle .phtml-templates zijn overschrijfbaar vanuit uw theme: kopieer het bestand naar app/design/frontend/{UwVendor}/{theme}/Wimakeit_{Module}/templates/ met hetzelfde relatieve pad. Blocks, ViewModels en Helpers worden overschreven via DI-preference in uw eigen custom module — declareer <preference for="Wimakeit\…\OriginalClass" type="UwVendor\Override\Class" /> in etc/di.xml. Layout-XML wordt uitgebreid (voorkeur) of overschreven op de standaard Magento-manier. Wimakeit-modules gebruiken nooit het keyword final op klassen die u redelijkerwijs zou willen override — overschrijven is een first-class scenario, geen hack.

Support & beveiliging 3

Open een ticket via het contactformulier op wimakeit.be of mail contact@wimakeit.com met modulenaam, versie, Magento/Mage-OS-versie en reproduceringsstappen. Fixes verschijnen in de volgende patch. Wimakeit-support antwoordt in het Nederlands, Frans en Engels op werkdagen (CET-uren).
Stuur security-rapporten privé naar contact@wimakeit.com met het voorvoegsel [SECURITY] in het onderwerp — vermeld de module, versie en reproductiestappen. Bevestiging op werkdagen, vermelding in het Changelog op verzoek. Wimakeit is een Belgische BV (besloten vennootschap) onderworpen aan Belgisch en Europees recht inzake privacy en responsible disclosure.
Ja. Blog bewaart uitsluitend data binnen zijn functionele scope, volgt nooit shoppers over verschillende sites, en doet by-default geen enkele externe call. Combineer met de Wimakeit GDPR-module voor cookiebanners en data-subject request forms conform Belgische, Franse en Nederlandse DPA-richtlijnen. De hostingpartners van Wimakeit (OVH Roubaix / Gravelines, Cblue Gembloux) houden alle klantdata binnen de EU.

Over Wimakeit 1

Wimakeit is een Adobe-gecertificeerd Magento-bureau in Presles, Wallonië (tussen Charleroi en Namen), België, dat sinds 2020 Magento- en Mage-OS-webshops bouwt voor klanten in BE / FR / NL. Elke module op deze marketplace draait in productie bij minstens één Wimakeit-klant (we eat our own dogfood). Directe lijn met de ontwikkelaars die de code hebben geschreven, meertalige support (NL / FR / EN), CET-werkuren, geen offshore. Bekijk onze referenties voor het soort Magento-projecten dat wij opleveren.

Iets gevonden dat niet in de FAQ staat?

Meld een bug of stel een vraag — het formulier is voor-ingevuld met deze module.

Een bug melden

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

Een bug gevonden? Laat het ons weten.

Een kort formulier opent in een nieuw tabblad — de modulenaam en uw taal zijn al ingevuld. Beschrijf wat u probeerde, wat misging, en wij komen binnen één werkdag bij u terug.

Een bug melden voor Blog
Module SKU: wimakeit-module-blog · Taal: nl_NL

Hulp nodig?

Ons team helpt u graag met de integratie.

Neem contact op
Planifier un appel