Blog
v2.6.2
Blog
- 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/searchresults page. - REST API and GraphQL — public-read / admin-write endpoints for posts, categories, authors and comments (
/rest/V1/wimakeit-blog/*), plus GraphQL queries and awimakeitBlogCreateCommentmutation for headless frontends. - One-shot WordPress import —
bin/magento wimakeit:blog:import-wp --file=wp-export.xmlmaps authors, categories, tags, posts and comments, with optional--download-imagesand--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 andwimakeit/module-page-builder^1.4 - Sequences
Magento_WidgetandMagento_GraphQlautomatically - 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.
$ 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
| Package | Minimum |
|---|---|
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:
| Resource | Default |
|---|---|
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_userrows - seed of the
wimakeit_blog_post_categorypivot 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_fieldanddefault_sort_directioncolumns onwimakeit_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
| Setting | Default |
|---|---|
| Enable Comments | Yes |
| Moderation Mode | Moderate all |
| Allow Guest Comments | Yes |
| 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 Score | 0.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):
| Setting | Default |
|---|---|
| Default Sort Field | Publish Date (options: Publish Date, Title, Author, View Count, Manual Position) |
| Default Sort Direction | Descending |
Visitors can override the default via the sort tabs on the category page (?sort=field-direction).
Routes and feeds
| URL | Description |
|---|---|
/{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/trackView | View-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
Pricing & licensing 4
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
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). 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. composer require, same module code, same database schema — no fork to maintain, no licence change. composer update is safe within a major. 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
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). 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. About Wimakeit 1
Found something not covered by the FAQ?
Report a bug or ask a question — the form is prefilled with this module.
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 craftedsorting[field]=id,SLEEP(5)--from an authenticated admin no longer reaches the DB. - Path-traversal closed on Category
featured_imageand Authorphoto— the same sanitiser that already protectedPost.featured_image(extracted intoMediaPathSanitizer) now rejects anything that isn't a relative path underwimakeit/blog/on the other two admin Save controllers. - XSS closed in the BreadcrumbList JSON-LD on category pages —
json_encodenow emitsJSON_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, …), usescurlwith 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_NONETadded). - 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. Storedjavascript:/data:URIs can no longer leak into the public profile or the GraphQL resolver. - GraphQL
BlogAuthorresolver lists columns explicitly —emailandadmin_user_idare 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_directionis whitelisted toASC/DESCon 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
contentcolumn when building the page metas (canonical, OG, hreflang, breadcrumbs). The full content is loaded once, by the ViewModel that actually renders it. - GraphQL
BlogCategoriesresolver lists columns explicitly — dropsSELECT c.so featured_image, default_sort_, timestamps are no longer transferred when not requested. - Pagination clamped to 1000 pages on
/blog/searchand/blog/tag/{slug}— blocks?p=999999DoS via deep OFFSET.
DB
- Composite
(tag_id, post_id)index onwimakeit_blog_post_tag— tag-grouped JOINs (category tag pills, sitemap provider, related-by-tag) now resolvepost_idindex-only. - Composite
(category_id, position)index onwimakeit_blog_post— speeds up previous/next-post lookups on the post view. (updated_at)index onwimakeit_blog_post— used by the tag/author sitemap providers'GROUP BY + MAX(updated_at).- Run
bin/magento setup:upgradeafter composer update so the new indexes get created.
Notes
- The constructor of the three admin Save controllers gained one extra dependency (
MediaPathSanitizer);Post/TrackViewgained two (StoreManagerInterface,BotDetector). All auto-injected via DI — nodi.xmlchange 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}declaresrel="canonical"to the same URL the sitemap emits, renders aHome > Author Nametrail and exposesog: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. Priority0.5, change-frequencyweekly. 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 fromwimakeit_blog_author_store. Priority0.5, change-frequencyweekly.
[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 joinswimakeit_blog_tag↔_post_tag↔_post↔_post_categoryand filters published + active posts only. - Tags moved to the top of the post page — the
#tagrow 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 articlesvs30 projets).
[2.5.3] - 2026-05-22
Feature
.blog-tldrcallout 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#EF7013on 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). Restoredlist-style: disc/decimal,padding-left: 1.5remand 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 withposition: 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>with1.,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#EF7013on a 10% orange tint — same treatment as the front-end/fr/checkmo-availability#how-it-worksSommaire.
[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) raisedDateMalformedStringExceptiondeep inPdo\Mysql::formatDate()and surfaced as "Could not save blog post: Failed to parse time string (22/05/2026)…". The admin Post Save now runspublish_datethroughStdlib\DateTime\Filter\Date, which parses with the current locale and returns the MySQL-compatibleY-m-dformat.
[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 FieldandDefault Sort Directionunder 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 viafilter[is_active][eq]=0and a public leak ofauthor.email. - GraphQL:
WimakeitBlogAuthor.emailremoved from the public type.wimakeitBlogCreateCommentnow 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 ashell.jpgwith 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_idsagainst the DB before inserting pivots — orphan rows can no longer be smuggled in via crafted POST. - Admin Author Save validates
admin_user_idagainstadmin_user.user_id. - Post template
<script>blocks renderjson_encodewithJSON_HEX_TAGflags — 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::tagACL resource for the tags CRUD.
Feature
- Tags CRUD in admin under Content > Blog > Tags (listing, edit, slug auto-generated) and
tag_idsmultiselect 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_countdecoupled from the request path — incremented out-of-band via a JS beacon hittingController/Post/TrackView, so Full Page Cache can serve the post page without the synchronousUPDATE. 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/PostViewmemoizes category, author, tags and related posts per request — duplicate calls inside the same render are free now.ViewModel/PostList/TagListno longer pull thecontentmediumtext column for listing queries;getTotalCount()memoized so paged listings don't run the COUNT twice.- GraphQL
BlogPostsresolver inspects the requested fields and only joinsps.contentwhen 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/ListingDataProviderusesCOUNT(DISTINCT main.id)so admin grid pagination no longer drifts from the JOIN multiplier.- WordPress importer: comments are inserted via
insertMultiplein 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_namenow resolves to the store name (was hardcoded).- All admin controllers normalized to
public const ADMIN_RESOURCEand everyexecute()declares aResultInterfacereturn 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/renderupdateUrl 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 usewimakeit/module-admin-dashboard.
Deps
- To keep the dashboard widget, install
wimakeit/module-blog-admin-dashboardalongside 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-builderinstead 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-builderfor 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
LocalizedExceptionon every load — invalid<value>elements removed frometc/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/uploadandwimakeit_blog/category/uploadroutes.
[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 Postswith 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 onpost.category_id(canonical URL); migration patch seeds the pivot from existing data. - Tag persistence from the post form (
tag_idsinput) — 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,wimakeitBlogCommentsand mutationwimakeitBlogCreateComment. - 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_TAGconstant and implementIdentityInterface. - Repository interfaces gained
deleteById()andgetList(SearchCriteriaInterface)to match Magento service-contract expectations. - New Comments settings group under Stores > Configuration > WiMakeIT > Blog > Comments.
Deps
- Sequences
Magento_Widget(CMS widget) andMagento_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 BlogNeed help?
Our team is available to assist with integration.