I had a client running a large WooCommerce shop with about 600 landing pages for seasonal campaigns. Their marketing team called me, genuinely stressed. They were building a new navigation structure for a holiday push and could not turn up their Black Friday early access page in the Appearance > Menus interface. They searched for “Black Friday” and got nothing back.
The page existed. I could see it in the Pages list. The admin menu search query behaved as though it didn’t. I assumed a conflict with one of their SEO plugins, or a stray pre_get_posts filter I had missed, and spent a good forty minutes in their custom theme’s functions.php hunting for a bad query filter written by some junior dev. That is usually where this sort of thing lives.
Not this time. The culprit was a core change from WordPress 6.9 that plenty of us, me included, skimmed past at the time. WordPress narrowed the menu search for performance reasons: instead of a heavy full-text search across titles and content, it now searches the post title only.
What changed in the admin menu search query
The reasoning holds up. On a site with thousands of posts, searching the whole content body just to find a menu link is overkill, and it drags the admin UI down. My client’s page, though, was titled “Early Access Campaign,” and the phrase “Black Friday” appeared only in the body text. With the new search_columns restriction in place, the search came back empty.
The dev notes on WordPress.org spell it out: the query now explicitly adds array( 'post_title' ) to the search_columns argument. That is fast, and fine as long as your naming conventions are airtight. If your content team finds pages by remembering a keyword in the text, you will hear about it, and the performance upgrade becomes a workflow bottleneck.
Fixing it does not mean hacking core. WordPress ships a filter for exactly this, wp_ajax_menu_quick_search_args, which lets you change the arguments before the query reaches the database. Here is what I gave the client to get the old behavior back.
/**
* Restore the ability to search by content in the admin menu editor.
*
* @param array $args The query arguments for the menu search.
* @return array Modified arguments.
*/
function bbioon_restore_full_menu_search( $args ) {
// We unset the search_columns to revert to the default full-text behavior
if ( isset( $args['search_columns'] ) ) {
unset( $args['search_columns'] );
}
return $args;
}
add_filter( 'wp_ajax_menu_quick_search_args', 'bbioon_restore_full_menu_search' );
When to use it
I would not drop this into every site. On a site with 20k or more posts, the title-only default is probably better for your server, because full-text searches on the wp_posts table get expensive. On smaller sites, and on certain editorial workflows, the admin menu search query has to do more than match a title.
You can go further and enable it only for specific user roles or post types, but for most clients unsetting that restricted column array is enough. It uses the filter core gave us instead of working around it.
Changes like this one cost you an afternoon before you even know what you are looking for. If you would rather hand that off, get in touch with my team. We have probably seen your version of it already.
Does your team lose time finding content in the admin, or have you moved navigation out to a headless front end already? I am curious which way people went.