ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

class-wp-sitemaps-users.php (4085B)


      1 <?php
      2 /**
      3  * Sitemaps: WP_Sitemaps_Users class
      4  *
      5  * Builds the sitemaps for the 'user' object type.
      6  *
      7  * @package WordPress
      8  * @subpackage Sitemaps
      9  * @since 5.5.0
     10  */
     11 
     12 /**
     13  * Users XML sitemap provider.
     14  *
     15  * @since 5.5.0
     16  */
     17 class WP_Sitemaps_Users extends WP_Sitemaps_Provider {
     18 	/**
     19 	 * WP_Sitemaps_Users constructor.
     20 	 *
     21 	 * @since 5.5.0
     22 	 */
     23 	public function __construct() {
     24 		$this->name        = 'users';
     25 		$this->object_type = 'user';
     26 	}
     27 
     28 	/**
     29 	 * Gets a URL list for a user sitemap.
     30 	 *
     31 	 * @since 5.5.0
     32 	 *
     33 	 * @param int    $page_num       Page of results.
     34 	 * @param string $object_subtype Optional. Not applicable for Users but
     35 	 *                               required for compatibility with the parent
     36 	 *                               provider class. Default empty.
     37 	 * @return array Array of URLs for a sitemap.
     38 	 */
     39 	public function get_url_list( $page_num, $object_subtype = '' ) {
     40 		/**
     41 		 * Filters the users URL list before it is generated.
     42 		 *
     43 		 * Passing a non-null value will effectively short-circuit the generation,
     44 		 * returning that value instead.
     45 		 *
     46 		 * @since 5.5.0
     47 		 *
     48 		 * @param array  $url_list The URL list. Default null.
     49 		 * @param int    $page_num Page of results.
     50 		 */
     51 		$url_list = apply_filters(
     52 			'wp_sitemaps_users_pre_url_list',
     53 			null,
     54 			$page_num
     55 		);
     56 
     57 		if ( null !== $url_list ) {
     58 			return $url_list;
     59 		}
     60 
     61 		$args          = $this->get_users_query_args();
     62 		$args['paged'] = $page_num;
     63 
     64 		$query    = new WP_User_Query( $args );
     65 		$users    = $query->get_results();
     66 		$url_list = array();
     67 
     68 		foreach ( $users as $user ) {
     69 			$sitemap_entry = array(
     70 				'loc' => get_author_posts_url( $user->ID ),
     71 			);
     72 
     73 			/**
     74 			 * Filters the sitemap entry for an individual user.
     75 			 *
     76 			 * @since 5.5.0
     77 			 *
     78 			 * @param array   $sitemap_entry Sitemap entry for the user.
     79 			 * @param WP_User $user          User object.
     80 			 */
     81 			$sitemap_entry = apply_filters( 'wp_sitemaps_users_entry', $sitemap_entry, $user );
     82 			$url_list[]    = $sitemap_entry;
     83 		}
     84 
     85 		return $url_list;
     86 	}
     87 
     88 	/**
     89 	 * Gets the max number of pages available for the object type.
     90 	 *
     91 	 * @since 5.5.0
     92 	 *
     93 	 * @see WP_Sitemaps_Provider::max_num_pages
     94 	 *
     95 	 * @param string $object_subtype Optional. Not applicable for Users but
     96 	 *                               required for compatibility with the parent
     97 	 *                               provider class. Default empty.
     98 	 * @return int Total page count.
     99 	 */
    100 	public function get_max_num_pages( $object_subtype = '' ) {
    101 		/**
    102 		 * Filters the max number of pages before it is generated.
    103 		 *
    104 		 * Passing a non-null value will effectively short-circuit the generation,
    105 		 * returning that value instead.
    106 		 *
    107 		 * @since 5.5.0
    108 		 *
    109 		 * @param int $max_num_pages The maximum number of pages. Default null.
    110 		 */
    111 		$max_num_pages = apply_filters( 'wp_sitemaps_users_pre_max_num_pages', null );
    112 
    113 		if ( null !== $max_num_pages ) {
    114 			return $max_num_pages;
    115 		}
    116 
    117 		$args  = $this->get_users_query_args();
    118 		$query = new WP_User_Query( $args );
    119 
    120 		$total_users = $query->get_total();
    121 
    122 		return (int) ceil( $total_users / wp_sitemaps_get_max_urls( $this->object_type ) );
    123 	}
    124 
    125 	/**
    126 	 * Returns the query args for retrieving users to list in the sitemap.
    127 	 *
    128 	 * @since 5.5.0
    129 	 *
    130 	 * @return array Array of WP_User_Query arguments.
    131 	 */
    132 	protected function get_users_query_args() {
    133 		$public_post_types = get_post_types(
    134 			array(
    135 				'public' => true,
    136 			)
    137 		);
    138 
    139 		// We're not supporting sitemaps for author pages for attachments.
    140 		unset( $public_post_types['attachment'] );
    141 
    142 		/**
    143 		 * Filters the query arguments for authors with public posts.
    144 		 *
    145 		 * Allows modification of the authors query arguments before querying.
    146 		 *
    147 		 * @see WP_User_Query for a full list of arguments
    148 		 *
    149 		 * @since 5.5.0
    150 		 *
    151 		 * @param array $args Array of WP_User_Query arguments.
    152 		 */
    153 		$args = apply_filters(
    154 			'wp_sitemaps_users_query_args',
    155 			array(
    156 				'has_published_posts' => array_keys( $public_post_types ),
    157 				'number'              => wp_sitemaps_get_max_urls( $this->object_type ),
    158 			)
    159 		);
    160 
    161 		return $args;
    162 	}
    163 }