PATH:
home
/
beestk
/
sdxgating
/
wp-includes
<?php /** * Meta API: WP_Metadata_Lazyloader class * * @package WordPress * @subpackage Meta * @since 4.5.0 */ /** * Core class used for lazy-loading object metadata. * * When loading many objects of a given type, such as posts in a WP_Query loop, it often makes * sense to prime various metadata caches at the beginning of the loop. This means fetching all * relevant metadata with a single database query, a technique that has the potential to improve * performance dramatically in some cases. * * In cases where the given metadata may not even be used in the loop, we can improve performance * even more by only priming the metadata cache for affected items the first time a piece of metadata * is requested - ie, by lazy-loading it. So, for example, comment meta may not be loaded into the * cache in the comments section of a post until the first time get_comment_meta() is called in the * context of the comment loop. * * WP uses the WP_Metadata_Lazyloader class to queue objects for metadata cache priming. The class * then detects the relevant get_*_meta() function call, and queries the metadata of all queued objects. * * Do not access this class directly. Use the wp_metadata_lazyloader() function. * * @since 4.5.0 */ class WP_Metadata_Lazyloader { /** * Pending objects queue. * * @since 4.5.0 * @var array */ protected $pending_objects; /** * Settings for supported object types. * * @since 4.5.0 * @var array */ protected $settings = array(); /** * Constructor. * * @since 4.5.0 */ public function __construct() { $this->settings = array( 'term' => array( 'filter' => 'get_term_metadata', 'callback' => array( $this, 'lazyload_term_meta' ), ), 'comment' => array( 'filter' => 'get_comment_metadata', 'callback' => array( $this, 'lazyload_comment_meta' ), ), ); } /** * Adds objects to the metadata lazy-load queue. * * @since 4.5.0 * * @param string $object_type Type of object whose meta is to be lazy-loaded. Accepts 'term' or 'comment'. * @param array $object_ids Array of object IDs. * @return bool|WP_Error True on success, WP_Error on failure. */ public function queue_objects( $object_type, $object_ids ) { if ( ! isset( $this->settings[ $object_type ] ) ) { return new WP_Error( 'invalid_object_type', __( 'Invalid object type' ) ); } $type_settings = $this->settings[ $object_type ]; if ( ! isset( $this->pending_objects[ $object_type ] ) ) { $this->pending_objects[ $object_type ] = array(); } foreach ( $object_ids as $object_id ) { // Keyed by ID for faster lookup. if ( ! isset( $this->pending_objects[ $object_type ][ $object_id ] ) ) { $this->pending_objects[ $object_type ][ $object_id ] = 1; } } add_filter( $type_settings['filter'], $type_settings['callback'] ); /** * Fires after objects are added to the metadata lazy-load queue. * * @since 4.5.0 * * @param array $object_ids Object IDs. * @param string $object_type Type of object being queued. * @param WP_Metadata_Lazyloader $lazyloader The lazy-loader object. */ do_action( 'metadata_lazyloader_queued_objects', $object_ids, $object_type, $this ); } /** * Resets lazy-load queue for a given object type. * * @since 4.5.0 * * @param string $object_type Object type. Accepts 'comment' or 'term'. * @return bool|WP_Error True on success, WP_Error on failure. */ public function reset_queue( $object_type ) { if ( ! isset( $this->settings[ $object_type ] ) ) { return new WP_Error( 'invalid_object_type', __( 'Invalid object type' ) ); } $type_settings = $this->settings[ $object_type ]; $this->pending_objects[ $object_type ] = array(); remove_filter( $type_settings['filter'], $type_settings['callback'] ); } /** * Lazy-loads term meta for queued terms. * * This method is public so that it can be used as a filter callback. As a rule, there * is no need to invoke it directly. * * @since 4.5.0 * * @param mixed $check The `$check` param passed from the 'get_term_metadata' hook. * @return mixed In order not to short-circuit `get_metadata()`. Generally, this is `null`, but it could be * another value if filtered by a plugin. */ public function lazyload_term_meta( $check ) { if ( ! empty( $this->pending_objects['term'] ) ) { update_termmeta_cache( array_keys( $this->pending_objects['term'] ) ); // No need to run again for this set of terms. $this->reset_queue( 'term' ); } return $check; } /** * Lazy-loads comment meta for queued comments. * * This method is public so that it can be used as a filter callback. As a rule, there is no need to invoke it * directly, from either inside or outside the `WP_Query` object. * * @since 4.5.0 * * @param mixed $check The `$check` param passed from the {@see 'get_comment_metadata'} hook. * @return mixed The original value of `$check`, so as not to short-circuit `get_comment_metadata()`. */ public function lazyload_comment_meta( $check ) { if ( ! empty( $this->pending_objects['comment'] ) ) { update_meta_cache( 'comment', array_keys( $this->pending_objects['comment'] ) ); // No need to run again for this set of comments. $this->reset_queue( 'comment' ); } return $check; } }
[+]
..
[-] class-wp-theme.php
[open]
[-] class-wp-list-util.php
[open]
[-] atomlib.php
[open]
[-] media-template.php
[open]
[-] class-wp-roles.php
[open]
[-] query.php
[open]
[-] post-thumbnail-template.php
[open]
[-] general-template.php
[open]
[-] class-wp-customize-section.php
[open]
[-] author-template.php
[open]
[-] class-walker-nav-menu.php
[open]
[-] spl-autoload-compat.php
[open]
[-] class-phpmailer.php
[open]
[-] class-wp-http-requests-response.php
[open]
[-] theme.php
[open]
[-] ms-default-constants.php
[open]
[-] session.php
[open]
[-] class-wp-post-type.php
[open]
[-] widgets.php
[open]
[-] nav-menu.php
[open]
[-] class-wp-customize-panel.php
[open]
[-] class-wp-feed-cache-transient.php
[open]
[-] pluggable.php
[open]
[-] link-template.php
[open]
[-] class-wp-query.php
[open]
[-] class-wp-user-meta-session-tokens.php
[open]
[-] class-wp-image-editor.php
[open]
[-] class-IXR.php
[open]
[-] registration.php
[open]
[-] locale.php
[open]
[-] class.wp-scripts.php
[open]
[-] rest-api.php
[open]
[-] wp-diff.php
[open]
[-] rss.php
[open]
[+]
js
[-] pluggable-deprecated.php
[open]
[-] class-wp-tax-query.php
[open]
[-] embed-template.php
[open]
[-] class-wp-dependency.php
[open]
[-] class-wp-oembed-controller.php
[open]
[-] class-phpass.php
[open]
[-] ms-deprecated.php
[open]
[-] class-wp-simplepie-sanitize-kses.php
[open]
[-] script-loader.php
[open]
[-] class-wp-user.php
[open]
[-] category-template.php
[open]
[-] functions.php
[open]
[-] rss-functions.php
[open]
[-] class-wp-comment-query.php
[open]
[-] l10n.php
[open]
[-] load.php
[open]
[-] capabilities.php
[open]
[+]
certificates
[-] nav-menu-template.php
[open]
[-] class-wp-locale.php
[open]
[-] vars.php
[open]
[-] wlwmanifest.xml
[open]
[-] class-walker-comment.php
[open]
[-] functions.wp-styles.php
[open]
[+]
IXR
[-] class-http.php
[open]
[+]
fonts
[-] class-walker-category-dropdown.php
[open]
[-] default-constants.php
[open]
[-] ms-default-filters.php
[open]
[+]
SimplePie
[-] cache.php
[open]
[-] class-wp-widget-factory.php
[open]
[-] class-wp-hook.php
[open]
[+]
Requests
[-] class-wp-network.php
[open]
[-] feed-rss.php
[open]
[-] feed.php
[open]
[-] formatting.php
[open]
[+]
images
[+]
rest-api
[-] class.wp-styles.php
[open]
[-] version.php
[open]
[-] update.php
[open]
[-] class-walker-page-dropdown.php
[open]
[-] class-wp-user-query.php
[open]
[-] class-wp-http-cookie.php
[open]
[-] class-walker-page.php
[open]
[-] class-wp-error.php
[open]
[-] http.php
[open]
[-] admin-bar.php
[open]
[-] class-wp-embed.php
[open]
[-] class-wp-metadata-lazyloader.php
[open]
[+]
widgets
[-] class-requests.php
[open]
[-] bookmark-template.php
[open]
[-] class-wp-editor.php
[open]
[-] class-wp-walker.php
[open]
[-] ms-load.php
[open]
[-] embed.php
[open]
[-] class-wp-text-diff-renderer-table.php
[open]
[-] feed-rss2-comments.php
[open]
[-] class-feed.php
[open]
[-] post.php
[open]
[-] class-wp-matchesmapregex.php
[open]
[-] post-formats.php
[open]
[-] class.wp-dependencies.php
[open]
[-] class-wp-session-tokens.php
[open]
[+]
pomo
[-] class-wp-admin-bar.php
[open]
[-] taxonomy.php
[open]
[-] default-widgets.php
[open]
[-] class-wp-locale-switcher.php
[open]
[-] shortcodes.php
[open]
[-] class-wp-site.php
[open]
[-] class-wp-site-query.php
[open]
[+]
customize
[+]
css
[-] class-wp-customize-nav-menus.php
[open]
[-] class-wp-rewrite.php
[open]
[-] canonical.php
[open]
[-] class-wp.php
[open]
[-] class-snoopy.php
[open]
[-] class-wp-http-proxy.php
[open]
[-] class-wp-comment.php
[open]
[-] default-filters.php
[open]
[-] date.php
[open]
[-] functions.wp-scripts.php
[open]
[-] wp-db.php
[open]
[-] class-wp-http-requests-hooks.php
[open]
[+]
ID3
[-] media.php
[open]
[-] kses.php
[open]
[-] feed-rdf.php
[open]
[-] template-loader.php
[open]
[-] user.php
[open]
[-] post-template.php
[open]
[-] class-simplepie.php
[open]
[-] rewrite.php
[open]
[-] class-wp-http-curl.php
[open]
[-] cron.php
[open]
[-] template.php
[open]
[-] comment.php
[open]
[-] class-wp-http-encoding.php
[open]
[-] class-wp-xmlrpc-server.php
[open]
[-] comment-template.php
[open]
[-] class-wp-customize-widgets.php
[open]
[-] class-wp-simplepie-file.php
[open]
[-] feed-atom-comments.php
[open]
[-] class-smtp.php
[open]
[-] class-wp-term.php
[open]
[-] meta.php
[open]
[+]
theme-compat
[-] class-wp-widget.php
[open]
[-] class-wp-image-editor-imagick.php
[open]
[-] class-wp-customize-control.php
[open]
[-] ms-files.php
[open]
[-] class-wp-customize-setting.php
[open]
[-] class-wp-network-query.php
[open]
[-] option.php
[open]
[-] class-wp-meta-query.php
[open]
[-] registration-functions.php
[open]
[-] ms-functions.php
[open]
[+]
random_compat
[-] class-wp-term-query.php
[open]
[-] ms-settings.php
[open]
[-] bookmark.php
[open]
[-] feed-atom.php
[open]
[-] class-wp-feed-cache.php
[open]
[-] class-wp-customize-manager.php
[open]
[-] plugin.php
[open]
[-] class-wp-image-editor-gd.php
[open]
[-] class-wp-http-ixr-client.php
[open]
[-] category.php
[open]
[-] revision.php
[open]
[-] class-wp-role.php
[open]
[-] class-wp-http-streams.php
[open]
[-] class-wp-ajax-response.php
[open]
[-] class-wp-text-diff-renderer-inline.php
[open]
[-] class-wp-taxonomy.php
[open]
[-] ms-blogs.php
[open]
[-] class-wp-post.php
[open]
[-] class-oembed.php
[open]
[-] class-pop3.php
[open]
[-] feed-rss2.php
[open]
[-] class-wp-http-response.php
[open]
[-] class-json.php
[open]
[-] compat.php
[open]
[-] deprecated.php
[open]
[+]
Text
[-] class-walker-category.php
[open]