WPSEO_Taxonomy_Sitemap_Provider::get_sitemap_links() │ public │ Yoast 1.0
Get set of sitemap link data.
Метод класса: WPSEO_Taxonomy_Sitemap_Provider{}
Возвращает
Массив
.
Использование
$WPSEO_Taxonomy_Sitemap_Provider = new WPSEO_Taxonomy_Sitemap_Provider();
$WPSEO_Taxonomy_Sitemap_Provider->get_sitemap_links( $type, $max_entries, $current_page );
- $type(строка) (обязательный)
- Sitemap type.
- $max_entries(int) (обязательный)
- Entries per sitemap.
- $current_page(int) (обязательный)
- Current page of the sitemap.
Код WPSEO_Taxonomy_Sitemap_Provider::get_sitemap_links() WPSEO Taxonomy Sitemap Provider::get sitemap links
Yoast 24.9
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() );
$replacements = array_merge(
[
'post_modified_gmt',
$wpdb->posts,
$wpdb->term_relationships,
'object_id',
'ID',
$wpdb->term_taxonomy,
'term_taxonomy_id',
'term_taxonomy_id',
'taxonomy',
'term_id',
'post_status',
],
$post_statuses,
[ 'post_password' ]
);
/**
* Filter: 'wpseo_exclude_from_sitemap_by_term_ids' - Allow excluding terms by ID.
*
* @param 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;
}
$canonical = WPSEO_Taxonomy_Meta::get_term_meta( $term, $term->taxonomy, 'canonical' );
$url['loc'] = get_term_link( $term, $term->taxonomy );
if ( is_string( $canonical ) && $canonical !== '' && $canonical !== $url['loc'] ) {
continue;
}
$current_replacements = $replacements;
array_splice( $current_replacements, 9, 0, $term->taxonomy );
array_splice( $current_replacements, 11, 0, $term->term_id );
//phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- We need to use a direct query here.
//phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching -- Reason: No relevant caches.
$url['mod'] = $wpdb->get_var(
//phpcs:disable WordPress.DB.PreparedSQLPlaceholders -- %i placeholder is still not recognized.
$wpdb->prepare(
'
SELECT MAX(p.%i) AS lastmod
FROM %i AS p
INNER JOIN %i AS term_rel
ON term_rel.%i = p.%i
INNER JOIN %i AS term_tax
ON term_tax.%i = term_rel.%i
AND term_tax.%i = %s
AND term_tax.%i = %d
WHERE p.%i IN (' . implode( ', ', array_fill( 0, count( $post_statuses ), '%s' ) ) . ")
AND p.%i = ''
",
$current_replacements
)
);
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;
}