[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/sitemaps/providers/ -> class-wp-sitemaps-users.php (source)

   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 URL information 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           * Returning 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[]|null $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 for a user sitemap before it is generated.
 103           *
 104           * Returning 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|null $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  }


Generated: Thu Nov 21 01:00:03 2024 Cross-referenced by PHPXref 0.7.1