MPRO Portfolio releases
A complete portfolio / case-study management system for WordPress, with custom card styles, Elementor template support, and Rank Math SEO integration. Part of the MPRO plugin suite.
by Sayid Moghadam · github.com/moghadam-pro/portfolio-wp-plugin · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/moghadam-pro/portfolio-wp-plugin/archive/refs/heads/main.zipReadme
MPRO Portfolio
A structured WordPress portfolio and case-study manager with reusable card styles, native archives, Elementor integration, shortcodes, REST-ready metadata, and Rank Math SEO support.
Current version: 1.1.0
Release date: July 1, 2026
License: GPL-2.0-or-later
Overview
MPRO Portfolio adds a dedicated Portfolio content type to WordPress while preserving the familiar post-editing workflow. Each portfolio item can contain full editor content, a native Featured Image, an independent Cover Image, structured project metadata, categories, tags, display settings, and optional Elementor templates.
The plugin is designed for:
- Product design case studies
- UI/UX portfolios
- Digital product showcases
- Agency work archives
- Selected work sections on landing pages
- Project libraries that need structured metadata
Version 1.1.0 introduces a rebuilt architecture focused on predictable WordPress behavior, maintainability, migration safety, and removal of duplicated taxonomy menus.
Table of Contents
- Key Features
- Requirements
- Installation
- Updating from an Earlier Build
- Admin Menu Architecture
- Portfolio Content Model
- Built-in Card Styles
- Styles Settings
- Shortcodes
- PHP Template Helpers
- Elementor Integration
- Rank Math SEO Integration
- Single and Archive Templates
- Theme Overrides
- URLs and Rewrite Rules
- REST API and Metadata
- Admin List Features
- Data Compatibility and Migration
- Data Safety and Uninstall Behavior
- Project Structure
- Testing and Verification
- Staging Acceptance Checklist
- Known Verification Limits
- Development Workflow
- Versioning
- Changelog
- Security
- License
Key Features
WordPress-native portfolio management
- Dedicated public
mpro_portfoliopost type - Full block/classic editor content support
- Excerpt support
- Featured Image support
- Revisions
- Author, comments, trackbacks, custom fields, and page attributes
- Public archive and single portfolio pages
- REST API support
Structured project metadata
- Short description
- Separate Cover Image
- Client or company
- External project URL
- Implementation date
- Structured duration value and unit
- Role in project
- Repeatable tools
- Repeatable collaborators with name, role, and URL
- Repeatable custom metadata rows
- Featured portfolio flag
- Per-item card style
- Per-item single template
Taxonomies
- Hierarchical Portfolio Categories
- Non-hierarchical Portfolio Tags
- Public taxonomy archives
- REST-enabled terms
- Admin filters and list-table integration
Frontend presentation
- Three built-in card styles
- Built-in single portfolio template
- Built-in archive and taxonomy template
- Responsive grid rendering
- Manual portfolio selection
- Featured portfolio queries
- Category and tag filtering
- Pagination
- Theme template overrides
- Optional Elementor saved-template rendering
Integrations
- Elementor Portfolio Grid widget
- Rank Math and Rank Math PRO compatibility
- Rank Math replacement variables
- REST-ready metadata
- PHP helper functions for theme development
Requirements
| Requirement | Minimum / Status |
|---|---|
| WordPress | 6.0 or newer |
| PHP | 7.4 or newer |
| Elementor | Optional |
| Rank Math SEO | Optional |
| Rank Math SEO PRO | Optional |
The plugin remains operational when Elementor or Rank Math is not installed or inactive.
Installation
Install from a ZIP file
- Download the plugin ZIP package.
- In WordPress, open Plugins → Add New Plugin → Upload Plugin.
- Select the ZIP file.
- Click Install Now.
- Activate MPRO Portfolio.
- Open Portfolio → Styles and review the default display settings.
- Create a test portfolio item.
- If portfolio URLs return a 404 response, open Settings → Permalinks and click Save Changes once.
Manual installation
- Extract the package.
- Upload the
mpro-portfoliodirectory to:
/wp-content/plugins/
- Activate MPRO Portfolio from the WordPress Plugins screen.
Updating from an Earlier Build
Before replacing an earlier MPRO Portfolio build:
- Create a full database backup.
- Back up the existing plugin directory.
- Deactivate the previous build.
- Upload version 1.1.0.
- Choose Replace current with uploaded when WordPress displays the replacement prompt.
- Activate the new version.
- Open Settings → Permalinks and save once.
- Verify the Staging Acceptance Checklist.
Version 1.1.0 includes compatibility readers for metadata created by:
- The earlier MPRO Portfolio build
- A compatible alternative 1.0.x build using
_mpro_pf_*metadata keys
When an existing portfolio item is saved, the plugin writes the canonical version 1.1.0 metadata structure.
Admin Menu Architecture
The admin menu is intentionally controlled by one component only.
WordPress automatic menu registration is disabled for:
- The Portfolio post type
- Portfolio Categories
- Portfolio Tags
The plugin then creates one top-level Portfolio menu and exactly five submenus:
- All Portfolio
- Add Portfolio
- Tags
- Categories
- Styles
This single-owner architecture prevents the duplicated Categories and Tags issue that can occur when automatic and manual submenu registration are mixed.
The plugin targets the fourth visible admin-menu position and attempts to place Portfolio before another menu containing mpro in its slug.
Portfolio Content Model
Native WordPress fields
| Field | Description |
|---|---|
| Title | Portfolio or case-study title |
| Editor content | Full project content using normal WordPress editing tools |
| Excerpt | Optional summary and fallback card description |
| Featured Image | Native WordPress thumbnail |
| Publish date | Native WordPress publication date |
| Author | Native WordPress author |
| Revisions | Native WordPress revision history |
| Comments | Optional native comments |
| Page attributes | Supports menu order and related attributes |
MPRO project fields
| Field | Storage type | Description |
|---|---|---|
| Short Description | String | Concise project summary used by cards and SEO variables |
| Cover Image | Attachment ID | Independent project cover; falls back to Featured Image when empty |
| Client or Company | String | Client, organization, or product owner |
| Project URL | URL | External link to the project |
| Implementation Date | Date | Date the project was implemented or delivered |
| Duration Value | Numeric string | Project duration amount |
| Duration Unit | String | Days, weeks, months, or years |
| Role | String | The author’s role in the project |
| Tools | Array | Repeatable list of tools used |
| Collaborators | Array | Repeatable name, role, and URL entries |
| Additional Details | Array | Repeatable label and value rows |
| Featured | Boolean | Marks the project for featured queries |
| Card Style | String | Per-item card presentation override |
| Single Style | String | Per-item single-page template override |
Canonical metadata keys
_mpro_portfolio_short_description
_mpro_portfolio_cover_id
_mpro_portfolio_client
_mpro_portfolio_project_url
_mpro_portfolio_implementation_date
_mpro_portfolio_duration_value
_mpro_portfolio_duration_unit
_mpro_portfolio_role
_mpro_portfolio_tools
_mpro_portfolio_collaborators
_mpro_portfolio_meta_details
_mpro_portfolio_featured
_mpro_portfolio_card_style
_mpro_portfolio_single_style
Built-in Card Styles
Version 1.1.0 includes three reusable card styles:
| Identifier | Name | Intended use |
|---|---|---|
clean |
Clean | Minimal, balanced portfolio grids |
editorial |
Editorial | Case-study and content-led layouts |
immersive |
Immersive | Image-forward featured work sections |
A card uses the Cover Image first. When no Cover Image is set, it falls back to the native Featured Image.
Card style priority:
- Explicit style passed by shortcode, PHP, or Elementor
- Per-item card style
- Global default card style
An explicitly enabled Elementor saved template can also become a card style using an internal identifier such as:
elementor:123
Styles Settings
Open Portfolio → Styles to configure:
- Default Card Style
- Archive Card Style
- Archive Columns
- Default Single Template
- Elementor saved templates explicitly allowed as card styles
Elementor templates are not automatically exposed as card styles. An administrator must opt in to each template on the Styles screen. This prevents unrelated Elementor templates from appearing in portfolio style selectors.
Published Elementor templates can be selected as single-page templates without being enabled as card templates.
Shortcodes
Main portfolio grid
[mpro_portfolio]
Default behavior:
- Nine published items
- Ordered by publish date
- Descending order
- Three desktop columns
- Two tablet columns
- One mobile column
- Global or per-item card style
Shortcode attributes
| Attribute | Default | Accepted values | Description |
|---|---|---|---|
ids |
Empty | Comma-separated post IDs | Manually selected items; supplied order is preserved |
featured |
false |
true / false |
Restrict results to featured portfolio items |
category |
Empty | Comma-separated slugs or term IDs | Filter by Portfolio Category |
tag |
Empty | Comma-separated slugs or term IDs | Filter by Portfolio Tag |
style |
Empty | clean, editorial, immersive, or an enabled Elementor style |
Force one card style; empty uses item/global resolution |
columns |
3 |
1–6 |
Desktop columns |
columns_tablet |
2 |
1–4 |
Tablet columns |
columns_mobile |
1 |
1–2 |
Mobile columns |
count |
9 |
1–100 or -1 |
Number of items; -1 returns all matches |
posts_per_page |
Empty | Same as count |
Compatibility alias for count |
orderby |
date |
date, implementation_date, title, menu_order, rand, modified, ID |
Query ordering field |
order |
DESC |
ASC / DESC |
Query direction |
pagination |
false |
true / false |
Enable query-string pagination |
page_var |
mpro_page |
Valid query-variable name | Unique query parameter for pagination |
Examples
Latest portfolio items
[mpro_portfolio count="9" style="clean" columns="3"]
Manual homepage selection
[mpro_portfolio ids="12,45,67" style="editorial" columns="3"]
The order of the supplied IDs is preserved.
Featured work
[mpro_portfolio featured="true" count="6" style="immersive" columns="2"]
Filter by category
[mpro_portfolio category="product-design" count="12"]
Filter by category and tags
[mpro_portfolio category="product-design" tag="saas,fintech" count="12"]
When both category and tag filters are present, they are combined with an AND relationship.
Order by implementation date
[mpro_portfolio orderby="implementation_date" order="DESC" count="12"]
Show all matching items
[mpro_portfolio category="case-study" count="-1"]
Enable pagination
[mpro_portfolio count="12" pagination="true" page_var="work_page"]
Use a unique page_var when multiple paginated grids appear on the same page.
Featured compatibility shortcode
[mpro_portfolio_featured]
Without explicit IDs, this displays six featured portfolio items.
Manual selection is also supported:
[mpro_portfolio_featured ids="12,45,67" style="editorial"]
Single card shortcode
[mpro_portfolio_single id="123" style="clean"]
Compatibility aliases
The following shortcode names are registered:
[mpro_portfolio]
[mpro_portfolio_grid]
[mpro_portfolio_featured]
[mpro_portfolio_single]
PHP Template Helpers
The plugin exposes public helper functions for themes and custom templates.
Return one card
$card = mpro_portfolio_get_card( 123, 'immersive' );
echo $card;
Print one card
mpro_portfolio_the_card( get_the_ID(), 'editorial' );
Return a grid
$grid = mpro_portfolio_get_grid(
array(
'category' => 'product-design',
'style' => 'clean',
'columns' => 3,
'count' => 9,
)
);
echo $grid;
Print a manually curated grid
mpro_portfolio_the_grid(
array(
'ids' => array( 12, 45, 67 ),
'style' => 'editorial',
'columns' => 3,
'columns_tablet' => 2,
'columns_mobile' => 1,
)
);
Passing an empty card style allows the item/global style resolution to run. Passing item explicitly requests the per-item style and then falls back to the global default.
Elementor Integration
When Elementor is active, the plugin registers:
MPRO Portfolio → Portfolio Grid
The widget uses Elementor’s current widget registration hook:
elementor/widgets/register
Widget sources
- Latest Portfolio
- Manual Selection
- Featured Portfolio
Read the full README on GitHub →
Releases
These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.