$additionalPage ), 'changefreq' => $additionalPage->frequency->value, 'priority' => $additionalPage->priority->value, 'isTimezone' => true ]; } $postTypes = aioseo()->sitemap->helpers->includedPostTypes(); $shouldIncludeHomepage = 'posts' === get_option( 'show_on_front' ) || ! in_array( 'page', $postTypes, true ); if ( $shouldIncludeHomepage ) { $frontPageId = (int) get_option( 'page_on_front' ); $frontPageUrl = aioseo()->helpers->localizedUrl( '/' ); $post = aioseo()->helpers->getPost( $frontPageId ); $homepageEntry = [ 'loc' => aioseo()->helpers->maybeRemoveTrailingSlash( $frontPageUrl ), 'lastmod' => $post ? aioseo()->helpers->dateTimeToIso8601( $post->post_modified_gmt ) : aioseo()->sitemap->helpers->lastModifiedPostTime(), 'changefreq' => aioseo()->sitemap->priority->frequency( 'homePage' ), 'priority' => aioseo()->sitemap->priority->priority( 'homePage' ) ]; $translatedHomepages = aioseo()->helpers->wpmlHomePages(); foreach ( $translatedHomepages as $languageCode => $translatedHomepage ) { if ( untrailingslashit( $translatedHomepage['url'] ) !== untrailingslashit( $homepageEntry['loc'] ) ) { $homepageEntry['languages'][] = [ 'language' => $languageCode, 'location' => $translatedHomepage['url'] ]; } } // Add homepage to the first position. array_unshift( $entries, $homepageEntry ); } if ( aioseo()->options->sitemap->general->additionalPages->enable ) { $entries = apply_filters( 'aioseo_sitemap_additional_pages', $entries ); } if ( empty( $entries ) ) { return []; } if ( aioseo()->options->sitemap->general->indexes && $shouldChunk ) { $entries = aioseo()->sitemap->helpers->chunkEntries( $entries ); $entries = $entries[ aioseo()->sitemap->pageNumber ]; } return $entries; } /** * Returns all author archive entries. * * @since 4.0.0 * * @return array The sitemap entries. */ public function author() { if ( ! aioseo()->sitemap->helpers->lastModifiedPost() || ! aioseo()->options->sitemap->general->author || ! aioseo()->options->searchAppearance->archives->author->show || ( ! aioseo()->options->searchAppearance->archives->author->advanced->robotsMeta->default && aioseo()->options->searchAppearance->archives->author->advanced->robotsMeta->noindex ) || ( aioseo()->options->searchAppearance->archives->author->advanced->robotsMeta->default && ( ! aioseo()->options->searchAppearance->advanced->globalRobotsMeta->default && aioseo()->options->searchAppearance->advanced->globalRobotsMeta->noindex ) ) ) { return []; } // Allow users to filter the authors in case their sites use a membership plugin or have custom code that affect the authors on their site. // e.g. there might be additional roles/conditions that need to be checked here. $authors = apply_filters( 'aioseo_sitemap_authors', [] ); if ( empty( $authors ) ) { $usersTableName = aioseo()->core->db->db->users; // We get the table name from WPDB since multisites share the same table. $authors = aioseo()->core->db->start( "$usersTableName as u", true ) ->select( 'u.ID as ID, u.user_nicename as nicename, MAX(p.post_modified_gmt) as lastModified' ) ->join( 'posts as p', 'u.ID = p.post_author' ) ->where( 'p.post_status', 'publish' ) ->whereIn( 'p.post_type', aioseo()->sitemap->helpers->getAuthorPostTypes() ) ->groupBy( 'u.ID' ) ->orderBy( 'lastModified DESC' ) ->limit( aioseo()->sitemap->linksPerIndex, aioseo()->sitemap->pageNumber * aioseo()->sitemap->linksPerIndex ) ->run() ->result(); } if ( empty( $authors ) ) { return []; } $entries = []; foreach ( $authors as $authorData ) { $nicename = $authorData->nicename ? $authorData->nicename : null; $entries[] = [ 'loc' => ! empty( $authorData->authorUrl ) ? $authorData->authorUrl : get_author_posts_url( $authorData->ID, $nicename ), 'lastmod' => aioseo()->helpers->dateTimeToIso8601( $authorData->lastModified ), 'changefreq' => aioseo()->sitemap->priority->frequency( 'author' ), 'priority' => aioseo()->sitemap->priority->priority( 'author' ) ]; } return apply_filters( 'aioseo_sitemap_author_archives', $entries ); } /** * Returns all data archive entries. * * @since 4.0.0 * * @return array The sitemap entries. */ public function date() { if ( ! aioseo()->sitemap->helpers->lastModifiedPost() || ! aioseo()->options->sitemap->general->date || ! aioseo()->options->searchAppearance->archives->date->show || ( ! aioseo()->options->searchAppearance->archives->date->advanced->robotsMeta->default && aioseo()->options->searchAppearance->archives->date->advanced->robotsMeta->noindex ) || ( aioseo()->options->searchAppearance->archives->date->advanced->robotsMeta->default && ( ! aioseo()->options->searchAppearance->advanced->globalRobotsMeta->default && aioseo()->options->searchAppearance->advanced->globalRobotsMeta->noindex ) ) ) { return []; } $postsTable = aioseo()->core->db->db->posts; $dates = aioseo()->core->db->execute( "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, post_modified_gmt FROM {$postsTable} WHERE post_type = 'post' AND post_status = 'publish' GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date ASC LIMIT 50000", true )->result(); if ( empty( $dates ) ) { return []; } $entries = []; $year = ''; foreach ( $dates as $date ) { $entry = [ 'lastmod' => aioseo()->helpers->dateTimeToIso8601( $date->post_modified_gmt ), 'changefreq' => aioseo()->sitemap->priority->frequency( 'date' ), 'priority' => aioseo()->sitemap->priority->priority( 'date' ), ]; // Include each year only once. if ( $year !== $date->year ) { $year = $date->year; $entry['loc'] = get_year_link( $date->year ); $entries[] = $entry; } $entry['loc'] = get_month_link( $date->year, $date->month ); $entries[] = $entry; } return apply_filters( 'aioseo_sitemap_date_archives', $entries ); } /** * Returns all entries for the RSS Sitemap. * * @since 4.0.0 * * @return array The sitemap entries. */ public function rss() { $posts = aioseo()->sitemap->query->posts( aioseo()->sitemap->helpers->includedPostTypes(), [ 'orderBy' => '`p`.`post_modified_gmt` DESC' ] ); if ( ! count( $posts ) ) { return []; } $entries = []; foreach ( $posts as $post ) { $entry = [ 'guid' => get_permalink( $post->ID ), 'title' => get_the_title( $post ), 'description' => get_post_field( 'post_excerpt', $post->ID ), 'pubDate' => aioseo()->helpers->dateTimeToRfc822( $post->post_modified_gmt ) ]; $entries[] = apply_filters( 'aioseo_sitemap_post_rss', $entry, $post->ID, $post->post_type, 'post' ); } usort( $entries, function( $a, $b ) { return $a['pubDate'] < $b['pubDate'] ? 1 : 0; }); return apply_filters( 'aioseo_sitemap_rss', $entries ); } }