*/ public function get_url_list( $page_num, $object_subtype = '' ): array { if ( SingleEventPage::get_mode() === 'off' ) { return []; } $container = Container::get_instance(); $event_repo = $container->get_event_repository(); $per_page = wp_sitemaps_get_max_urls( $this->object_type ); $offset = ( $page_num - 1 ) * $per_page; $events = $event_repo->findByAccessLevel( 'P', $per_page, $offset ); $urls = []; foreach ( $events as $event ) { // A pending submission is never advertised, whoever is asking. if ( 'TENTATIVE' === $event->status() ) { continue; } // Skip events whose creator opted out of single event pages if ( SingleEventPage::creator_opted_out( $event->createdBy() ) ) { continue; } $slug = sanitize_title( $event->name() ); $loc = home_url( 'webcalendar/event/' . $event->id()->value() . '-' . $slug . '/' ); $entry = [ 'loc' => $loc ]; $mod_date = $event->modDate(); if ( $mod_date !== null && $mod_date > 0 ) { $mod_time = $event->modTime() ?? 0; $date_str = sprintf( '%08d', $mod_date ); $time_str = $mod_time > 0 ? sprintf( '%06d', $mod_time ) : '000000'; $entry['lastmod'] = substr( $date_str, 0, 4 ) . '-' . substr( $date_str, 4, 2 ) . '-' . substr( $date_str, 6, 2 ) . 'T' . substr( $time_str, 0, 2 ) . ':' . substr( $time_str, 2, 2 ) . ':' . substr( $time_str, 4, 2 ) . '+00:00'; } $urls[] = $entry; } return $urls; } /** * Get the total number of sitemap pages for events. * * @param string $object_subtype Not used. * @return int */ public function get_max_num_pages( $object_subtype = '' ): int { if ( SingleEventPage::get_mode() === 'off' ) { return 0; } $container = Container::get_instance(); $event_repo = $container->get_event_repository(); $count = $event_repo->countByAccessLevel( 'P' ); $per_page = wp_sitemaps_get_max_urls( $this->object_type ); return (int) ceil( $count / $per_page ); } }