WPSEO_Post_Type_Sitemap_Provider::get_posts()protectedYoast 1.0

Retrieve set of posts with optimized query routine.

Метод класса: WPSEO_Post_Type_Sitemap_Provider{}

Хуки из метода

Возвращает

Объект[].

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->get_posts( $post_type, $count, $offset );
$post_type(строка) (обязательный)
Post type to retrieve.
$count(int) (обязательный)
Count of posts to retrieve.
$offset(int) (обязательный)
Starting offset.

Код WPSEO_Post_Type_Sitemap_Provider::get_posts() Yoast 22.4

protected function get_posts( $post_type, $count, $offset ) {

	global $wpdb;

	static $filters = [];

	if ( ! isset( $filters[ $post_type ] ) ) {
		// Make sure you're wpdb->preparing everything you throw into this!!
		$filters[ $post_type ] = [
			/**
			 * Filter JOIN query part for the post type.
			 *
			 * @param string $join      SQL part, defaults to false.
			 * @param string $post_type Post type name.
			 */
			'join'  => apply_filters( 'wpseo_posts_join', false, $post_type ),

			/**
			 * Filter WHERE query part for the post type.
			 *
			 * @param string $where     SQL part, defaults to false.
			 * @param string $post_type Post type name.
			 */
			'where' => apply_filters( 'wpseo_posts_where', false, $post_type ),
		];
	}

	$join_filter  = $filters[ $post_type ]['join'];
	$where_filter = $filters[ $post_type ]['where'];
	$where        = $this->get_sql_where_clause( $post_type );

	/*
	 * Optimized query per this thread:
	 * {@link http://wordpress.org/support/topic/plugin-wordpress-seo-by-yoast-performance-suggestion}.
	 * Also see {@link http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/}.
	 */
	$sql = "
		SELECT l.ID, post_title, post_content, post_name, post_parent, post_author, post_status, post_modified_gmt, post_date, post_date_gmt
		FROM (
			SELECT {$wpdb->posts}.ID
			FROM {$wpdb->posts}
			{$join_filter}
			{$where}
				{$where_filter}
			ORDER BY {$wpdb->posts}.post_modified ASC LIMIT %d OFFSET %d
		)
		o JOIN {$wpdb->posts} l ON l.ID = o.ID
	";

	$posts = $wpdb->get_results( $wpdb->prepare( $sql, $count, $offset ) );

	$post_ids = [];

	foreach ( $posts as $post_index => $post ) {
		$post->post_type      = $post_type;
		$sanitized_post       = sanitize_post( $post, 'raw' );
		$posts[ $post_index ] = new WP_Post( $sanitized_post );

		$post_ids[] = $sanitized_post->ID;
	}

	update_meta_cache( 'post', $post_ids );

	return $posts;
}