WP_Rewrite::page_uri_index()publicWP 2.5.0

Retrieves all pages and attachments for pages URIs.

The attachments are for those that have pages as parents and will be retrieved.

Method of the class: WP_Rewrite{}

No Hooks.

Return

Array. Array of page URIs as first element and attachment URIs as second element.

Usage

global $wp_rewrite;
$wp_rewrite->page_uri_index();

Notes

  • Global. wpdb. $wpdb WordPress database abstraction object.

Changelog

Since 2.5.0 Introduced.

WP_Rewrite::page_uri_index() code WP 6.5.2

public function page_uri_index() {
	global $wpdb;

	// Get pages in order of hierarchy, i.e. children after parents.
	$pages = $wpdb->get_results( "SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'page' AND post_status != 'auto-draft'" );
	$posts = get_page_hierarchy( $pages );

	// If we have no pages get out quick.
	if ( ! $posts ) {
		return array( array(), array() );
	}

	// Now reverse it, because we need parents after children for rewrite rules to work properly.
	$posts = array_reverse( $posts, true );

	$page_uris            = array();
	$page_attachment_uris = array();

	foreach ( $posts as $id => $post ) {
		// URL => page name.
		$uri         = get_page_uri( $id );
		$attachments = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = %d", $id ) );
		if ( ! empty( $attachments ) ) {
			foreach ( $attachments as $attachment ) {
				$attach_uri                          = get_page_uri( $attachment->ID );
				$page_attachment_uris[ $attach_uri ] = $attachment->ID;
			}
		}

		$page_uris[ $uri ] = $id;
	}

	return array( $page_uris, $page_attachment_uris );
}