WP_REST_Menus_Controller::handle_locations
Updates the menu's locations from a REST request.
Method of the class: WP_REST_Menus_Controller{}
No Hooks.
Returns
true|WP_Error. True on success, a WP_Error on an error updating any of the locations.
Usage
// protected - for code of main (parent) or child class $result = $this->handle_locations( $menu_id, $request );
- $menu_id(int) (required)
- The menu id to update.
- $request(WP_REST_Request) (required)
- Full details about the request.
Changelog
| Since 5.9.0 | Introduced. |
WP_REST_Menus_Controller::handle_locations() WP REST Menus Controller::handle locations code WP 7.0
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;
}