Bracket Post Order gives you complete control over how your content is sorted — directly from the native WordPress admin screens you already use. No new interfaces to learn, no separate reorder pages. Just drag and drop.
A key feature is per-term post ordering: the ability to define a different post order for each individual category, tag, or custom taxonomy term. Show your products in one order on “Summer Collection” and a completely different order on “Best Sellers” — each term maintains its own independent sort.
1. Global Post Ordering
Drag-and-drop to reorder posts, pages, and custom post types on the standard admin list table. The new order is saved to menu_order and automatically applied on the front end.
2. Per-Term Post Ordering
Filter your admin list by a category or taxonomy term, and the interface switches to per-term mode. Drag posts into the order you want for that specific term. Assign the same post to multiple categories — each one keeps its own sort. New posts added to a term automatically appear first (newest on top).
3. Taxonomy Term Ordering
Reorder categories, tags, and custom taxonomy terms themselves via drag-and-drop on the native edit-tags.php screen. The new term order is applied to get_terms() queries and navigation menus on the front end.
Changes save automatically via AJAX — no page refresh needed.
edit.php and edit-tags.php)menu_order for global ordering — compatible with any themeterm_order for taxonomy terms — the same column WordPress definespre_get_posts and posts_clausesorderby parameters (date, title, etc.) are never overriddenWP_Query (Elementor, Divi, Beaver Builder)Bracket Post Order provides hooks so you can extend or control its behavior:
// Filter: skip per-term ordering for a specific query
add_filter( 'bracket_po_apply_term_post_order', function( $apply, $term_id, $query ) {
// Return false to skip
return $apply;
}, 10, 3 );
// Filter: modify the retrieved term post order
add_filter( 'bracket_po_get_term_post_order', function( $ordered_ids, $term_id ) {
return $ordered_ids;
}, 10, 2 );
// Actions: fired after order is saved via drag-and-drop
do_action( 'bracket_po_global_order_updated', $post_ids );
do_action( 'bracket_po_term_post_order_updated', $term_id, $post_ids );
do_action( 'bracket_po_term_order_updated', $term_ids );
// Actions: fired after order is reset
do_action( 'bracket_po_global_order_reset', $post_type, $sort_by );
do_action( 'bracket_po_term_post_order_reset', $term_id );
To apply per-term order in custom queries, set orderby to menu_order and include a tax_query with a single term:
$query = new WP_Query( [
'post_type' => 'product',
'orderby' => 'menu_order',
'order' => 'ASC',
'tax_query' => [ [
'taxonomy' => 'product-category',
'field' => 'term_id',
'terms' => 42,
] ],
] );
The plugin will automatically apply the saved per-term order via FIELD() SQL — ordered posts appear first, new/unordered posts appear last (sorted by date, newest on top).