Title: WP_Sitemaps_Provider
Published: August 11, 2020
Last modified: May 20, 2026

---

# class WP_Sitemaps_Provider {}

## In this article

 * [Methods](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#methods)
 * [Source](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#changelog)
 * [User Contributed Notes](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#user-contributed-notes)

[ Back to top](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#wp--skip-link--target)

Class [WP_Sitemaps_Provider](https://developer.wordpress.org/reference/classes/wp_sitemaps_provider/).

## 󠀁[Methods](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#methods)󠁿

| Name | Description | 
| [WP_Sitemaps_Provider::get_max_num_pages](https://developer.wordpress.org/reference/classes/wp_sitemaps_provider/get_max_num_pages/) | Gets the max number of pages available for the object type. | 
| [WP_Sitemaps_Provider::get_object_subtypes](https://developer.wordpress.org/reference/classes/wp_sitemaps_provider/get_object_subtypes/) | Returns the list of supported object subtypes exposed by the provider. | 
| [WP_Sitemaps_Provider::get_sitemap_entries](https://developer.wordpress.org/reference/classes/wp_sitemaps_provider/get_sitemap_entries/) | Lists sitemap pages exposed by this provider. | 
| [WP_Sitemaps_Provider::get_sitemap_type_data](https://developer.wordpress.org/reference/classes/wp_sitemaps_provider/get_sitemap_type_data/) | Gets data about each sitemap type. | 
| [WP_Sitemaps_Provider::get_sitemap_url](https://developer.wordpress.org/reference/classes/wp_sitemaps_provider/get_sitemap_url/) | Gets the URL of a sitemap entry. | 
| [WP_Sitemaps_Provider::get_url_list](https://developer.wordpress.org/reference/classes/wp_sitemaps_provider/get_url_list/) | Gets a URL list for a sitemap. |

## 󠀁[Source](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#source)󠁿

    ```php
    #[AllowDynamicProperties]
    abstract class WP_Sitemaps_Provider {
    	/**
    	 * Provider name.
    	 *
    	 * This will also be used as the public-facing name in URLs.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @var string
    	 */
    	protected $name = '';

    	/**
    	 * Object type name (e.g. 'post', 'term', 'user').
    	 *
    	 * @since 5.5.0
    	 *
    	 * @var string
    	 */
    	protected $object_type = '';

    	/**
    	 * Gets a URL list for a sitemap.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @param int    $page_num       Page of results.
    	 * @param string $object_subtype Optional. Object subtype name. Default empty.
    	 * @return array[] Array of URL information for a sitemap.
    	 */
    	abstract public function get_url_list( $page_num, $object_subtype = '' );

    	/**
    	 * Gets the max number of pages available for the object type.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @param string $object_subtype Optional. Object subtype. Default empty.
    	 * @return int Total number of pages.
    	 */
    	abstract public function get_max_num_pages( $object_subtype = '' );

    	/**
    	 * Gets data about each sitemap type.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @return array[] Array of sitemap types including object subtype name and number of pages.
    	 */
    	public function get_sitemap_type_data() {
    		$sitemap_data = array();

    		$object_subtypes = $this->get_object_subtypes();

    		/*
    		 * If there are no object subtypes, include a single sitemap for the
    		 * entire object type.
    		 */
    		if ( empty( $object_subtypes ) ) {
    			$sitemap_data[] = array(
    				'name'  => '',
    				'pages' => $this->get_max_num_pages(),
    			);
    			return $sitemap_data;
    		}

    		// Otherwise, include individual sitemaps for every object subtype.
    		foreach ( $object_subtypes as $object_subtype_name => $data ) {
    			$object_subtype_name = (string) $object_subtype_name;

    			$sitemap_data[] = array(
    				'name'  => $object_subtype_name,
    				'pages' => $this->get_max_num_pages( $object_subtype_name ),
    			);
    		}

    		return $sitemap_data;
    	}

    	/**
    	 * Lists sitemap pages exposed by this provider.
    	 *
    	 * The returned data is used to populate the sitemap entries of the index.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @return array[] Array of sitemap entries.
    	 */
    	public function get_sitemap_entries() {
    		$sitemaps = array();

    		$sitemap_types = $this->get_sitemap_type_data();

    		foreach ( $sitemap_types as $type ) {
    			for ( $page = 1; $page <= $type['pages']; $page++ ) {
    				$sitemap_entry = array(
    					'loc' => $this->get_sitemap_url( $type['name'], $page ),
    				);

    				/**
    				 * Filters the sitemap entry for the sitemap index.
    				 *
    				 * @since 5.5.0
    				 *
    				 * @param array  $sitemap_entry  Sitemap entry for the post.
    				 * @param string $object_type    Object empty name.
    				 * @param string $object_subtype Object subtype name.
    				 *                               Empty string if the object type does not support subtypes.
    				 * @param int    $page           Page number of results.
    				 */
    				$sitemap_entry = apply_filters( 'wp_sitemaps_index_entry', $sitemap_entry, $this->object_type, $type['name'], $page );

    				$sitemaps[] = $sitemap_entry;
    			}
    		}

    		return $sitemaps;
    	}

    	/**
    	 * Gets the URL of a sitemap entry.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
    	 *
    	 * @param string $name The name of the sitemap.
    	 * @param int    $page The page of the sitemap.
    	 * @return string The composed URL for a sitemap entry.
    	 */
    	public function get_sitemap_url( $name, $page ) {
    		global $wp_rewrite;

    		// Accounts for cases where name is not included, ex: sitemaps-users-1.xml.
    		$params = array_filter(
    			array(
    				'sitemap'         => $this->name,
    				'sitemap-subtype' => $name,
    				'paged'           => $page,
    			)
    		);

    		$basename = sprintf(
    			'/wp-sitemap-%1$s.xml',
    			implode( '-', $params )
    		);

    		if ( ! $wp_rewrite->using_permalinks() ) {
    			$basename = '/?' . http_build_query( $params, '', '&' );
    		}

    		return home_url( $basename );
    	}

    	/**
    	 * Returns the list of supported object subtypes exposed by the provider.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @return array List of object subtypes objects keyed by their name.
    	 */
    	public function get_object_subtypes() {
    		return array();
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/sitemaps/class-wp-sitemaps-provider.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/sitemaps/class-wp-sitemaps-provider.php#L17)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/sitemaps/class-wp-sitemaps-provider.php#L17-L182)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#related)󠁿

| Used by | Description | 
| [WP_Sitemaps_Users](https://developer.wordpress.org/reference/classes/wp_sitemaps_users/)`wp-includes/sitemaps/providers/class-wp-sitemaps-users.php` |

Users XML sitemap provider.

  | 
| [WP_Sitemaps_Taxonomies](https://developer.wordpress.org/reference/classes/wp_sitemaps_taxonomies/)`wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php` |

Taxonomies XML sitemap provider.

  | 
| [WP_Sitemaps_Posts](https://developer.wordpress.org/reference/classes/wp_sitemaps_posts/)`wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php` |

Posts XML sitemap provider.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#changelog)󠁿

| Version | Description | 
| [5.5.0](https://developer.wordpress.org/reference/since/5.5.0/) | Introduced. |

## 󠀁[User Contributed Notes](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#user-contributed-notes)󠁿

 1.  [Skip to note 2 content](https://developer.wordpress.org/reference/classes/WP_Sitemaps_Provider/?output_format=md#comment-content-7256)
 2.   [pcarvalho](https://profiles.wordpress.org/pcarvalho/)  [  2 years ago  ](https://developer.wordpress.org/reference/classes/wp_sitemaps_provider/#comment-7256)
 3. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_sitemaps_provider%2F%23comment-7256)
    Vote results for this note: 0[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_sitemaps_provider%2F%23comment-7256)
 4. beware when extending this class, the property $name must be letters only
 5.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_sitemaps_provider%2F%3Freplytocom%3D7256%23feedback-editor-7256)

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_sitemaps_provider%2F)
before being able to contribute a note or feedback.