WP_REST_Menus_Controller::handle_locations() – Updates the menu’s locations from a REST request.

You appear to be a bot. Output may be restricted

Description

Updates the menu's locations from a REST request.

Usage

$true|WP_Error = WP_REST_Menus_Controller::handle_locations( $menu_id, $request );

Parameters

$menu_id
( int ) required – The menu id to update.
$request
( WP_REST_Request ) required – Full details about the request.

Returns

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

Source

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


Lines:

1 to 33 of 33
  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;
  }
 

 View on GitHub View on Trac