Should a custom post order in WordPress affect the front end? Sometimes yes, but not automatically.
A manually managed order in wp-admin can represent several different things:
- an editorial working order;
- a navigation hierarchy;
- a featured-content sequence;
- a product or service priority;
- a portfolio arrangement;
- a documentation chapter order;
- an internal administration preference.
Only some of those meanings should necessarily control what visitors see.
The central distinction is:
Admin order
→ how editors organize content
Front-end order
→ how visitors receive content
Those two orders can be identical, but they do not have to be.
WordPress already provides a persistent numeric field called menu_order in the posts table. WP_Query can explicitly sort by it, but ordinary front-end post queries usually follow their own ordering rules unless you tell them otherwise.
This guide explains how custom post ordering works, what menu_order actually represents, when manual ordering should affect the front end, when admin and public order should remain separate, how to modify the correct queries and how to avoid breaking archives, search, pagination or unrelated content.
There is no universal answer
Consider three different websites.
A portfolio site contains:
Project A
Project B
Project C
Project D
The designer manually arranges those projects in wp-admin because that is exactly the sequence intended for the portfolio page.
In that case:
admin order
=
front-end order
may be completely reasonable.
Now consider a news site.
An editor may arrange articles in wp-admin for internal review purposes, while visitors expect:
newest article first
In that case:
admin order
≠
front-end order
is usually preferable.
The right decision depends on what the stored order means.
What is menu_order in WordPress?
WordPress posts are stored in the:
wp_posts
table.
One of the columns available on every post record is:
menu_order
Despite the name, it is not limited to navigation menus.
The official WP_Query documentation supports:
orderby = menu_order
and explains that the field is commonly used for Pages and attachments but can be used for any post type with distinct menu_order values.
Most posts have menu_order = 0 by default
Unless something explicitly changes the value, many WordPress records contain:
menu_order = 0
That means simply changing a query to:
'orderby' => 'menu_order'
does not magically produce a useful editorial sequence if every record still has the same value.
You first need a system that actually assigns meaningful order values.
Page Attributes exposes menu_order
WordPress Core exposes an Order field through the Page Attributes interface for post types supporting:
page-attributes
The official page_attributes_meta_box() reference shows that the value submitted by the Order field is the post’s menu_order.
The interface may therefore contain:
Page A
Order: 10
Page B
Order: 20
Page C
Order: 30
Custom post types can support page attributes too
The official register_post_type() documentation includes:
page-attributes
among the supported post-type features.
That feature includes access to menu ordering.
For example:
register_post_type(
'project',
array(
'public' => true,
'supports' => array(
'title',
'editor',
'thumbnail',
'page-attributes',
),
)
);
The exact editor interface depends on the post type and its hierarchy configuration, but the underlying menu_order field can be used independently by queries.
menu_position is not menu_order
This distinction is easy to miss.
When registering a post type, WordPress also provides:
menu_position
That setting controls where the post type itself appears in the wp-admin navigation.
It does not control the order of individual posts.
Compare:
menu_position
→ position of "Projects" in wp-admin
menu_order
→ stored order value for Project A
Admin list sorting is another separate concept
Clicking a sortable heading such as:
Title ↑
Date ↓
changes the current administration view.
That usually does not rewrite menu_order.
For the distinction between temporary list-table sorting and persistent data ordering, see WordPress List-Table Sorting, Explained.
Three types of order should stay conceptually separate
A useful model is:
List-table sorting
→ temporary admin view
Custom post order
→ persistent stored sequence
Front-end query order
→ public presentation
They can interact, but none automatically has to control the others.
WordPress front-end queries have their own ordering rules
A typical WordPress query might use:
orderby = date
order = DESC
which produces:
newest first
The official WP_Query::parse_query() documentation lists menu_order among the supported orderby values and documents ASC and DESC as supported ordering directions.
Nothing about storing a custom menu_order value forces an unrelated query to use it.
You must deliberately query by menu_order
A custom query can use:
$projects = new WP_Query(
array(
'post_type' => 'project',
'orderby' => 'menu_order',
'order' => 'ASC',
)
);
This means:
lowest menu_order
→ first
highest menu_order
→ last
Add a secondary ordering rule
Several posts may share the same menu_order.
This is especially likely when:
new items default to 0
A more deterministic query can use multiple ordering rules:
$projects = new WP_Query(
array(
'post_type' => 'project',
'orderby' => array(
'menu_order' => 'ASC',
'title' => 'ASC',
),
)
);
Now items sharing the same manual order are sorted consistently by title.
Why deterministic ordering matters
Suppose you have:
Project A → 10
Project B → 10
Project C → 10
If only menu_order matters, those records are equivalent from the primary ordering perspective.
A secondary rule such as:
title ASC
or:
date DESC
makes the final result predictable.
When custom order should affect the front end
A manually managed order is a good front-end source when sequence itself carries meaning.
Common examples include:
- services;
- portfolio projects;
- team members;
- testimonials;
- FAQ sections;
- documentation chapters;
- course lessons;
- featured case studies;
- process steps;
- product collections with deliberate merchandising.
Example: services
Suppose an agency offers:
Strategy
Branding
Web Design
Development
SEO
The sequence may represent the company’s preferred commercial narrative.
Sorting those services alphabetically would produce:
Branding
Development
SEO
Strategy
Web Design
which is technically ordered and strategically meaningless.
In that case, a manual content order is appropriate.
Example: portfolio projects
A portfolio often needs editorial curation rather than chronological order.
The newest project may not be the strongest opening case study.
A manually curated sequence lets editors decide:
strongest project
↓
second strongest
↓
supporting projects
↓
older work
Using that order on the front end is reasonable because the order itself represents editorial intent.
Example: documentation chapters
Documentation may need:
1. Installation
2. Configuration
3. First project
4. Advanced settings
5. Troubleshooting
Chronological publication order would be irrelevant.
A persistent custom sequence is clearly part of the content model.
When custom order should probably not affect the front end
Do not automatically apply a manually managed order when visitors expect another ranking principle.
Examples include:
- news archives;
- blogs;
- event archives ordered by event date;
- search results;
- recent-content widgets;
- popular-content sections;
- related-post algorithms.
Blog archives usually want chronological order
A normal blog communicates:
latest content first
Changing the archive globally to:
menu_order ASC
can make newly published articles appear somewhere unexpected simply because they have:
menu_order = 0
or because editors rearranged them for an unrelated internal purpose.
Search results should generally preserve relevance
WordPress search can use relevance as part of its ordering behavior.
Replacing search ordering globally with:
menu_order
can make a less relevant page outrank the content that actually matches the visitor’s query.
A custom editorial order rarely belongs in every search context.
Event order usually belongs to the event date
Suppose events are stored as:
Conference
Workshop
Webinar
The useful public order is probably:
next event first
not:
whatever order an editor dragged them into last month
The front-end query should follow the semantic field that matters to visitors.
One post type can legitimately use several different orders
This is important.
A single:
project
post type might appear in:
- the main portfolio;
- a homepage featured section;
- a category archive;
- search results;
- a “latest projects” block.
Those contexts may require different orderings.
Example: same Projects, different queries
The main portfolio could use:
menu_order ASC
while the homepage uses:
date DESC
and search uses:
relevance
There is nothing inconsistent about that.
The appropriate order belongs to the query context.
Do not globally overwrite every query for a post type
This is where custom ordering implementations often become too aggressive.
A developer may write:
function my_project_order(
$query
) {
if (
'project' ===
$query->get( 'post_type' )
) {
$query->set(
'orderby',
'menu_order'
);
$query->set(
'order',
'ASC'
);
}
}
add_action(
'pre_get_posts',
'my_project_order'
);
This may affect more queries than intended.
pre_get_posts runs before queries execute
The official pre_get_posts documentation explains that the hook runs after query variables are created but before the database query runs.
It also specifically warns developers to carefully target the query they intend to modify.
A broad callback can change:
- archives;
- secondary loops;
- admin requests;
- REST-related contexts;
- widgets;
- plugin queries.
Target the main front-end archive deliberately
For example:
function my_project_archive_order(
$query
) {
if ( is_admin() ) {
return;
}
if ( ! $query->is_main_query() ) {
return;
}
if (
! $query->is_post_type_archive(
'project'
)
) {
return;
}
$query->set(
'orderby',
array(
'menu_order' => 'ASC',
'title' => 'ASC',
)
);
}
add_action(
'pre_get_posts',
'my_project_archive_order'
);
Now the rule applies specifically to:
the main public Project archive
rather than every query involving Projects.
Use the query object’s conditionals
Inside pre_get_posts, the official WordPress documentation recommends using methods on the passed query object where applicable.
For example:
$query->is_main_query()
instead of assuming the global query is always the object being modified.
Do not change admin ordering accidentally
If your intention is front-end presentation, start with:
if ( is_admin() ) {
return;
}
This prevents a public ordering rule from unintentionally replacing list-table sorting inside wp-admin.
Admin sorting is covered separately in WordPress List-Table Sorting, Explained.
Do not override explicit orderby values blindly
A theme, block or plugin may deliberately create:
orderby = date
for a “Latest Projects” component.
If your global hook changes every project query to:
menu_order
the component stops behaving as designed.
Respect intentional secondary queries
For example:
$latest = new WP_Query(
array(
'post_type' => 'project',
'posts_per_page' => 3,
'orderby' => 'date',
'order' => 'DESC',
)
);
This query explicitly asks for:
latest projects
A site-wide custom ordering policy should not silently turn it into:
first three manually ordered projects
Apply default ordering only when no stronger intention exists
One possible architecture is:
Explicit query order exists
→ respect it
No explicit order exists
→ apply custom default
Whether that is appropriate depends on the theme and application architecture.
Manual order can be treated as a default, not a law
This distinction makes custom ordering far more reusable.
Think of:
menu_order
as:
preferred editorial sequence
rather than:
the only legal order for this post type everywhere
Custom Sort Order can separate backend ordering from frontend behavior
TheOneWP Custom Sort Order provides manually managed ordering for selected WordPress post types.
Importantly, the manually managed order can be used independently from whether that order should affect frontend queries.
This supports two different configurations:
Configuration A
Admin custom order
→ enabled
Front-end order
→ unchanged
and:
Configuration B
Admin custom order
→ enabled
Front-end order
→ follows custom order
That separation is useful because backend organization and public presentation are separate decisions.
Why an admin-only custom order can still be valuable
Suppose a team manages:
120 services
and wants related services grouped together inside wp-admin.
The public site may display them:
- alphabetically;
- by taxonomy;
- by relevance;
- according to a visitor-selected filter.
A manually arranged backend can still improve editorial workflow even if visitors never see that sequence.
Why a shared admin and frontend order can be valuable
For a smaller curated collection such as:
8 team members
12 services
6 case studies
editors may reasonably expect:
drag item in admin
↓
save order
↓
front-end position changes
That creates a direct and understandable content-management workflow.
The order must have a clear editorial meaning
Ask:
What does position 1 mean?
If the answer is:
the first item visitors should see
front-end integration probably makes sense.
If the answer is:
the first item editors prefer to see
inside wp-admin
it may not.
Custom order and featured content are not always the same
Suppose three portfolio entries should appear on the homepage.
You could use:
menu_order 1
menu_order 2
menu_order 3
to define them.
But that couples:
featured status
and
global ordering
into one field.
A more explicit data model might use:
featured = yes
featured_order = 1
when the homepage order is independent from the main archive.
One ordering field cannot always express every business rule
Imagine a Product post type requiring:
Homepage featured order
Category merchandising order
Search relevance
Newest products order
A single:
menu_order
value cannot independently represent all four.
At that point, separate metadata or application-specific ordering systems may be more appropriate.
Do not overload menu_order without documenting its meaning
A development team should define whether menu_order means:
- global editorial order;
- main archive order;
- navigation order;
- homepage order;
- admin-only order.
Otherwise one developer may interpret:
menu_order = 1
as “show first everywhere” while another treats it only as backend organization.
Document the ordering contract
For example:
Project menu_order
Purpose:
Main portfolio editorial order.
Used by:
- /projects/
- portfolio block with default ordering
Not used by:
- search
- latest projects
- related projects
This is far more maintainable than relying on an undocumented global hook.
Custom post type architecture matters
Different content types often deserve different ordering semantics.
A:
post
usually behaves chronologically.
A:
page
may use hierarchical and manual ordering.
A:
service
may use explicit editorial order.
A:
event
may use event dates.
For the broader content-model distinction, see WordPress Post Types vs. Custom Post Types.
Do not assume hierarchical means manually ordered
A hierarchical post type supports parent-child relationships.
Manual sequence is a separate concern.
For example:
Services
├── Design
├── Development
└── Marketing
describes hierarchy.
Within that level:
Design = 10
Development = 20
Marketing = 30
can describe order.
Hierarchy answers:
what belongs under what?
Ordering answers:
what appears before what?
Core page listing functions already understand menu_order
The official wp_list_pages() documentation supports:
sort_column = menu_order
and demonstrates listing Pages according to their Page Attributes order.
This is an example of a frontend function deliberately opting into the stored manual order.
The REST API can expose menu_order ordering too
For Pages and post types supporting page attributes, the current WordPress REST posts controller can include:
menu_order
among accepted orderby values.
The official WP_REST_Posts_Controller reference documents this behavior.
This matters for:
- headless WordPress;
- JavaScript applications;
- custom block interfaces;
- external consumers of the REST API.
Headless sites must make the same decision
Changing menu_order in WordPress does not automatically force a Next.js or other frontend application to use it.
The application still chooses how to request or sort the collection.
For example:
GET /wp-json/wp/v2/project?
orderby=menu_order
&order=asc
may deliberately request the editorial sequence when that post type and REST controller support it.
Frontend blocks may have their own ordering settings
A Query Loop block, page builder widget or theme component may explicitly request:
- date;
- title;
- modified date;
- random order;
- custom fields;
- another plugin-defined order.
A global pre_get_posts rule does not necessarily control every custom query in modern WordPress.
Test the actual rendering component.
Do not assume the archive query controls every frontend list
The following can all use independent queries:
- archive templates;
- Query Loop blocks;
- shortcodes;
- widgets;
- page builders;
- REST requests;
- AJAX endpoints;
- custom templates.
Changing the main archive order may therefore affect only one part of the site.
Custom ordering must work with pagination
Suppose a portfolio contains:
120 projects
and shows:
12 per page
The database must apply the custom order before pagination.
The correct process is:
ORDER BY menu_order
↓
LIMIT first 12
next page
↓
next 12 in same order
Do not fetch a page chronologically and then reorder only those 12 records in PHP or JavaScript.
Stable secondary ordering helps pagination too
If dozens of records share:
menu_order = 0
and there is no secondary rule, pagination can become harder to reason about.
Use something deterministic such as:
'orderby' => array(
'menu_order' => 'ASC',
'ID' => 'ASC',
)
when stable ordering matters.
New content needs a defined ordering policy
Suppose editors manually ordered:
A → 10
B → 20
C → 30
and a new post is created with:
D → 0
If the frontend uses:
menu_order ASC
D may suddenly appear first.
Decide whether new content should:
- appear first;
- appear last;
- remain unranked until positioned;
- receive an automatic next order value.
Dragging content should have predictable consequences
If editors can drag rows into a new order, make clear whether that action changes:
wp-admin only
or:
the live website
The interface should not leave this ambiguous.
Preview the public consequence where possible
For high-impact curated content, editorial workflows can benefit from:
- staging;
- preview environments;
- clear save feedback;
- role restrictions;
- documentation.
Moving a major landing-page item should not unexpectedly reorganize six unrelated frontend sections.
Cache invalidation matters
If a manually ordered archive is cached, changing menu_order may not immediately change what visitors see.
Potential cache layers include:
- page cache;
- object cache;
- CDN cache;
- static generation;
- application cache;
- headless frontend regeneration.
The ordering system should account for whichever layers sit between WordPress and the visitor.
Static frontends may need revalidation
On a headless or statically generated site:
drag Project C above Project A
changes WordPress data.
It does not necessarily rebuild the public page automatically.
The publishing architecture may also need:
- a webhook;
- cache purge;
- route revalidation;
- deployment trigger.
SEO does not require chronological ordering everywhere
There is no general SEO rule requiring every archive to be date-sorted.
A service, team, portfolio or documentation archive can use whatever sequence best reflects its purpose.
The important concerns are:
- consistent discoverability;
- crawlable links;
- stable pagination where relevant;
- appropriate canonical behavior;
- useful content hierarchy.
Changing order usually does not change URLs
If you change:
menu_order 20
→
menu_order 5
the post’s permalink normally remains the same.
What changes is its position in queries that use that ordering field.
Navigation menus are a separate system
The name menu_order can cause confusion here.
Ordering a custom post type by:
menu_order
does not automatically rearrange a WordPress navigation menu containing links to those posts.
Navigation menus have their own item order and data model.
Featured images, taxonomies and metadata do not inherit custom order
The ordering applies to:
post query results
when those queries deliberately use the order.
It does not redefine taxonomy term order or other related object collections automatically.
Custom post order should represent a content rule
The strongest reason to use frontend manual ordering is:
The sequence is part of the editorial meaning
of this collection.
That is stronger than:
We happened to drag these rows
into this order in wp-admin.
A decision framework
Ask these questions before applying custom order publicly.
- Does sequence carry meaning for visitors?
- Do editors intentionally curate that sequence?
- Should the same sequence apply to every frontend context?
- Do search and recent-content views need different ordering?
- What happens when new content has
menu_order = 0? - How are ties handled?
- Does pagination remain stable?
- Do blocks or page builders use independent queries?
- Does a headless frontend need explicit
orderbysupport? - Will cache layers update when the order changes?
A practical implementation pattern
For many sites, the cleanest architecture is:
Store one editorial order
using menu_order
Use it on:
→ main curated archive
→ components intended to show curated order
Do not use it on:
→ search
→ latest-content sections
→ date-based feeds
→ queries with explicit alternative ordering
This gives editors predictable control without turning one ordering field into a global rule for every query.
Testing checklist
- Verify the stored
menu_ordervalues. - Test records with duplicate order values.
- Test newly created records with order zero.
- Test the main archive.
- Test search results.
- Test taxonomy archives.
- Test homepage content blocks.
- Test Query Loop blocks.
- Test page-builder listings.
- Test related-content components.
- Test pagination.
- Test REST API consumers where applicable.
- Test headless frontends where applicable.
- Test logged-out visitors.
- Test cache invalidation after reordering.
- Confirm wp-admin list sorting still works independently.
Common mistakes
- Applying
menu_orderto every query globally. - Confusing admin list sorting with persistent content order.
- Confusing
menu_positionwithmenu_order. - Forgetting that new records usually start at order zero.
- Not adding a secondary ordering rule.
- Overriding search relevance.
- Overriding “latest content” queries.
- Changing admin queries with frontend hooks.
- Assuming Query Loop blocks automatically inherit archive ordering.
- Ignoring REST and headless consumers.
- Reordering only the current paginated page in JavaScript.
- Using one order value to represent several unrelated business sequences.
- Failing to explain the consequences of drag-and-drop ordering to editors.
Related guides
- WordPress List-Table Sorting, Explained
- WordPress Admin List Tables, Explained
- WordPress Post Types vs. Custom Post Types
- WordPress Screen Options, Explained
- Optimizing the WordPress Posts Table
- How to Safely Run SQL Queries in WordPress
Final recommendation
A custom post order should affect the front end when the sequence represents genuine editorial intent for that public collection.
It should not affect the front end simply because the same order happens to be convenient inside wp-admin.
The safest architecture is to keep these concepts separate:
Admin list sorting
→ temporary editor view
Custom post order
→ persistent editorial sequence
Front-end query order
→ context-specific public presentation
Use menu_order when you need a persistent sequence, and explicitly query by it where that sequence belongs. Add a deterministic secondary order, define what happens to new items and scope pre_get_posts changes narrowly so search, recent-content queries and unrelated components keep their intended behavior.
For manually curated collections such as services, portfolios, teams and documentation, using the same custom order on the front end can create a very intuitive editing workflow.
For blogs, search results, events and context-sensitive listings, another ordering rule will often make more sense.
TheOneWP Custom Sort Order reflects that distinction by allowing selected post types to use a manually managed order while keeping frontend application of that order optional.
The deciding question should therefore be simple: does the stored order describe how editors want to organize their workspace, or does it describe the sequence visitors are actually supposed to experience?

