Commit 3599b57f authored by Pascal Birchler's avatar Pascal Birchler
Browse files

Sitemaps: Replace `wp_sitemaps_register_providers` filter with more suitable...

Sitemaps: Replace `wp_sitemaps_register_providers` filter with more suitable `wp_sitemaps_add_provider` filter.

The previous filter failed the goal of allowing developers to filter all providers before they are registered, since it only filtered the built-in ones.

The more specific `wp_sitemaps_add_provider` filter enables exactly that, as it filters every sitemap provider right before it is added to the sitemaps registry.

Props pbiron, pfefferle, Chouby, swissspidy.
Fixes #50660.
Built from https://develop.svn.wordpress.org/trunk@48543


git-svn-id: https://core.svn.wordpress.org/trunk@48305 1a063a9b-81f0-0310-95a4-ce76da25c4cd
parent f9ee40a1
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -25,19 +25,32 @@ class WP_Sitemaps_Registry {
	private $providers = array();

	/**
	 * Adds a sitemap with route to the registry.
	 * Adds a new sitemap provider.
	 *
	 * @since 5.5.0
	 *
	 * @param string               $name     Name of the sitemap provider.
	 * @param WP_Sitemaps_Provider $provider Instance of a WP_Sitemaps_Provider.
	 * @return bool True if the provider was added, false if it is already registered.
	 * @return bool Whether the provider was added successfully.
	 */
	public function add_provider( $name, WP_Sitemaps_Provider $provider ) {
		if ( isset( $this->providers[ $name ] ) ) {
			return false;
		}

		/**
		 * Filters the sitemap provider before it is added.
		 *
		 * @since 5.5.0
		 *
		 * @param WP_Sitemaps_Provider $provider Instance of a WP_Sitemaps_Provider.
		 * @param string               $name     Name of the sitemap provider.
		 */
		$provider = apply_filters( 'wp_sitemaps_add_provider', $provider, $name );
		if ( ! $provider instanceof WP_Sitemaps_Provider ) {
			return false;
		}

		$this->providers[ $name ] = $provider;

		return true;
+4 −21
Original line number Diff line number Diff line
@@ -110,29 +110,12 @@ class WP_Sitemaps {
	 * @since 5.5.0
	 */
	public function register_sitemaps() {
		/**
		 * Filters the list of registered sitemap providers.
		 *
		 * @since 5.5.0
		 *
		 * @param array $providers {
		 *     Array of WP_Sitemaps_Provider objects keyed by their name.
		 *
		 *     @type WP_Sitemaps_Posts      $posts      The WP_Sitemaps_Posts object.
		 *     @type WP_Sitemaps_Taxonomies $taxonomies The WP_Sitemaps_Taxonomies object.
		 *     @type WP_Sitemaps_Users      $users      The WP_Sitemaps_Users object.
		 * }
		 */
		$providers = apply_filters(
			'wp_sitemaps_register_providers',
			array(
		$providers = array(
			'posts'      => new WP_Sitemaps_Posts(),
			'taxonomies' => new WP_Sitemaps_Taxonomies(),
			'users'      => new WP_Sitemaps_Users(),
			)
		);

		// Register each supported provider.
		/* @var WP_Sitemaps_Provider $provider */
		foreach ( $providers as $name => $provider ) {
			$this->registry->add_provider( $name, $provider );
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@
 *
 * @global string $wp_version
 */
$wp_version = '5.5-beta2-48542';
$wp_version = '5.5-beta2-48543';

/**
 * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.