From e9579b3ed50e4190b504a800bffdbae206d76dd5 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Tue, 20 Oct 2015 18:22:41 +0000 Subject: [PATCH] Site Icon: Get site icon ID only when needed. Cuts down on unnecessary queries, especially in environments that rely on post meta a lot. Reverts [32997]. Props ap.koponen, swissspidy. Fixes #34368. git-svn-id: https://develop.svn.wordpress.org/trunk@35299 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-site-icon.php | 8 +++++--- tests/phpunit/tests/image/site_icon.php | 16 ++++++++++++++++ tests/phpunit/tests/post/getPostClass.php | 5 +---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/wp-admin/includes/class-wp-site-icon.php b/src/wp-admin/includes/class-wp-site-icon.php index 42e2ca69a9..8c06db6459 100644 --- a/src/wp-admin/includes/class-wp-site-icon.php +++ b/src/wp-admin/includes/class-wp-site-icon.php @@ -229,10 +229,12 @@ class WP_Site_Icon { * @return array|null|string The attachment metadata value, array of values, or null. */ public function get_post_metadata( $value, $post_id, $meta_key, $single ) { - $site_icon_id = get_option( 'site_icon' ); + if ( $single && '_wp_attachment_backup_sizes' === $meta_key ) { + $site_icon_id = get_option( 'site_icon' ); - if ( $post_id == $site_icon_id && '_wp_attachment_backup_sizes' == $meta_key && $single ) { - add_filter( 'intermediate_image_sizes', array( $this, 'intermediate_image_sizes' ) ); + if ( $post_id == $site_icon_id ) { + add_filter( 'intermediate_image_sizes', array( $this, 'intermediate_image_sizes' ) ); + } } return $value; diff --git a/tests/phpunit/tests/image/site_icon.php b/tests/phpunit/tests/image/site_icon.php index e634ee9fde..cd30bf618a 100644 --- a/tests/phpunit/tests/image/site_icon.php +++ b/tests/phpunit/tests/image/site_icon.php @@ -127,6 +127,22 @@ class Tests_WP_Site_Icon extends WP_UnitTestCase { $this->assertFalse( get_option( 'site_icon', false ) ); } + /** + * @ticket 34368 + */ + function test_get_post_metadata() { + $attachment_id = $this->_insert_attachment(); + update_option( 'site_icon', $attachment_id ); + + $this->wp_site_icon->get_post_metadata( '', $attachment_id, '_some_post_meta', true ); + $this->assertFalse( has_filter( 'intermediate_image_sizes', array( $this->wp_site_icon, 'intermediate_image_sizes' ) ) ); + + $this->wp_site_icon->get_post_metadata( '', $attachment_id, '_wp_attachment_backup_sizes', true ); + $this->assertSame( 10, has_filter( 'intermediate_image_sizes', array( $this->wp_site_icon, 'intermediate_image_sizes' ) ) ); + + wp_delete_attachment( $attachment_id, true ); + } + function _custom_test_sizes( $sizes ) { $sizes[] = 321; diff --git a/tests/phpunit/tests/post/getPostClass.php b/tests/phpunit/tests/post/getPostClass.php index 33371140b1..4e3c802f53 100644 --- a/tests/phpunit/tests/post/getPostClass.php +++ b/tests/phpunit/tests/post/getPostClass.php @@ -120,9 +120,6 @@ class Tests_Post_GetPostClass extends WP_UnitTestCase { $found = get_post_class( '', $this->post_id ); - // The 'site_icon' option check adds a query during unit tests. See {@see WP_Site_Icon::get_post_metadata()}. - $expected_num_queries = $num_queries + 1; - - $this->assertSame( $expected_num_queries, $wpdb->num_queries ); + $this->assertSame( $num_queries, $wpdb->num_queries ); } }