WPSEO_Taxonomy_Sitemap_Provider::get_sitemap_links()publicYoast 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() Yoast 22.4

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;
}