Title: MM Post Grid
Author: MM Web
Published: <strong>October 18, 2026</strong>
Last modified: October 18, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/mm-post-grid.svg)

# MM Post Grid

 By [MM Web](https://profiles.wordpress.org/mmwebnet/)

[Download](https://downloads.wordpress.org/plugin/mm-post-grid.0.1.zip)

 * [Details](https://wordpress.org/plugins/mm-post-grid/#description)
 * [Reviews](https://wordpress.org/plugins/mm-post-grid/#reviews)
 *  [Installation](https://wordpress.org/plugins/mm-post-grid/#installation)
 * [Development](https://wordpress.org/plugins/mm-post-grid/#developers)

 [Support](https://wordpress.org/support/plugin/mm-post-grid/)

## Description

MM Post Grid displays your posts, pages or any custom post type in a responsive 
card grid. Add one shortcode and you get a grid that already looks finished, with
sensible spacing, readable typography and a hover state that does not shout.

It is built to be a good neighbour. The grid inherits your theme typeface instead
of forcing its own, every class name is prefixed, no global element is styled, and
there is not a single `!important` in the stylesheet. Nothing is loaded on pages
that do not contain a grid.

**What makes it different**

 * **Genuinely lightweight.** One small stylesheet and, only when you use Load More,
   one small script. No jQuery on the front end, no CSS framework, no icon font,
   no external requests.
 * **Loads nothing where there is no grid.** Assets are registered up front and 
   enqueued only when a grid actually renders.
 * **Theme friendly.** Font family is never set, so the grid picks up your theme
   typeface and only controls size and rhythm. All selectors are scoped to the `.
   mmpg` wrapper.
 * **Accessible by default.** Real heading levels you choose, no duplicate links
   per card, unique accessible names on every Read more link, visible focus rings,
   a live region for Load More, and full support for `prefers-reduced-motion`.
 * **Customisable without CSS.** Over 35 styling settings drive CSS custom properties:
   card layout, hover and image effects, spacing, typography, line clamping, category
   badges, button styles and pagination alignment. Only the values you actually 
   change are printed, so a default site sends no extra CSS at all.
 * **Seven styling templates.** Default, Minimal, Soft, Outline, Dark, Magazine 
   and List. Apply one as a starting point, then fine-tune anything on the Styling
   tab.
 * **Three card layouts.** Image above the text, image beside the text, or text 
   laid over the image. The side-by-side layout only engages when a card is wide
   enough, so it never gets squeezed.
 * **Per grid overrides.** Any setting can be overridden on a single grid through
   a shortcode attribute.
 * **Works without JavaScript.** The Load More control is a real link to the next
   page, so it degrades to normal pagination.
 * **Developer friendly.** Namespaced classes, a documented filter on every piece
   of markup, and no third party dependencies.

**Usage**

    ```
    [mm_post_grid]
    ```

That uses your saved settings. Add attributes to override them for one grid:

    ```
    [mm_post_grid columns="4" posts_per_page="8" pagination="load_more"]
    ```

### Shortcode Attributes

Every attribute is optional. Anything you leave out falls back to your saved setting.

**Query**

 * `post_type` – One or more post types, comma separated. Default: your setting.
 * `posts_per_page` – Number of posts per page, 1 to 48.
 * `orderby` – `date`, `modified`, `title`, `menu_order`, `comment_count`, `rand`
   or `ID`.
 * `order` – `ASC` or `DESC`.
 * `category` – Category slugs or IDs, comma separated.
 * `categories` – Alias of `category`.
 * `tag` – Tag slugs or IDs, comma separated.
 * `taxonomy` – A taxonomy name, used together with `terms`.
 * `terms` – Term slugs or IDs for the taxonomy above.
 * `author` – Author IDs, comma separated.
 * `exclude` – Post IDs to leave out.
 * `offset` – Skip this many posts.
 * `ignore_sticky` – `yes` (default) treats sticky posts like any other post; `no`
   pushes them to the front.

**Layout**

 * `columns` – Desktop columns, 1 to 6.
 * `columns_tablet` – Columns below 1024px, 1 to 6.
 * `columns_mobile` – Columns below 640px, 1 to 6.
 * `gap` – Space between cards in pixels, 0 to 80.
 * `image_size` – Any registered image size.
 * `image_ratio` – `16-9`, `16-10`, `3-2`, `4-3`, `1-1`, `3-4` or `auto`.
 * `pagination` – `none`, `numbers`, `prev_next` or `load_more`.

**Content**

 * `show_image` – `yes` or `no`.
 * `show_title` – `yes` or `no`.
 * `show_date` – `yes` or `no`.
 * `show_author` – `yes` or `no`.
 * `show_category` – `yes` or `no`.
 * `show_excerpt` – `yes` or `no`.
 * `show_read_more` – `yes` or `no`.
 * `image_fallback` – `yes` or `no`, show a placeholder when a post has no featured
   image.
 * `title_tag` – `h2`, `h3`, `h4`, `h5`, `h6`, `p` or `div`. Pick the level that
   fits the page outline.
 * `excerpt_length` – Words, 0 for the untrimmed excerpt.
 * `read_more_text` – Link label.
 * `button_style` – `link`, `button` or `outline`.

**Style**

These switch a class on the grid, so one grid can look different from the site-wide
styling. Colours and sizes stay site-wide on the Styling tab.

 * `card_layout` – `stacked` (image above the text), `horizontal` (image beside 
   the text once the card is wider than 460px) or `overlay` (text over the image).
 * `hover_effect` – `lift`, `shadow`, `border` or `none`.
 * `image_hover` – `zoom`, `none` or `grayscale`.
 * `text_align` – `left` or `center`.
 * `term_style` – `text` or `badge`.
 * `button_size` – `small`, `medium` or `large`.
 * `pagination_align` – `left`, `center` or `right`.
 * `title_lines` – Clamp titles to this many lines, 0 to 5. 0 shows the full title.
 * `excerpt_lines` – Clamp excerpts to this many lines, 0 to 8.

**Wrapper**

 * `class` – Extra class names on the wrapper.
 * `id` – A specific HTML id, useful for anchor links.

**Examples**

    ```
    [mm_post_grid columns="4" posts_per_page="12" pagination="numbers"]

    [mm_post_grid category="news,events" show_excerpt="no" title_tag="h2"]

    [mm_post_grid post_type="portfolio" taxonomy="project_type" terms="print" image_ratio="1-1"]

    [mm_post_grid posts_per_page="9" pagination="load_more" button_style="button"]

    [mm_post_grid card_layout="overlay" columns="2" image_ratio="4-3" title_lines="2"]

    [mm_post_grid card_layout="horizontal" columns="1" term_style="badge"]
    ```

## Installation

 1. Upload the `mm-post-grid` folder to `/wp-content/plugins/`, or install the ZIP 
    through **Plugins  Add New  Upload Plugin**.
 2. Activate the plugin through the **Plugins** screen.
 3. Open **Post Grid** in the admin menu to set your defaults.
 4. Add `[mm_post_grid]` to any post, page, template or widget area.

## FAQ

### Does it work with my theme?

That is the main design goal. The grid never sets a font family, never styles a 
global element, and scopes everything to its own wrapper. If your theme does something
unusual you can turn the stylesheet off completely on the Advanced tab and write
your own.

### Does it need a page builder or block editor?

No. It is a shortcode, so it works in the block editor Shortcode block, in the classic
editor, in a widget, or in a template through `do_shortcode()`.

### What do the styling templates change?

Only the values on the Styling tab. Posts, columns, pagination and card content 
are never touched. A template is a starting point, not a mode: after applying one
you can change any value, and the Templates tab shows the styling as custom from
then on.

### Why is the pagination not using my card colours?

Pagination and the load more button sit on your page rather than on a card, so they
use the button colours and inherit your theme text colour. That way a dark card 
template never makes them unreadable on a light page.

### Is there a Gutenberg block?

Not in 0.1. Rendering is fully separated from the shortcode internally, so a block
is planned as a thin addition without changing any output.

### Can I show a custom post type?

Yes. Set the default on the settings screen, or pass `post_type="portfolio"`. Several
types work too: `post_type="post,page"`.

### Can I use more than one grid on the same page?

Yes, including several paginated grids. Each grid gets its own page query variable
so they do not move together.

### Does Load More work without JavaScript?

The button is a real link to the next page. Without JavaScript, clicking it loads
the next page normally.

### Will it slow my site down?

The stylesheet is small and only loads where a grid renders. Featured image data
is preloaded in one query to avoid a query per card, and the row count query is 
skipped when pagination is off.

### What happens to my settings when I delete the plugin?

Nothing is removed unless you ask for it. Tick the option on the Advanced tab before
deleting if you want the settings row gone.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“MM Post Grid” is open source software. The following people have contributed to
this plugin.

Contributors

 *   [ MM Web ](https://profiles.wordpress.org/mmwebnet/)

[Translate “MM Post Grid” into your language.](https://translate.wordpress.org/projects/wp-plugins/mm-post-grid)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/mm-post-grid/), check
out the [SVN repository](https://plugins.svn.wordpress.org/mm-post-grid/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/mm-post-grid/) by
[RSS](https://plugins.trac.wordpress.org/log/mm-post-grid/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.1

 * Initial release.
 * `[mm_post_grid]` shortcode with per grid attribute overrides.
 * Tabbed settings screen: General, Content, Templates, Styling and Advanced.
 * Seven styling templates applied with one click, extendable through the `mmpg_templates`
   filter.
 * Three card layouts, four hover effects, three image hover effects, category badges,
   outline buttons, line clamping and pagination alignment.
 * Four pagination modes, including a progressively enhanced Load More.
 * Responsive column control for desktop, tablet and mobile.
 * Styling through CSS custom properties, with an option to disable the stylesheet.
 * Full set of filters and actions for developers.
 * Translation ready, ships with a POT file.

## Meta

 *  Version **0.1**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.1 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [blog layout](https://wordpress.org/plugins/tags/blog-layout/)[grid](https://wordpress.org/plugins/tags/grid/)
   [post grid](https://wordpress.org/plugins/tags/post-grid/)[posts](https://wordpress.org/plugins/tags/posts/)
   [shortcode](https://wordpress.org/plugins/tags/shortcode/)
 *  [Advanced View](https://wordpress.org/plugins/mm-post-grid/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/mm-post-grid/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/mm-post-grid/reviews/)

## Contributors

 *   [ MM Web ](https://profiles.wordpress.org/mmwebnet/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/mm-post-grid/)