ą1%^/V= ‚QĄ#^/V ’’’’0‚3&^/V0’’’’‚ ż$^/V`@=PƒZP­"^/VP0=`ƒs`u"^/V` ’’’’ƒ+ą1%^/V`=pƒQp°"^/Vpš<€ƒQ Ó"^/V€’’’’ƒ ž!^/V@’’’’’’’’ƒ*pĘ!^/V <’’’’ƒ&^/V ’’’’ƒ %^/V ’’’’°„3&^/V0°’’’’„`Ž!^/Vp0<X…=°Ź%^/V0P…u°Ź%^/V `…up !^/V’’’’’’’’Š…&^/V@Š’’’’…p-&^/V@’’’’šŒ¾€6"^/Vš€;Œ`u"^/V€’’’’Œ+€_%^/V@P;’’’’€_%^/V0@;’’’’Ž ž!^/Vą’’’’’’’’Œ*ą1%^/V@;0QPŲ5±!VPq@PŲ5±!Vš`q@PŲ5±!Vąpq@PŲ5±!VŠ€q@PŲ5±!VĄq@PŲ5±!V° q@@Ó5±!V€ r=@Ā9±!VPPru y5±!V’’’’’’’’0r<Ą:±!V°0’’’’rP^:±!V°’’’’PtšŠ6±!VP€Pt/0y9±!V°š`tRpG7±!V`ąpt 6±!Vp’’’’Pt4Š6±!VPąPt/@Ó5±!VА t=0y9±!V°€€(tRšĮ6±!V€PtA y5±!V’’’’’’’’t<0†6±!V’’’’ t 6±!V ’’’’Pt4Ą‡6±!VP ’’’’t+@Ó5±!V€Š @u=` 6±!VĄ PuA y5±!V’’’’’’’’°u< p7±!V°’’’’’’’’u>@Ó5±!VŠp Hx=0y9±!V°` ĄPxRšĮ6±!VĄPxA y5±!V’’’’’’’’Šx<Ą:±!VĄŠ’’’’xĄ 9±!VpĄ’’’’z+@Ó5±!VŠ h{=0y9±!V°Ą šp{RšĮ6±!VšP{A y5±!V’’’’’’’’{<Ą:±!VĄ’’’’{Ą 9±!V`’’’’~+0™:±!VА’’’’@J5±!V’’’’’’’’~*Ą#9±!V``0€.°K9±!V`Š @€ 6±!V@’’’’0€4Ą‡6±!V0`’’’’€+@Š5±!V’’’’€ ˆ;€Ū8±!V’’’’’’’’d€9±!V°` P‘^š#8±!VPP¹0D:±!V``B0D:±!V€pB0D:±!V €B y5±!V’’’’’’’’`<Ą:±!VŠ`’’’’@J5±!V@’’’’’’’’€*§9±!VŠp ’’’’ƒĄ°5±!VŠ’’’’ †ĶąD7±!V@  †Ą‡6±!V `’’’’†+0y9±!V° °؇Rą:±!Vа’’’’‡Ą°5±!VŠ’’’’Š ŠĶąD7±!VŠĄ ąŠĄ‡6±!Vą ’’’’Š+@Ó5±!VĄ Ą‹=@Ó5±!Vp€ Č‹=@Ó5±!Vp Š‹=0y9±!V°` šŲ‹RšĮ6±!VšP‹A y5±!V’’’’’’’’‹<@8±!VP‹u` 6±!Vš`‹An5±!V’’’’’’’’‹@8±!VP‹u y5±!V’’’’’’’’ ‹<Ą:±!VŠ ’’’’‹@Ó5±!V@`š—=` 6±!VPP—A µ9±!VĄ@@—GšĮ6±!V@`—A0y9±!V°Pų—RšĮ6±!VPp—A y5±!V’’’’’’’’`—<Ą:±!Vą`’’’’—§9±!Vš ’’’’™0>9±!VąšMąy7±!V ąšNą:±!V ’’’’š`J9±!V0Ą›Ą‡6±!VĄĄ’’’’›+@Ó5±!V@›=@Ā9±!VP›u y5±!V’’’’’’’’Š›<pt7±!VŠ’’’’ą›@J5±!V ’’’’’’’’›*@Ó5±!VĄp›=@Ā9±!VP›u y5±!V’’’’’’’’š›<pt7±!Vš’’’’ą›ą:±!Vą’’’’›@Ó5±!VĄą œ=@Ā9±!VPœu y5±!V’’’’’’’’œ<p&6±!V œ0£6±!V €0œŌ6±!V0@œ0£6±!V@PPœ°Ā9±!VšP’’’’œ@J5±!V@ż’’’’’’’’’’š*€’6±!V’’’’’’’’šph8±!V’’’’ą€Ÿ6 ^7±!V€š€Ÿ7P%7±!V€°€Ÿ7 ^7±!V€Š€Ÿ7U7±!V€€pŸ8ą:±!V p’’’’Ÿ@Ó5±!VP(°=` 6±!V@P°A@Ā9±!V `°u@Ā9±!VPp°u@Ā9±!V`€°u@Ā9±!Vp°u@Ā9±!V€ °u@Ā9±!V°°u@Ā9±!V Ą°u y5±!V’’’’’’’’Ą°< p7±!VĄ’’’’’’’’°>µ5±!V’’’’’’’’’’’’±>$tax_name . '-sitemap' . $current_page . '.xml' ), 'lastmod' => $date, ]; } } return $index; } /** * Get set of sitemap link data. * * @param string $type Sitemap type. * @param int $max_entries Entries per sitemap. * @param int $current_page Current page of the sitemap. * * @return array * * @throws OutOfBoundsException When an invalid page is requested. */ public function get_sitemap_links( $type, $max_entries, $current_page ) { global $wpdb; $links = []; if ( ! $this->handles_type( $type ) ) { return $links; } $taxonomy = get_taxonomy( $type ); $steps = $max_entries; $offset = ( $current_page > 1 ) ? ( ( $current_page - 1 ) * $max_entries ) : 0; /** This filter is documented in inc/sitemaps/class-taxonomy-sitemap-provider.php */ $hide_empty = apply_filters( 'wpseo_sitemap_exclude_empty_terms', true, [ $taxonomy->name ] ); /** This filter is documented in inc/sitemaps/class-taxonomy-sitemap-provider.php */ $hide_empty_tax = apply_filters( 'wpseo_sitemap_exclude_empty_terms_taxonomy', $hide_empty, $taxonomy->name ); $terms = get_terms( [ 'taxonomy' => $taxonomy->name, 'hide_empty' => $hide_empty_tax, 'update_term_meta_cache' => false, 'offset' => $offset, 'number' => $steps, ] ); // If there are no terms fetched for this range, we are on an invalid page. if ( empty( $terms ) ) { throw new OutOfBoundsException( 'Invalid sitemap page requested' ); } $post_statuses = array_map( 'esc_sql', WPSEO_Sitemaps::get_post_statuses() ); // Grab last modified date. $sql = " SELECT MAX(p.post_modified_gmt) AS lastmod FROM $wpdb->posts AS p INNER JOIN $wpdb->term_relationships AS term_rel ON term_rel.object_id = p.ID INNER JOIN $wpdb->term_taxonomy AS term_tax ON term_tax.term_taxonomy_id = term_rel.term_taxonomy_id AND term_tax.taxonomy = %s AND term_tax.term_id = %d WHERE p.post_status IN ('" . implode( "','", $post_statuses ) . "') AND p.post_password = '' "; /** * Filter: 'wpseo_exclude_from_sitemap_by_term_ids' - Allow excluding terms by ID. * * @api array $terms_to_exclude The terms to exclude. */ $terms_to_exclude = apply_filters( 'wpseo_exclude_from_sitemap_by_term_ids', [] ); foreach ( $terms as $term ) { if ( in_array( $term->term_id, $terms_to_exclude, true ) ) { continue; } $url = []; $tax_noindex = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'noindex' ); if ( $tax_noindex === 'noindex' ) { continue; } $url['loc'] = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'canonical' ); if ( ! is_string( $url['loc'] ) || $url['loc'] === '' ) { $url['loc'] = get_term_link( $term, $term->taxonomy ); } $url['mod'] = $wpdb->get_var( $wpdb->prepare( $sql, $term->taxonomy, $term->term_id ) ); if ( $this->include_images ) { $url['images'] = $this->get_image_parser()->get_term_images( $term ); } // Deprecated, kept for backwards data compat. R. $url['chf'] = 'daily'; $url['pri'] = 1; /** This filter is documented at inc/sitemaps/class-post-type-sitemap-provider.php */ $url = apply_filters( 'wpseo_sitemap_entry', $url, 'term', $term ); if ( ! empty( $url ) ) { $links[] = $url; } } return $links; } /** * Check if taxonomy by name is valid to appear in sitemaps. * * @param string $taxonomy_name Taxonomy name to check. * * @return bool */ public function is_valid_taxonomy( $taxonomy_name ) { if ( WPSEO_Options::get( "noindex-tax-{$taxonomy_name}" ) === true ) { return false; } if ( in_array( $taxonomy_name, [ 'link_category', 'nav_menu' ], true ) ) { return false; } if ( $taxonomy_name === 'post_format' && WPSEO_Options::get( 'disable-post_format', false ) ) { return false; } /** * Filter to exclude the taxonomy from the XML sitemap. * * @param bool $exclude Defaults to false. * @param string $taxonomy_name Name of the taxonomy to exclude.. */ if ( apply_filters( 'wpseo_sitemap_exclude_taxonomy', false, $taxonomy_name ) ) { return false; } return true; } /** * Get the Image Parser. * * @return WPSEO_Sitemap_Image_Parser */ protected function get_image_parser() { if ( ! isset( self::$image_parser ) ) { self::$image_parser = new WPSEO_Sitemap_Image_Parser(); } return self::$image_parser; } }