You’ve got a WordPress site with a portfolio, a product catalog, or a curated list of resources. The content is solid, but the default sort order (newest first) doesn’t match how you actually want visitors to see it. Your best case study is buried on page two. Your featured product sits below three seasonal items nobody’s buying.
The obvious solution: a WordPress post order plugin that lets you drag posts into the exact sequence you want. There are a dozen of these on the plugin directory. Most of them work. But most of them also share the same limitation that only becomes obvious once you’re actually using them.
They sort globally. One order, applied everywhere. If you reorder your products for the “Summer Collection” category, that same order shows up on “Best Sellers,” on your shop page, and anywhere else those products appear. Which is rarely what you want.
We built Bracket Post Order to fix that.
What a Post Order Plugin Actually Needs to Do
Before looking at specific solutions, it’s worth understanding what “reordering posts” means technically in WordPress.
WordPress stores a menu_order field on every post. By default, it’s set to 0 for all posts, which means WordPress falls back to date DESC (newest first). When you install a post order plugin, it typically does two things: gives you a drag-and-drop interface to set menu_order values, then hooks into pre_get_posts to override the default sort with orderby => menu_order.
That works for global ordering. But it breaks down the moment you need context-dependent sorting, where the same post appears in different positions depending on which taxonomy term you’re viewing.
This is a surprisingly common need, and it’s the main reason people end up testing three or four WordPress post order plugins before settling on one. WooCommerce store owners want products ordered differently across categories. Portfolio sites want projects sorted by relevance within each service type. Event listings need different ordering per venue or region. The menu_order field can only hold one value per post. So how do you handle multiple sort orders for the same content?
How Per-Term Ordering Works
Bracket Post Order solves this by storing per-term order as term meta, completely separate from the global menu_order field.
When you enable per-term ordering for a taxonomy, each term gets its own independent post sequence. You visit the admin list table, filter by a specific category or tag, and drag posts into the order you want for that specific term. The plugin saves those post IDs as an ordered array in the term’s metadata.
On the front end, when a visitor views that term’s archive (or any query filtered by that term), the plugin intercepts the query via posts_clauses and applies the term-specific order using SQL’s FIELD() function. Posts not in the saved order appear first (newest on top), followed by the explicitly ordered posts.
The result: your “Summer Collection” has its own sequence, your “Best Sellers” has a completely different one, and your main shop page uses the global menu_order. Each context maintains its own sort, independently.
This is the feature that none of the major competitors offer. Post Types Order, Simple Custom Post Order, Intuitive Custom Post Order: they all modify menu_order globally. One order per post, everywhere.
Setting It Up
Install from the WordPress plugin directory (search “Bracket Post Order”) or upload the zip. Then:
- Go to Settings > Bracket Post Order
- Toggle on the post types you want to reorder (posts, pages, products, any CPT)
- Toggle on taxonomies for per-term post ordering
- Toggle on taxonomies for term reordering (if you want to sort the terms themselves)
- Save. Done.
No configuration pages to learn. No separate “reorder” screens. You drag directly on the standard admin list tables you already use. A “#” column shows each post’s current position, and a drag handle appears on hover.
After every drag-and-drop save, you get an “Order saved. Undo” notification with an 8-second window to reverse the change. Simple, but you’d be surprised how many reorder plugins skip this.
What It Works With
Any public custom post type. Portfolios, team members, testimonials, events, FAQs, services, anything registered with a UI.
WooCommerce. Products and product categories. If you’re running a store, per-term ordering lets you curate each product category independently. Feature your best-margin items first in “Electronics” while sorting “Accessories” by popularity.
Page builders. Elementor, Divi, Beaver Builder, and any theme or builder that uses standard WP_Query will respect the saved order automatically. No shortcodes or custom code needed.
WPML and Polylang. Per-term ordering works across languages. Each language’s term maintains its own order.
Multisite. Each site in the network gets its own settings and ordering. No cross-site conflicts.
Accessibility and Mobile
This matters more than most developers think. Not every admin user navigates with a mouse.
Bracket Post Order supports full keyboard navigation: Tab to reach a row, Enter or Space to grab it, Arrow keys to move it up or down, Escape to cancel. The plugin uses ARIA live regions to announce changes to screen readers. It meets WCAG compliance requirements, which is relevant if you’re building sites for government, education, or any organization with accessibility mandates.
Mobile and touch devices work through jQuery UI Touch Punch integration. You can reorder from a tablet or phone, which is useful for clients who manage their site from an iPad.
Developer Hooks
If you need to customize the ordering behavior, the plugin exposes filters and actions:
// Skip per-term ordering for a specific query
add_filter( 'bracket_po_apply_term_post_order', function( $apply, $term_id, $query ) {
if ( $query->get( 'post_type' ) === 'event' ) {
return false; // Keep events sorted by date
}
return $apply;
}, 10, 3 );Actions fire after saves, so you can trigger cache invalidation, sync external systems, or log changes:
// After per-term order is updated
add_action( 'bracket_po_term_post_order_updated', function( $term_id, $post_ids ) {
// Clear object cache for this term
wp_cache_delete( "term_posts_{$term_id}", 'bracket_po' );
}, 10, 2 );The full list of hooks is in the plugin’s readme on wordpress.org/plugins/bracket-post-order.
How It Compares to Other WordPress Post Order Plugins
The plugin directory has several established options. Here’s where they differ:
Post Types Order has over 12 million downloads. It’s the most popular choice, and it works. Global drag-and-drop reordering with a dedicated re-order page. The limitation: no per-term ordering. Advanced features require the paid version. Some users report issues with large post sets and mobile devices.
Simple Custom Post Order has 200,000+ active installs. Clean, minimal, works on the standard list table. Again, global ordering only. No per-term support, no undo, no accessibility features.
Intuitive Custom Post Order covers posts, pages, CPTs, and taxonomy terms. Straightforward drag-and-drop. But like the others, one order per post type, applied everywhere.
Bracket Post Order is newer (fewer installs, honestly) but solves the per-term problem that the others don’t address. It also adds undo, keyboard accessibility, mobile support, reset options, and developer hooks. If global ordering is all you need, any of these WordPress post order plugins will work fine. If you need different orders per category, tag, or custom taxonomy term, Bracket Post Order is currently the only free option that handles it natively.
We built this plugin because we kept running into the per-term limitation on client projects. Across 200+ WordPress builds, the “one order everywhere” approach works for maybe 60% of cases. The other 40%, clients inevitably ask: “Can I show these products in a different order on this category page?” With the existing plugins, the answer was “not without custom code.” Now it’s a toggle in settings.
Real-World Use Cases
To make this more concrete, here are scenarios where per-term ordering changes how you manage content:
WooCommerce store with seasonal promotions. You sell clothing across categories like “Dresses,” “Outerwear,” and “Sale.” In “Sale,” you want the highest-discount items first. In “Dresses,” you want your new arrivals featured. In “Outerwear,” you want your best-reviewed jackets on top. Three different orderings, same product catalog. Global ordering can’t do this. Per-term ordering handles it without any code.
Agency portfolio site. Your case studies span “Web Development,” “Branding,” and “E-Commerce.” The project that’s most impressive for a web development prospect isn’t the same one you’d lead with for branding inquiries. Per-term ordering lets you curate each service page independently while keeping all projects in one post type.
Educational content with multiple topics. A blog covering “JavaScript,” “PHP,” and “WordPress” wants to pin foundational articles to the top of each topic page. The beginner’s guide to JavaScript should be first in the JavaScript category, but it’s irrelevant to the PHP archive. Per-term ordering solves this cleanly.
Restaurant or recipe sites. Different ordering for “Appetizers” (by popularity) vs “Desserts” (by seasonal availability) vs “Chef’s Picks” (manually curated). One global order would force you to pick one approach for everything.
Getting Started
Bracket Post Order is free on the WordPress plugin directory:
wordpress.org/plugins/bracket-post-order
Install it, enable your post types and taxonomies in settings, and start dragging. If you’re already using another post order plugin, Bracket Post Order auto-detects Simple Custom Post Order and dequeues its scripts to avoid conflicts. For other plugins, deactivate them first.
If you’re working with AI-assisted WordPress development, our WordPress MCP server gives tools like Claude and Cursor direct access to your site’s structure, including custom post types, taxonomies, and plugin configurations.
Bracket Post Order uses standard WordPress APIs (menu_order, term meta, pre_get_posts, posts_clauses). It doesn’t modify your database schema or add custom tables. Deactivating the plugin restores default WordPress sort behavior. Your content and its metadata remain intact.
Frequently Asked Questions
Does reordering affect my post publish dates?
No. The plugin modifies the menu_order field, which is separate from the publish date. Your posts keep their original dates.
Can I use per-term ordering with WooCommerce product categories?
Yes. Enable “Product categories” in the taxonomy settings, then filter your products list by a specific category and drag to reorder. Each category maintains its own product sequence.
What happens if I deactivate the plugin?
WordPress reverts to its default sort order (date descending). The menu_order values and term meta remain in the database but have no effect until the plugin is reactivated.
Does it work with page builders like Elementor?
Yes. Any page builder or theme that uses standard WP_Query will automatically respect the saved order. No additional configuration needed.
How does Bracket Post Order compare to Post Types Order?
Post Types Order is the most popular WordPress post order plugin with 600,000+ active installs. It handles global drag-and-drop reordering well. The key difference: it doesn’t support per-term ordering (different sequences per category or tag). If you only need one global order per post type, Post Types Order works. If you need context-dependent ordering, Bracket Post Order is the better fit.
Does per-term ordering work with custom taxonomies?
Yes. Any registered taxonomy with a UI is supported. Product categories, portfolio types, event venues, course topics, whatever you’ve registered. Enable it in the plugin settings and each term gets its own independent post order.

