Make WordPress Core

Changeset 53010


Ignore:
Timestamp:
03/29/2022 11:05:26 AM (5 years ago)
Author:
spacedmonkey
Message:

Menus: Convert wp_get_nav_menu_items function to use a taxonomy query.

Change the wp_get_nav_menu_items function to replace the call to get_objects_in_term with a simple taxonomy query. This change improves performance as it results in one fewer query to retrieve menu items from the
database.

Props Spacedmonkey, peterwilsoncc.
Fixes #55372.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/nav-menu.php

    r52975 r53010  
    694694        static $fetched = array();
    695695
    696         $items = get_objects_in_term( $menu->term_id, 'nav_menu' );
    697         if ( is_wp_error( $items ) ) {
     696        if ( ! taxonomy_exists( 'nav_menu' ) ) {
    698697                return false;
    699698        }
    700699
    701         $defaults        = array(
     700        $defaults = array(
    702701                'order'       => 'ASC',
    703702                'orderby'     => 'menu_order',
    … …  
    707706                'output_key'  => 'menu_order',
    708707                'nopaging'    => true,
     708                'tax_query'   => array(
     709                        array(
     710                                'taxonomy' => 'nav_menu',
     711                                'field'    => 'term_taxonomy_id',
     712                                'terms'    => $menu->term_taxonomy_id,
     713                        ),
     714                ),
    709715        );
    710         $args            = wp_parse_args( $args, $defaults );
    711         $args['include'] = $items;
    712 
    713         if ( ! empty( $items ) ) {
     716        $args     = wp_parse_args( $args, $defaults );
     717        if ( $menu->count > 0 ) {
    714718                $items = get_posts( $args );
    715719        } else {
Note: See TracChangeset for help on using the changeset viewer.