wp_queue_posts_for_term_meta_lazyload( WP_Post[] $posts )

Queues posts for lazy-loading of term meta.


Parameters

$posts WP_Post[] Required
Array of WP_Post objects.

Top ↑

Source

File: wp-includes/post.php. View all references

function wp_queue_posts_for_term_meta_lazyload( $posts ) {
	$post_type_taxonomies = array();
	$prime_post_terms     = array();
	foreach ( $posts as $post ) {
		if ( ! ( $post instanceof WP_Post ) ) {
			continue;
		}

		if ( ! isset( $post_type_taxonomies[ $post->post_type ] ) ) {
			$post_type_taxonomies[ $post->post_type ] = get_object_taxonomies( $post->post_type );
		}

		foreach ( $post_type_taxonomies[ $post->post_type ] as $taxonomy ) {
			$prime_post_terms[ $taxonomy ][] = $post->ID;
		}
	}

	$term_ids = array();
	if ( $prime_post_terms ) {
		$prime_term_ids     = array();
		$prime_taxonomy_ids = array();
		foreach ( $prime_post_terms as $taxonomy => $post_ids ) {
			$cached_term_ids = wp_cache_get_multiple( $post_ids, "{$taxonomy}_relationships" );
			if ( is_array( $cached_term_ids ) ) {
				$cached_term_ids = array_filter( $cached_term_ids );
				foreach ( $cached_term_ids as $_term_ids ) {
					// Backward compatibility for if a plugin is putting objects into the cache, rather than IDs.
					foreach ( $_term_ids as $term_id ) {
						if ( is_numeric( $term_id ) ) {
							$prime_term_ids[]                  = (int) $term_id;
							$prime_taxonomy_ids[ $taxonomy ][] = (int) $term_id;
						} elseif ( isset( $term_id->term_id ) ) {
							$prime_taxonomy_ids[ $taxonomy ][] = (int) $term_id->term_id;
							$prime_term_ids[]                  = (int) $term_id->term_id;
						}
					}
				}
			}
		}

		if ( $prime_term_ids ) {
			$prime_term_ids = array_unique( $prime_term_ids );
			// Do not prime term meta at this point, let the lazy loader take care of that.
			_prime_term_caches( $prime_term_ids, false );

			foreach ( $prime_taxonomy_ids as $taxonomy => $_term_ids ) {
				foreach ( $_term_ids as $term_id ) {
					if ( in_array( $term_id, $term_ids, true ) ) {
						continue;
					}
					$term = get_term( $term_id, $taxonomy );
					if ( is_wp_error( $term ) ) {
						continue;
					}

					$term_ids[] = $term_id;
				}
			}
		}
	}

	if ( $term_ids ) {
		$lazyloader = wp_metadata_lazyloader();
		$lazyloader->queue_objects( 'term', $term_ids );
	}
}


Top ↑

Changelog

Changelog
Version Description
4.5.0 Introduced.

Top ↑

User Contributed Notes

You must log in before being able to contribute a note or feedback.