WP_REST_Menus_Controller::handle_locations( int $menu_id, WP_REST_Request $request )

Updates the menu’s locations from a REST request.


Parameters

$menu_id

(Required) The menu id to update.

$request

(Required) Full details about the request.


Return

(true|WP_Error) True on success, a WP_Error on an error updating any of the locations.


Source

File: wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php

	protected function handle_locations( $menu_id, $request ) {
		if ( ! isset( $request['locations'] ) ) {
			return true;
		}

		$menu_locations = get_registered_nav_menus();
		$menu_locations = array_keys( $menu_locations );
		$new_locations  = array();
		foreach ( $request['locations'] as $location ) {
			if ( ! in_array( $location, $menu_locations, true ) ) {
				return new WP_Error(
					'rest_invalid_menu_location',
					__( 'Invalid menu location.' ),
					array(
						'status'   => 400,
						'location' => $location,
					)
				);
			}
			$new_locations[ $location ] = $menu_id;
		}
		$assigned_menu = get_nav_menu_locations();
		foreach ( $assigned_menu as $location => $term_id ) {
			if ( $term_id === $menu_id ) {
				unset( $assigned_menu[ $location ] );
			}
		}
		$new_assignments = array_merge( $assigned_menu, $new_locations );
		set_theme_mod( 'nav_menu_locations', $new_assignments );

		return true;
	}


Changelog

Changelog
Version Description
5.9.0 Introduced.