wp/wp-includes/nav-menu.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
child 16 a86126ab1dd4
--- a/wp/wp-includes/nav-menu.php	Mon Oct 14 18:06:33 2019 +0200
+++ b/wp/wp-includes/nav-menu.php	Mon Oct 14 18:28:13 2019 +0200
@@ -60,8 +60,9 @@
  * @return bool Whether the menu exists.
  */
 function is_nav_menu( $menu ) {
-	if ( ! $menu )
+	if ( ! $menu ) {
 		return false;
+	}
 
 	$menu_obj = wp_get_nav_menu_object( $menu );
 
@@ -70,8 +71,9 @@
 		! is_wp_error( $menu_obj ) &&
 		! empty( $menu_obj->taxonomy ) &&
 		'nav_menu' == $menu_obj->taxonomy
-	)
+	) {
 		return true;
+	}
 
 	return false;
 }
@@ -105,8 +107,8 @@
 function unregister_nav_menu( $location ) {
 	global $_wp_registered_nav_menus;
 
-	if ( is_array( $_wp_registered_nav_menus ) && isset( $_wp_registered_nav_menus[$location] ) ) {
-		unset( $_wp_registered_nav_menus[$location] );
+	if ( is_array( $_wp_registered_nav_menus ) && isset( $_wp_registered_nav_menus[ $location ] ) ) {
+		unset( $_wp_registered_nav_menus[ $location ] );
 		if ( empty( $_wp_registered_nav_menus ) ) {
 			_remove_theme_support( 'menus' );
 		}
@@ -137,8 +139,9 @@
  */
 function get_registered_nav_menus() {
 	global $_wp_registered_nav_menus;
-	if ( isset( $_wp_registered_nav_menus ) )
+	if ( isset( $_wp_registered_nav_menus ) ) {
 		return $_wp_registered_nav_menus;
+	}
 	return array();
 }
 
@@ -169,7 +172,7 @@
 
 	$registered_nav_menus = get_registered_nav_menus();
 	if ( isset( $registered_nav_menus[ $location ] ) ) {
-		$locations = get_nav_menu_locations();
+		$locations    = get_nav_menu_locations();
 		$has_nav_menu = ! empty( $locations[ $location ] );
 	}
 
@@ -253,8 +256,9 @@
  */
 function wp_delete_nav_menu( $menu ) {
 	$menu = wp_get_nav_menu_object( $menu );
-	if ( ! $menu )
+	if ( ! $menu ) {
 		return false;
+	}
 
 	$menu_objects = get_objects_in_term( $menu->term_id, 'nav_menu' );
 	if ( ! empty( $menu_objects ) ) {
@@ -268,12 +272,13 @@
 	// Remove this menu from any locations.
 	$locations = get_nav_menu_locations();
 	foreach ( $locations as $location => $menu_id ) {
-		if ( $menu_id == $menu->term_id )
+		if ( $menu_id == $menu->term_id ) {
 			$locations[ $location ] = 0;
+		}
 	}
 	set_theme_mod( 'nav_menu_locations', $locations );
 
-	if ( $result && !is_wp_error($result) )
+	if ( $result && ! is_wp_error( $result ) ) {
 
 		/**
 		 * Fires after a navigation menu has been successfully deleted.
@@ -283,6 +288,7 @@
 		 * @param int $term_id ID of the deleted menu.
 		 */
 		do_action( 'wp_delete_nav_menu', $menu->term_id );
+	}
 
 	return $result;
 }
@@ -305,9 +311,9 @@
 	$_menu = wp_get_nav_menu_object( $menu_id );
 
 	$args = array(
-		'description' => ( isset( $menu_data['description'] ) ? $menu_data['description']  : '' ),
-		'name'        => ( isset( $menu_data['menu-name']   ) ? $menu_data['menu-name']    : '' ),
-		'parent'      => ( isset( $menu_data['parent']      ) ? (int) $menu_data['parent'] : 0  ),
+		'description' => ( isset( $menu_data['description'] ) ? $menu_data['description'] : '' ),
+		'name'        => ( isset( $menu_data['menu-name'] ) ? $menu_data['menu-name'] : '' ),
+		'parent'      => ( isset( $menu_data['parent'] ) ? (int) $menu_data['parent'] : 0 ),
 		'slug'        => null,
 	);
 
@@ -319,9 +325,11 @@
 		isset( $_possible_existing->term_id ) &&
 		$_possible_existing->term_id != $menu_id
 	) {
-		return new WP_Error( 'menu_exists',
+		return new WP_Error(
+			'menu_exists',
 			/* translators: %s: menu name */
-			sprintf( __( 'The menu name %s conflicts with another menu name. Please try another.' ),
+			sprintf(
+				__( 'The menu name %s conflicts with another menu name. Please try another.' ),
 				'<strong>' . esc_html( $menu_data['menu-name'] ) . '</strong>'
 			)
 		);
@@ -332,9 +340,11 @@
 		$menu_exists = get_term_by( 'name', $menu_data['menu-name'], 'nav_menu' );
 
 		if ( $menu_exists ) {
-			return new WP_Error( 'menu_exists',
+			return new WP_Error(
+				'menu_exists',
 				/* translators: %s: menu name */
-				sprintf( __( 'The menu name %s conflicts with another menu name. Please try another.' ),
+				sprintf(
+					__( 'The menu name %s conflicts with another menu name. Please try another.' ),
 					'<strong>' . esc_html( $menu_data['menu-name'] ) . '</strong>'
 				)
 			);
@@ -342,8 +352,9 @@
 
 		$_menu = wp_insert_term( $menu_data['menu-name'], 'nav_menu', $args );
 
-		if ( is_wp_error( $_menu ) )
+		if ( is_wp_error( $_menu ) ) {
 			return $_menu;
+		}
 
 		/**
 		 * Fires after a navigation menu is successfully created.
@@ -358,15 +369,17 @@
 		return (int) $_menu['term_id'];
 	}
 
-	if ( ! $_menu || ! isset( $_menu->term_id ) )
+	if ( ! $_menu || ! isset( $_menu->term_id ) ) {
 		return 0;
+	}
 
 	$menu_id = (int) $_menu->term_id;
 
 	$update_response = wp_update_term( $menu_id, 'nav_menu', $args );
 
-	if ( is_wp_error( $update_response ) )
+	if ( is_wp_error( $update_response ) ) {
 		return $update_response;
+	}
 
 	$menu_id = (int) $update_response['term_id'];
 
@@ -396,12 +409,13 @@
  * @return int|WP_Error The menu item's database ID or WP_Error object on failure.
  */
 function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item_data = array() ) {
-	$menu_id = (int) $menu_id;
+	$menu_id         = (int) $menu_id;
 	$menu_item_db_id = (int) $menu_item_db_id;
 
 	// make sure that we don't convert non-nav_menu_item objects into nav_menu_item objects
-	if ( ! empty( $menu_item_db_id ) && ! is_nav_menu_item( $menu_item_db_id ) )
+	if ( ! empty( $menu_item_db_id ) && ! is_nav_menu_item( $menu_item_db_id ) ) {
 		return new WP_Error( 'update_nav_menu_item_failed', __( 'The given object ID is not that of a menu item.' ) );
+	}
 
 	$menu = wp_get_nav_menu_object( $menu_id );
 
@@ -414,20 +428,20 @@
 	}
 
 	$defaults = array(
-		'menu-item-db-id' => $menu_item_db_id,
-		'menu-item-object-id' => 0,
-		'menu-item-object' => '',
-		'menu-item-parent-id' => 0,
-		'menu-item-position' => 0,
-		'menu-item-type' => 'custom',
-		'menu-item-title' => '',
-		'menu-item-url' => '',
+		'menu-item-db-id'       => $menu_item_db_id,
+		'menu-item-object-id'   => 0,
+		'menu-item-object'      => '',
+		'menu-item-parent-id'   => 0,
+		'menu-item-position'    => 0,
+		'menu-item-type'        => 'custom',
+		'menu-item-title'       => '',
+		'menu-item-url'         => '',
 		'menu-item-description' => '',
-		'menu-item-attr-title' => '',
-		'menu-item-target' => '',
-		'menu-item-classes' => '',
-		'menu-item-xfn' => '',
-		'menu-item-status' => '',
+		'menu-item-attr-title'  => '',
+		'menu-item-target'      => '',
+		'menu-item-classes'     => '',
+		'menu-item-xfn'         => '',
+		'menu-item-status'      => '',
 	);
 
 	$args = wp_parse_args( $menu_item_data, $defaults );
@@ -435,30 +449,34 @@
 	if ( 0 == $menu_id ) {
 		$args['menu-item-position'] = 1;
 	} elseif ( 0 == (int) $args['menu-item-position'] ) {
-		$menu_items = 0 == $menu_id ? array() : (array) wp_get_nav_menu_items( $menu_id, array( 'post_status' => 'publish,draft' ) );
-		$last_item = array_pop( $menu_items );
+		$menu_items                 = 0 == $menu_id ? array() : (array) wp_get_nav_menu_items( $menu_id, array( 'post_status' => 'publish,draft' ) );
+		$last_item                  = array_pop( $menu_items );
 		$args['menu-item-position'] = ( $last_item && isset( $last_item->menu_order ) ) ? 1 + $last_item->menu_order : count( $menu_items );
 	}
 
 	$original_parent = 0 < $menu_item_db_id ? get_post_field( 'post_parent', $menu_item_db_id ) : 0;
 
-	if ( 'custom' != $args['menu-item-type'] ) {
-		/* if non-custom menu item, then:
-			* use original object's URL
-			* blank default title to sync with original object's
-		*/
+	if ( 'custom' === $args['menu-item-type'] ) {
+		// If custom menu item, trim the URL.
+		$args['menu-item-url'] = trim( $args['menu-item-url'] );
+	} else {
+		/*
+		 * If non-custom menu item, then:
+		 * - use the original object's URL.
+		 * - blank default title to sync with the original object's title.
+		 */
 
 		$args['menu-item-url'] = '';
 
 		$original_title = '';
 		if ( 'taxonomy' == $args['menu-item-type'] ) {
 			$original_parent = get_term_field( 'parent', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' );
-			$original_title = get_term_field( 'name', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' );
+			$original_title  = get_term_field( 'name', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' );
 		} elseif ( 'post_type' == $args['menu-item-type'] ) {
 
 			$original_object = get_post( $args['menu-item-object-id'] );
 			$original_parent = (int) $original_object->post_parent;
-			$original_title = $original_object->post_title;
+			$original_title  = $original_object->post_title;
 		} elseif ( 'post_type_archive' == $args['menu-item-type'] ) {
 			$original_object = get_post_type_object( $args['menu-item-object'] );
 			if ( $original_object ) {
@@ -466,34 +484,37 @@
 			}
 		}
 
-		if ( $args['menu-item-title'] == $original_title )
+		if ( $args['menu-item-title'] == $original_title ) {
 			$args['menu-item-title'] = '';
+		}
 
 		// hack to get wp to create a post object when too many properties are empty
-		if ( '' ==  $args['menu-item-title'] && '' == $args['menu-item-description'] )
+		if ( '' == $args['menu-item-title'] && '' == $args['menu-item-description'] ) {
 			$args['menu-item-description'] = ' ';
+		}
 	}
 
 	// Populate the menu item object
 	$post = array(
-		'menu_order' => $args['menu-item-position'],
-		'ping_status' => 0,
+		'menu_order'   => $args['menu-item-position'],
+		'ping_status'  => 0,
 		'post_content' => $args['menu-item-description'],
 		'post_excerpt' => $args['menu-item-attr-title'],
-		'post_parent' => $original_parent,
-		'post_title' => $args['menu-item-title'],
-		'post_type' => 'nav_menu_item',
+		'post_parent'  => $original_parent,
+		'post_title'   => $args['menu-item-title'],
+		'post_type'    => 'nav_menu_item',
 	);
 
 	$update = 0 != $menu_item_db_id;
 
 	// New menu item. Default is draft status
 	if ( ! $update ) {
-		$post['ID'] = 0;
+		$post['ID']          = 0;
 		$post['post_status'] = 'publish' == $args['menu-item-status'] ? 'publish' : 'draft';
-		$menu_item_db_id = wp_insert_post( $post );
-		if ( ! $menu_item_db_id	|| is_wp_error( $menu_item_db_id ) )
+		$menu_item_db_id     = wp_insert_post( $post );
+		if ( ! $menu_item_db_id || is_wp_error( $menu_item_db_id ) ) {
 			return $menu_item_db_id;
+		}
 
 		/**
 		 * Fires immediately after a new navigation menu item has been added.
@@ -511,37 +532,38 @@
 
 	// Associate the menu item with the menu term
 	// Only set the menu term if it isn't set to avoid unnecessary wp_get_object_terms()
-	 if ( $menu_id && ( ! $update || ! is_object_in_term( $menu_item_db_id, 'nav_menu', (int) $menu->term_id ) ) ) {
+	if ( $menu_id && ( ! $update || ! is_object_in_term( $menu_item_db_id, 'nav_menu', (int) $menu->term_id ) ) ) {
 		wp_set_object_terms( $menu_item_db_id, array( $menu->term_id ), 'nav_menu' );
 	}
 
 	if ( 'custom' == $args['menu-item-type'] ) {
 		$args['menu-item-object-id'] = $menu_item_db_id;
-		$args['menu-item-object'] = 'custom';
+		$args['menu-item-object']    = 'custom';
 	}
 
 	$menu_item_db_id = (int) $menu_item_db_id;
 
-	update_post_meta( $menu_item_db_id, '_menu_item_type', sanitize_key($args['menu-item-type']) );
+	update_post_meta( $menu_item_db_id, '_menu_item_type', sanitize_key( $args['menu-item-type'] ) );
 	update_post_meta( $menu_item_db_id, '_menu_item_menu_item_parent', strval( (int) $args['menu-item-parent-id'] ) );
 	update_post_meta( $menu_item_db_id, '_menu_item_object_id', strval( (int) $args['menu-item-object-id'] ) );
-	update_post_meta( $menu_item_db_id, '_menu_item_object', sanitize_key($args['menu-item-object']) );
-	update_post_meta( $menu_item_db_id, '_menu_item_target', sanitize_key($args['menu-item-target']) );
+	update_post_meta( $menu_item_db_id, '_menu_item_object', sanitize_key( $args['menu-item-object'] ) );
+	update_post_meta( $menu_item_db_id, '_menu_item_target', sanitize_key( $args['menu-item-target'] ) );
 
 	$args['menu-item-classes'] = array_map( 'sanitize_html_class', explode( ' ', $args['menu-item-classes'] ) );
-	$args['menu-item-xfn'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $args['menu-item-xfn'] ) ) );
+	$args['menu-item-xfn']     = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $args['menu-item-xfn'] ) ) );
 	update_post_meta( $menu_item_db_id, '_menu_item_classes', $args['menu-item-classes'] );
 	update_post_meta( $menu_item_db_id, '_menu_item_xfn', $args['menu-item-xfn'] );
-	update_post_meta( $menu_item_db_id, '_menu_item_url', esc_url_raw($args['menu-item-url']) );
+	update_post_meta( $menu_item_db_id, '_menu_item_url', esc_url_raw( $args['menu-item-url'] ) );
 
-	if ( 0 == $menu_id )
+	if ( 0 == $menu_id ) {
 		update_post_meta( $menu_item_db_id, '_menu_item_orphaned', (string) time() );
-	elseif ( get_post_meta( $menu_item_db_id, '_menu_item_orphaned' ) )
+	} elseif ( get_post_meta( $menu_item_db_id, '_menu_item_orphaned' ) ) {
 		delete_post_meta( $menu_item_db_id, '_menu_item_orphaned' );
+	}
 
 	// Update existing menu item. Default is publish status
 	if ( $update ) {
-		$post['ID'] = $menu_item_db_id;
+		$post['ID']          = $menu_item_db_id;
 		$post['post_status'] = 'draft' == $args['menu-item-status'] ? 'draft' : 'publish';
 		wp_update_post( $post );
 	}
@@ -574,8 +596,11 @@
  * @return array Menu objects.
  */
 function wp_get_nav_menus( $args = array() ) {
-	$defaults = array( 'hide_empty' => false, 'orderby' => 'name' );
-	$args = wp_parse_args( $args, $defaults );
+	$defaults = array(
+		'hide_empty' => false,
+		'orderby'    => 'name',
+	);
+	$args     = wp_parse_args( $args, $defaults );
 
 	/**
 	 * Filters the navigation menu objects being returned.
@@ -587,7 +612,7 @@
 	 * @param array $menus An array of menu objects.
 	 * @param array $args  An array of arguments used to retrieve menu objects.
 	 */
-	return apply_filters( 'wp_get_nav_menus', get_terms( 'nav_menu',  $args), $args );
+	return apply_filters( 'wp_get_nav_menus', get_terms( 'nav_menu', $args ), $args );
 }
 
 /**
@@ -615,7 +640,6 @@
  *
  * @since 3.0.0
  *
- * @global string $_menu_item_sort_prop
  * @staticvar array $fetched
  *
  * @param int|string|WP_Term $menu Menu ID, slug, name, or object.
@@ -651,9 +675,16 @@
 		return false;
 	}
 
-	$defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item',
-		'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order', 'nopaging' => true );
-	$args = wp_parse_args( $args, $defaults );
+	$defaults        = array(
+		'order'       => 'ASC',
+		'orderby'     => 'menu_order',
+		'post_type'   => 'nav_menu_item',
+		'post_status' => 'publish',
+		'output'      => ARRAY_A,
+		'output_key'  => 'menu_order',
+		'nopaging'    => true,
+	);
+	$args            = wp_parse_args( $args, $defaults );
 	$args['include'] = $items;
 
 	if ( ! empty( $items ) ) {
@@ -664,36 +695,47 @@
 
 	// Get all posts and terms at once to prime the caches
 	if ( empty( $fetched[ $menu->term_id ] ) && ! wp_using_ext_object_cache() ) {
-		$fetched[$menu->term_id] = true;
-		$posts = array();
-		$terms = array();
+		$fetched[ $menu->term_id ] = true;
+		$posts                     = array();
+		$terms                     = array();
 		foreach ( $items as $item ) {
 			$object_id = get_post_meta( $item->ID, '_menu_item_object_id', true );
-			$object    = get_post_meta( $item->ID, '_menu_item_object',    true );
-			$type      = get_post_meta( $item->ID, '_menu_item_type',      true );
+			$object    = get_post_meta( $item->ID, '_menu_item_object', true );
+			$type      = get_post_meta( $item->ID, '_menu_item_type', true );
 
-			if ( 'post_type' == $type )
-				$posts[$object][] = $object_id;
-			elseif ( 'taxonomy' == $type)
-				$terms[$object][] = $object_id;
+			if ( 'post_type' == $type ) {
+				$posts[ $object ][] = $object_id;
+			} elseif ( 'taxonomy' == $type ) {
+				$terms[ $object ][] = $object_id;
+			}
 		}
 
 		if ( ! empty( $posts ) ) {
-			foreach ( array_keys($posts) as $post_type ) {
-				get_posts( array('post__in' => $posts[$post_type], 'post_type' => $post_type, 'nopaging' => true, 'update_post_term_cache' => false) );
+			foreach ( array_keys( $posts ) as $post_type ) {
+				get_posts(
+					array(
+						'post__in'               => $posts[ $post_type ],
+						'post_type'              => $post_type,
+						'nopaging'               => true,
+						'update_post_term_cache' => false,
+					)
+				);
 			}
 		}
-		unset($posts);
+		unset( $posts );
 
 		if ( ! empty( $terms ) ) {
-			foreach ( array_keys($terms) as $taxonomy ) {
-				get_terms( $taxonomy, array(
-					'include' => $terms[ $taxonomy ],
-					'hierarchical' => false,
-				) );
+			foreach ( array_keys( $terms ) as $taxonomy ) {
+				get_terms(
+					$taxonomy,
+					array(
+						'include'      => $terms[ $taxonomy ],
+						'hierarchical' => false,
+					)
+				);
 			}
 		}
-		unset($terms);
+		unset( $terms );
 	}
 
 	$items = array_map( 'wp_setup_nav_menu_item', $items );
@@ -703,12 +745,15 @@
 	}
 
 	if ( ARRAY_A == $args['output'] ) {
-		$items = wp_list_sort( $items, array(
-			$args['output_key'] => 'ASC',
-		) );
-		$i = 1;
+		$items = wp_list_sort(
+			$items,
+			array(
+				$args['output_key'] => 'ASC',
+			)
+		);
+		$i     = 1;
 		foreach ( $items as $k => $item ) {
-			$items[$k]->{$args['output_key']} = $i++;
+			$items[ $k ]->{$args['output_key']} = $i++;
 		}
 	}
 
@@ -754,11 +799,11 @@
 function wp_setup_nav_menu_item( $menu_item ) {
 	if ( isset( $menu_item->post_type ) ) {
 		if ( 'nav_menu_item' == $menu_item->post_type ) {
-			$menu_item->db_id = (int) $menu_item->ID;
+			$menu_item->db_id            = (int) $menu_item->ID;
 			$menu_item->menu_item_parent = ! isset( $menu_item->menu_item_parent ) ? get_post_meta( $menu_item->ID, '_menu_item_menu_item_parent', true ) : $menu_item->menu_item_parent;
-			$menu_item->object_id = ! isset( $menu_item->object_id ) ? get_post_meta( $menu_item->ID, '_menu_item_object_id', true ) : $menu_item->object_id;
-			$menu_item->object = ! isset( $menu_item->object ) ? get_post_meta( $menu_item->ID, '_menu_item_object', true ) : $menu_item->object;
-			$menu_item->type = ! isset( $menu_item->type ) ? get_post_meta( $menu_item->ID, '_menu_item_type', true ) : $menu_item->type;
+			$menu_item->object_id        = ! isset( $menu_item->object_id ) ? get_post_meta( $menu_item->ID, '_menu_item_object_id', true ) : $menu_item->object_id;
+			$menu_item->object           = ! isset( $menu_item->object ) ? get_post_meta( $menu_item->ID, '_menu_item_object', true ) : $menu_item->object;
+			$menu_item->type             = ! isset( $menu_item->type ) ? get_post_meta( $menu_item->ID, '_menu_item_type', true ) : $menu_item->type;
 
 			if ( 'post_type' == $menu_item->type ) {
 				$object = get_post_type_object( $menu_item->object );
@@ -766,7 +811,7 @@
 					$menu_item->type_label = $object->labels->singular_name;
 				} else {
 					$menu_item->type_label = $menu_item->object;
-					$menu_item->_invalid = true;
+					$menu_item->_invalid   = true;
 				}
 
 				if ( 'trash' === get_post_status( $menu_item->object_id ) ) {
@@ -787,40 +832,41 @@
 				$menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title;
 
 			} elseif ( 'post_type_archive' == $menu_item->type ) {
-				$object =  get_post_type_object( $menu_item->object );
+				$object = get_post_type_object( $menu_item->object );
 				if ( $object ) {
-					$menu_item->title = '' == $menu_item->post_title ? $object->labels->archives : $menu_item->post_title;
+					$menu_item->title      = '' == $menu_item->post_title ? $object->labels->archives : $menu_item->post_title;
 					$post_type_description = $object->description;
 				} else {
-					$menu_item->_invalid = true;
+					$menu_item->_invalid   = true;
 					$post_type_description = '';
 				}
 
 				$menu_item->type_label = __( 'Post Type Archive' );
-				$post_content = wp_trim_words( $menu_item->post_content, 200 );
+				$post_content          = wp_trim_words( $menu_item->post_content, 200 );
 				$post_type_description = '' == $post_content ? $post_type_description : $post_content;
-				$menu_item->url = get_post_type_archive_link( $menu_item->object );
+				$menu_item->url        = get_post_type_archive_link( $menu_item->object );
 			} elseif ( 'taxonomy' == $menu_item->type ) {
 				$object = get_taxonomy( $menu_item->object );
 				if ( $object ) {
 					$menu_item->type_label = $object->labels->singular_name;
 				} else {
 					$menu_item->type_label = $menu_item->object;
-					$menu_item->_invalid = true;
+					$menu_item->_invalid   = true;
 				}
 
-				$term_url = get_term_link( (int) $menu_item->object_id, $menu_item->object );
-				$menu_item->url = !is_wp_error( $term_url ) ? $term_url : '';
+				$term_url       = get_term_link( (int) $menu_item->object_id, $menu_item->object );
+				$menu_item->url = ! is_wp_error( $term_url ) ? $term_url : '';
 
 				$original_title = get_term_field( 'name', $menu_item->object_id, $menu_item->object, 'raw' );
-				if ( is_wp_error( $original_title ) )
+				if ( is_wp_error( $original_title ) ) {
 					$original_title = false;
+				}
 				$menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title;
 
 			} else {
-				$menu_item->type_label = __('Custom Link');
-				$menu_item->title = $menu_item->post_title;
-				$menu_item->url = ! isset( $menu_item->url ) ? get_post_meta( $menu_item->ID, '_menu_item_url', true ) : $menu_item->url;
+				$menu_item->type_label = __( 'Custom Link' );
+				$menu_item->title      = $menu_item->post_title;
+				$menu_item->url        = ! isset( $menu_item->url ) ? get_post_meta( $menu_item->ID, '_menu_item_url', true ) : $menu_item->url;
 			}
 
 			$menu_item->target = ! isset( $menu_item->target ) ? get_post_meta( $menu_item->ID, '_menu_item_target', true ) : $menu_item->target;
@@ -846,15 +892,15 @@
 			}
 
 			$menu_item->classes = ! isset( $menu_item->classes ) ? (array) get_post_meta( $menu_item->ID, '_menu_item_classes', true ) : $menu_item->classes;
-			$menu_item->xfn = ! isset( $menu_item->xfn ) ? get_post_meta( $menu_item->ID, '_menu_item_xfn', true ) : $menu_item->xfn;
+			$menu_item->xfn     = ! isset( $menu_item->xfn ) ? get_post_meta( $menu_item->ID, '_menu_item_xfn', true ) : $menu_item->xfn;
 		} else {
-			$menu_item->db_id = 0;
+			$menu_item->db_id            = 0;
 			$menu_item->menu_item_parent = 0;
-			$menu_item->object_id = (int) $menu_item->ID;
-			$menu_item->type = 'post_type';
+			$menu_item->object_id        = (int) $menu_item->ID;
+			$menu_item->type             = 'post_type';
 
-			$object = get_post_type_object( $menu_item->post_type );
-			$menu_item->object = $object->name;
+			$object                = get_post_type_object( $menu_item->post_type );
+			$menu_item->object     = $object->name;
 			$menu_item->type_label = $object->labels->singular_name;
 
 			if ( '' === $menu_item->post_title ) {
@@ -862,8 +908,8 @@
 				$menu_item->post_title = sprintf( __( '#%d (no title)' ), $menu_item->ID );
 			}
 
-			$menu_item->title = $menu_item->post_title;
-			$menu_item->url = get_permalink( $menu_item->ID );
+			$menu_item->title  = $menu_item->post_title;
+			$menu_item->url    = get_permalink( $menu_item->ID );
 			$menu_item->target = '';
 
 			/** This filter is documented in wp-includes/nav-menu.php */
@@ -871,28 +917,28 @@
 
 			/** This filter is documented in wp-includes/nav-menu.php */
 			$menu_item->description = apply_filters( 'nav_menu_description', '' );
-			$menu_item->classes = array();
-			$menu_item->xfn = '';
+			$menu_item->classes     = array();
+			$menu_item->xfn         = '';
 		}
 	} elseif ( isset( $menu_item->taxonomy ) ) {
-		$menu_item->ID = $menu_item->term_id;
-		$menu_item->db_id = 0;
+		$menu_item->ID               = $menu_item->term_id;
+		$menu_item->db_id            = 0;
 		$menu_item->menu_item_parent = 0;
-		$menu_item->object_id = (int) $menu_item->term_id;
-		$menu_item->post_parent = (int) $menu_item->parent;
-		$menu_item->type = 'taxonomy';
+		$menu_item->object_id        = (int) $menu_item->term_id;
+		$menu_item->post_parent      = (int) $menu_item->parent;
+		$menu_item->type             = 'taxonomy';
 
-		$object = get_taxonomy( $menu_item->taxonomy );
-		$menu_item->object = $object->name;
+		$object                = get_taxonomy( $menu_item->taxonomy );
+		$menu_item->object     = $object->name;
 		$menu_item->type_label = $object->labels->singular_name;
 
-		$menu_item->title = $menu_item->name;
-		$menu_item->url = get_term_link( $menu_item, $menu_item->taxonomy );
-		$menu_item->target = '';
-		$menu_item->attr_title = '';
+		$menu_item->title       = $menu_item->name;
+		$menu_item->url         = get_term_link( $menu_item, $menu_item->taxonomy );
+		$menu_item->target      = '';
+		$menu_item->attr_title  = '';
 		$menu_item->description = get_term_field( 'description', $menu_item->term_id, $menu_item->taxonomy );
-		$menu_item->classes = array();
-		$menu_item->xfn = '';
+		$menu_item->classes     = array();
+		$menu_item->xfn         = '';
 
 	}
 
@@ -917,16 +963,16 @@
  * @return array The array of menu item IDs; empty array if none;
  */
 function wp_get_associated_nav_menu_items( $object_id = 0, $object_type = 'post_type', $taxonomy = '' ) {
-	$object_id = (int) $object_id;
+	$object_id     = (int) $object_id;
 	$menu_item_ids = array();
 
-	$query = new WP_Query;
+	$query      = new WP_Query;
 	$menu_items = $query->query(
 		array(
-			'meta_key' => '_menu_item_object_id',
-			'meta_value' => $object_id,
-			'post_status' => 'any',
-			'post_type' => 'nav_menu_item',
+			'meta_key'       => '_menu_item_object_id',
+			'meta_value'     => $object_id,
+			'post_status'    => 'any',
+			'post_type'      => 'nav_menu_item',
 			'posts_per_page' => -1,
 		)
 	);
@@ -958,7 +1004,6 @@
  * @access private
  *
  * @param int $object_id The ID of the original object being trashed.
- *
  */
 function _wp_delete_post_menu_item( $object_id = 0 ) {
 	$object_id = (int) $object_id;
@@ -1001,31 +1046,37 @@
  * @param object $post       The post object being transitioned from one status to another.
  */
 function _wp_auto_add_pages_to_menu( $new_status, $old_status, $post ) {
-	if ( 'publish' != $new_status || 'publish' == $old_status || 'page' != $post->post_type )
+	if ( 'publish' != $new_status || 'publish' == $old_status || 'page' != $post->post_type ) {
 		return;
-	if ( ! empty( $post->post_parent ) )
+	}
+	if ( ! empty( $post->post_parent ) ) {
 		return;
+	}
 	$auto_add = get_option( 'nav_menu_options' );
-	if ( empty( $auto_add ) || ! is_array( $auto_add ) || ! isset( $auto_add['auto_add'] ) )
+	if ( empty( $auto_add ) || ! is_array( $auto_add ) || ! isset( $auto_add['auto_add'] ) ) {
 		return;
+	}
 	$auto_add = $auto_add['auto_add'];
-	if ( empty( $auto_add ) || ! is_array( $auto_add ) )
+	if ( empty( $auto_add ) || ! is_array( $auto_add ) ) {
 		return;
+	}
 
 	$args = array(
 		'menu-item-object-id' => $post->ID,
-		'menu-item-object' => $post->post_type,
-		'menu-item-type' => 'post_type',
-		'menu-item-status' => 'publish',
+		'menu-item-object'    => $post->post_type,
+		'menu-item-type'      => 'post_type',
+		'menu-item-status'    => 'publish',
 	);
 
 	foreach ( $auto_add as $menu_id ) {
 		$items = wp_get_nav_menu_items( $menu_id, array( 'post_status' => 'publish,draft' ) );
-		if ( ! is_array( $items ) )
+		if ( ! is_array( $items ) ) {
 			continue;
+		}
 		foreach ( $items as $item ) {
-			if ( $post->ID == $item->object_id )
+			if ( $post->ID == $item->object_id ) {
 				continue 2;
+			}
 		}
 		wp_update_nav_menu_item( $menu_id, 0, $args );
 	}
@@ -1139,7 +1190,9 @@
 			foreach ( $registered_nav_menus as $new_location => $name ) {
 
 				// ...actually match!
-				if ( false === stripos( $new_location, $slug ) && false === stripos( $slug, $new_location ) ) {
+				if ( is_string( $new_location ) && false === stripos( $new_location, $slug ) && false === stripos( $slug, $new_location ) ) {
+					continue;
+				} elseif ( is_numeric( $new_location ) && $new_location !== $slug ) {
 					continue;
 				}
 
@@ -1150,7 +1203,9 @@
 					foreach ( $slug_group as $slug ) {
 
 						// ... have a match as well.
-						if ( false === stripos( $location, $slug ) && false === stripos( $slug, $location ) ) {
+						if ( is_string( $location ) && false === stripos( $location, $slug ) && false === stripos( $slug, $location ) ) {
+							continue;
+						} elseif ( is_numeric( $location ) && $location !== $slug ) {
 							continue;
 						}