/** | |
* Sitemaps: WP_Sitemaps_Users class | |
* | |
* Builds the sitemaps for the 'user' object type. | |
* | |
* @package WordPress | |
* @subpackage Sitemaps | |
* @since 5.5.0 | |
*/ | |
/** | |
* Users XML sitemap provider. | |
* | |
* @since 5.5.0 | |
*/ | |
class WP_Sitemaps_Users extends WP_Sitemaps_Provider { | |
/** | |
* WP_Sitemaps_Users constructor. | |
* | |
* @since 5.5.0 | |
*/ | |
public function __construct() { | |
$this->name = 'users'; | |
$this->object_type = 'user'; | |
} | |
/** | |
* Gets a URL list for a user sitemap. | |
* | |
* @since 5.5.0 | |
* | |
* @param int $page_num Page of results. | |
* @param string $object_subtype Optional. Not applicable for Users but | |
* required for compatibility with the parent | |
* provider class. Default empty. | |
* @return array[] Array of URL information for a sitemap. | |
*/ | |
public function get_url_list( $page_num, $object_subtype = '' ) { | |
/** | |
* Filters the users URL list before it is generated. | |
* | |
* Returning a non-null value will effectively short-circuit the generation, | |
* returning that value instead. | |
* | |
* @since 5.5.0 | |
* | |
* @param array[]|null $url_list The URL list. Default null. | |
* @param int $page_num Page of results. | |
*/ | |
$url_list = apply_filters( | |
'wp_sitemaps_users_pre_url_list', | |
null, | |
$page_num | |
); | |
if ( null !== $url_list ) { | |
return $url_list; | |
} | |
$args = $this->get_users_query_args(); | |
$args['paged'] = $page_num; | |
$query = new WP_User_Query( $args ); | |
$users = $query->get_results(); | |
$url_list = array(); | |
foreach ( $users as $user ) { | |
$sitemap_entry = array( | |
'loc' => get_author_posts_url( $user->ID ), | |
); | |
/** | |
* Filters the sitemap entry for an individual user. | |
* | |
* @since 5.5.0 | |
* | |
* @param array $sitemap_entry Sitemap entry for the user. | |
* @param WP_User $user User object. | |
*/ | |
$sitemap_entry = apply_filters( 'wp_sitemaps_users_entry', $sitemap_entry, $user ); | |
$url_list[] = $sitemap_entry; | |
} | |
return $url_list; | |
} | |
/** | |
* Gets the max number of pages available for the object type. | |
* | |
* @since 5.5.0 | |
* | |
* @see WP_Sitemaps_Provider::max_num_pages | |
* | |
* @param string $object_subtype Optional. Not applicable for Users but | |
* required for compatibility with the parent | |
* provider class. Default empty. | |
* @return int Total page count. | |
*/ | |
public function get_max_num_pages( $object_subtype = '' ) { | |
/** | |
* Filters the max number of pages for a user sitemap before it is generated. | |
* | |
* Returning a non-null value will effectively short-circuit the generation, | |
* returning that value instead. | |
* | |
* @since 5.5.0 | |
* | |
* @param int|null $max_num_pages The maximum number of pages. Default null. | |
*/ | |
$max_num_pages = apply_filters( 'wp_sitemaps_users_pre_max_num_pages', null ); | |
if ( null !== $max_num_pages ) { | |
return $max_num_pages; | |
} | |
$args = $this->get_users_query_args(); | |
$query = new WP_User_Query( $args ); | |
$total_users = $query->get_total(); | |
return (int) ceil( $total_users / wp_sitemaps_get_max_urls( $this->object_type ) ); | |
} | |
/** | |
* Returns the query args for retrieving users to list in the sitemap. | |
* | |
* @since 5.5.0 | |
* | |
* @return array Array of WP_User_Query arguments. | |
*/ | |
protected function get_users_query_args() { | |
$public_post_types = get_post_types( | |
array( | |
'public' => true, | |
) | |
); | |
// We're not supporting sitemaps for author pages for attachments and pages. | |
unset( $public_post_types['attachment'] ); | |
unset( $public_post_types['page'] ); | |
/** | |
* Filters the query arguments for authors with public posts. | |
* | |
* Allows modification of the authors query arguments before querying. | |
* | |
* @see WP_User_Query for a full list of arguments | |
* | |
* @since 5.5.0 | |
* | |
* @param array $args Array of WP_User_Query arguments. | |
*/ | |
$args = apply_filters( | |
'wp_sitemaps_users_query_args', | |
array( | |
'has_published_posts' => array_keys( $public_post_types ), | |
'number' => wp_sitemaps_get_max_urls( $this->object_type ), | |
) | |
); | |
return $args; | |
} | |
} | |