diff --git src/wp-includes/class-wp-customize-nav-menus.php src/wp-includes/class-wp-customize-nav-menus.php
index 7d32cbb..a70986e 100644
--- src/wp-includes/class-wp-customize-nav-menus.php
+++ src/wp-includes/class-wp-customize-nav-menus.php
@@ -72,24 +72,52 @@ final class WP_Customize_Nav_Menus {
 		if ( ! current_user_can( 'edit_theme_options' ) ) {
 			wp_send_json_error( array( 'message' => __( 'Error: invalid user capabilities.' ) ) );
 		}
+
 		if ( empty( $_POST['obj_type'] ) || empty( $_POST['type'] ) ) {
 			wp_send_json_error( array( 'message' => __( 'Missing obj_type or type param.' ) ) );
 		}
 
-		$obj_type = sanitize_key( $_POST['obj_type'] );
-		if ( ! in_array( $obj_type, array( 'post_type', 'taxonomy' ) ) ) {
-			wp_send_json_error( array( 'message' => __( 'Invalid obj_type param: ' . $obj_type ) ) );
+		if ( empty( $_POST['page'] ) ) {
+			$_POST['page'] = 0;
+		}
+
+		$items = $this->load_available_items_query( $_POST['obj_type'], $_POST['type'], $_POST['page'] );
+
+		if ( is_wp_error( $items ) ) {
+			wp_send_json_error( array( 'message' => wp_strip_all_tags( $items->get_error_message(), true ) ) );
 		}
-		$taxonomy_or_post_type = sanitize_key( $_POST['type'] );
-		$page = isset( $_POST['page'] ) ? absint( $_POST['page'] ) : 0;
+
+		wp_send_json_success( array( 'items' => $items ) );
+	}
+
+	/**
+	 * Performs the post_type and taxonomy queries for loading available menu items.
+	 *
+	 * @since 4.3.0
+	 *
+	 * @param string $obj_type Optional. Accepts 'post_type' or 'taxonomy'. Default is 'post_type'.
+	 * @param string $obj_name Optional. Accepts any registered taxonomy or post type name. Default is 'page'.
+	 * @param int $page Optional. The page number used to generate the query offset. Default is '0'.
+	 * @return WP_Error|array Returns either a WP_Error object or an array of menu items.
+	 */
+	public function load_available_items_query( $obj_type = 'post_type', $obj_name = 'page', $page = 0 ) {
 		$items = array();
 
+		// Sanitize params
+		$obj_type = sanitize_key( $obj_type );
+		$obj_name = sanitize_key( $obj_name );
+		$page     = absint( $page );
+
+		if ( ! in_array( $obj_type, array( 'post_type', 'taxonomy' ) ) ) {
+			return new WP_Error( 'invalid_obj_type', __( 'Invalid obj_type param: ' . $obj_type ) );
+		}
+
 		if ( 'post_type' === $obj_type ) {
-			if ( ! get_post_type_object( $taxonomy_or_post_type ) ) {
-				wp_send_json_error( array( 'message' => __( 'Unknown post type.' ) ) );
+			if ( ! get_post_type_object( $obj_name ) ) {
+				return new WP_Error( 'unknown_post_type', __( 'Unknown post type.' ) );
 			}
 
-			if ( 0 === $page && 'page' === $taxonomy_or_post_type ) {
+			if ( 0 === $page && 'page' === $obj_name ) {
 				// Add "Home" link. Treat as a page, but switch to custom on add.
 				$items[] = array(
 					'id'         => 'home',
@@ -106,7 +134,7 @@ final class WP_Customize_Nav_Menus {
 				'offset'      => 10 * $page,
 				'orderby'     => 'date',
 				'order'       => 'DESC',
-				'post_type'   => $taxonomy_or_post_type,
+				'post_type'   => $obj_name,
 			) );
 			foreach ( $posts as $post ) {
 				$post_title = $post->post_title;
@@ -125,7 +153,7 @@ final class WP_Customize_Nav_Menus {
 				);
 			}
 		} elseif ( 'taxonomy' === $obj_type ) {
-			$terms = get_terms( $taxonomy_or_post_type, array(
+			$terms = get_terms( $obj_name, array(
 				'child_of'     => 0,
 				'exclude'      => '',
 				'hide_empty'   => false,
@@ -138,7 +166,7 @@ final class WP_Customize_Nav_Menus {
 				'pad_counts'   => false,
 			) );
 			if ( is_wp_error( $terms ) ) {
-				wp_send_json_error( array( 'message' => wp_strip_all_tags( $terms->get_error_message(), true ) ) );
+				return $terms;
 			}
 
 			foreach ( $terms as $term ) {
@@ -154,7 +182,7 @@ final class WP_Customize_Nav_Menus {
 			}
 		}
 
-		wp_send_json_success( array( 'items' => $items ) );
+		return $items;
 	}
 
 	/**
@@ -178,12 +206,12 @@ final class WP_Customize_Nav_Menus {
 		}
 
 		$s = sanitize_text_field( wp_unslash( $_POST['search'] ) );
-		$results = $this->search_available_items_query( array( 'pagenum' => $p, 's' => $s ) );
+		$items = $this->search_available_items_query( array( 'pagenum' => $p, 's' => $s ) );
 
-		if ( empty( $results ) ) {
-			wp_send_json_error( array( 'message' => __( 'No results found.' ) ) );
+		if ( empty( $items ) ) {
+			wp_send_json_error( array( 'message' => __( 'No menu items found.' ) ) );
 		} else {
-			wp_send_json_success( array( 'items' => $results ) );
+			wp_send_json_success( array( 'items' => $items ) );
 		}
 	}
 
@@ -195,10 +223,10 @@ final class WP_Customize_Nav_Menus {
 	 * @since 4.3.0
 	 *
 	 * @param array $args Optional. Accepts 'pagenum' and 's' (search) arguments.
-	 * @return array Results.
+	 * @return array Menu items.
 	 */
 	public function search_available_items_query( $args = array() ) {
-		$results = array();
+		$items = array();
 
 		$post_type_objects = get_post_types( array( 'show_in_nav_menus' => true ), 'objects' );
 		$query = array(
@@ -228,7 +256,7 @@ final class WP_Customize_Nav_Menus {
 					/* translators: %d: ID of a post */
 					$post_title = sprintf( __( '#%d (no title)' ), $post->ID );
 				}
-				$results[] = array(
+				$items[] = array(
 					'id'         => 'post-' . $post->ID,
 					'title'      => html_entity_decode( $post_title, ENT_QUOTES, get_bloginfo( 'charset' ) ),
 					'type'       => 'post_type',
@@ -251,7 +279,7 @@ final class WP_Customize_Nav_Menus {
 		// Check if any taxonomies were found.
 		if ( ! empty( $terms ) ) {
 			foreach ( $terms as $term ) {
-				$results[] = array(
+				$items[] = array(
 					'id'         => 'term-' . $term->term_id,
 					'title'      => html_entity_decode( $term->name, ENT_QUOTES, get_bloginfo( 'charset' ) ),
 					'type'       => 'taxonomy',
@@ -263,7 +291,7 @@ final class WP_Customize_Nav_Menus {
 			}
 		}
 
-		return $results;
+		return $items;
 	}
 
 	/**
diff --git tests/phpunit/tests/customize/nav-menus.php tests/phpunit/tests/customize/nav-menus.php
index 7c0ee3d..0b4c5c4 100644
--- tests/phpunit/tests/customize/nav-menus.php
+++ tests/phpunit/tests/customize/nav-menus.php
@@ -49,25 +49,163 @@ class Test_WP_Customize_Nav_Menus extends WP_UnitTestCase {
 	}
 
 	/**
-	 * Test the test_load_available_items_ajax method.
+	 * Test that the load_available_items_query method returns a WP_Error object.
 	 *
-	 * @see WP_Customize_Nav_Menus::load_available_items_ajax()
+	 * @see WP_Customize_Nav_Menus::load_available_items_query()
 	 */
-	function test_load_available_items_ajax() {
+	function test_load_available_items_query_returns_wp_error() {
+		$menus = new WP_Customize_Nav_Menus( $this->wp_customize );
+
+		// Invalid $obj_type.
+		$items = $menus->load_available_items_query( 'invalid' );
+		$this->assertInstanceOf( 'WP_Error', $items );
+
+		// Invalid post type $obj_name.
+		$items = $menus->load_available_items_query( 'post_type', 'invalid' );
+		$this->assertInstanceOf( 'WP_Error', $items );
+
+		// Invalid taxonomy $obj_name.
+		$items = $menus->load_available_items_query( 'taxonomy', 'invalid' );
+		$this->assertInstanceOf( 'WP_Error', $items );
+	}
+
+	/**
+	 * Test the load_available_items_query method maybe returns the home page item.
+	 *
+	 * @see WP_Customize_Nav_Menus::load_available_items_query()
+	 */
+	function test_load_available_items_query_maybe_returns_home() {
+		$menus = new WP_Customize_Nav_Menus( $this->wp_customize );
+
+		// Expected menu item array.
+		$expected = array(
+			'id'         => 'home',
+			'title'      => _x( 'Home', 'nav menu home label' ),
+			'type'       => 'custom',
+			'type_label' => __( 'Custom Link' ),
+			'object'     => '',
+			'url'        => home_url(),
+		);
+
+		// Create pages.
+		$this->factory->post->create_many( 15, array( 'post_type' => 'page' ) );
+
+		// Home is included in menu items when page is zero.
+		$items = $menus->load_available_items_query( 'post_type', 'page', 0 );
+		$this->assertContains( $expected, $items );
+
+		// Home is not included in menu items when page is larger than zero.
+		$items = $menus->load_available_items_query( 'post_type', 'page', 1 );
+		$this->assertNotEmpty( $items );
+		$this->assertNotContains( $expected, $items );
+	}
+
+	/**
+	 * Test the load_available_items_query method returns post item.
+	 *
+	 * @see WP_Customize_Nav_Menus::load_available_items_query()
+	 */
+	function test_load_available_items_query_returns_post_item_with_page_number() {
+		$menus = new WP_Customize_Nav_Menus( $this->wp_customize );
+
+		// Create page.
+		$post_id = $this->factory->post->create( array( 'post_title' => 'Post Title' ) );
+
+		// Create pages.
+		$this->factory->post->create_many( 10 );
+
+		// Expected menu item array.
+		$expected = array(
+			'id'         => "post-{$post_id}",
+			'title'      => 'Post Title',
+			'type'       => 'post_type',
+			'type_label' => 'Post',
+			'object'     => 'post',
+			'object_id'  => intval( $post_id ),
+			'url'        => get_permalink( intval( $post_id ) ),
+		);
+
+		// Offset the query and get the second page of menu items.
+		$items = $menus->load_available_items_query( 'post_type', 'post', 1 );
+		$this->assertContains( $expected, $items );
+	}
 
-		$this->markTestIncomplete( 'This test has not been implemented.' );
+	/**
+	 * Test the load_available_items_query method returns page item.
+	 *
+	 * @see WP_Customize_Nav_Menus::load_available_items_query()
+	 */
+	function test_load_available_items_query_returns_page_item() {
+		$menus = new WP_Customize_Nav_Menus( $this->wp_customize );
+
+		// Create page.
+		$page_id = $this->factory->post->create( array( 'post_title' => 'Page Title', 'post_type' => 'page' ) );
+
+		// Expected menu item array.
+		$expected = array(
+			'id'         => "post-{$page_id}",
+			'title'      => 'Page Title',
+			'type'       => 'post_type',
+			'type_label' => 'Page',
+			'object'     => 'page',
+			'object_id'  => intval( $page_id ),
+			'url'        => get_permalink( intval( $page_id ) ),
+		);
 
+		$items = $menus->load_available_items_query( 'post_type', 'page', 0 );
+		$this->assertContains( $expected, $items );
 	}
 
 	/**
-	 * Test the search_available_items_ajax method.
+	 * Test the load_available_items_query method returns post item.
 	 *
-	 * @see WP_Customize_Nav_Menus::search_available_items_ajax()
+	 * @see WP_Customize_Nav_Menus::load_available_items_query()
 	 */
-	function test_search_available_items_ajax() {
+	function test_load_available_items_query_returns_post_item() {
+		$menus = new WP_Customize_Nav_Menus( $this->wp_customize );
+
+		// Create post.
+		$post_id = $this->factory->post->create( array( 'post_title' => 'Post Title' ) );
 
-		$this->markTestIncomplete( 'This test has not been implemented.' );
+		// Expected menu item array.
+		$expected = array(
+			'id'         => "post-{$post_id}",
+			'title'      => 'Post Title',
+			'type'       => 'post_type',
+			'type_label' => 'Post',
+			'object'     => 'post',
+			'object_id'  => intval( $post_id ),
+			'url'        => get_permalink( intval( $post_id ) ),
+		);
 
+		$items = $menus->load_available_items_query( 'post_type', 'post', 0 );
+		$this->assertContains( $expected, $items );
+	}
+
+	/**
+	 * Test the load_available_items_query method returns term item.
+	 *
+	 * @see WP_Customize_Nav_Menus::load_available_items_query()
+	 */
+	function test_load_available_items_query_returns_term_item() {
+		$menus = new WP_Customize_Nav_Menus( $this->wp_customize );
+
+		// Create term.
+		$term_id = $this->factory->category->create( array( 'name' => 'Term Title' ) );
+
+		// Expected menu item array.
+		$expected = array(
+			'id'         => "term-{$term_id}",
+			'title'      => 'Term Title',
+			'type'       => 'taxonomy',
+			'type_label' => 'Category',
+			'object'     => 'category',
+			'object_id'  => intval( $term_id ),
+			'url'        => get_term_link( intval( $term_id ), 'category' ),
+		);
+
+		$items = $menus->load_available_items_query( 'taxonomy', 'category', 0 );
+		$this->assertContains( $expected, $items );
 	}
 
 	/**
@@ -449,14 +587,4 @@ class Test_WP_Customize_Nav_Menus extends WP_UnitTestCase {
 
 	}
 
-	/**
-	 * Test the render_menu method.
-	 *
-	 * @see WP_Customize_Nav_Menus::render_menu()
-	 */
-	function test_render_menu() {
-
-		$this->markTestIncomplete( 'This test has not been implemented.' );
-	}
-
 }
