From 2475fea4f8d2a943856ca9b5e07ad74aa9e50c8e Mon Sep 17 00:00:00 2001 From: David Cramer Date: Mon, 12 Oct 2020 13:45:20 +0200 Subject: [PATCH 1/4] add srcset to featured and separate functionality --- .../php/class-media.php | 37 +++++++++++++++++-- .../php/media/class-filter.php | 7 +--- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php index 9912dfe07..cb1205f6c 100644 --- a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php +++ b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php @@ -1773,9 +1773,40 @@ public function maybe_overwrite_featured_image( $attachment_id ) { */ public function set_doing_featured( $post_id, $attachment_id ) { $this->doing_featured_image = (int) $attachment_id; - add_action( 'end_fetch_post_thumbnail_html', function () { - $this->doing_featured_image = false; - } ); + add_action( + 'end_fetch_post_thumbnail_html', + function () { + $this->doing_featured_image = false; + add_filter( + 'post_thumbnail_html', + function ( $content, $post_id, $attachment_id ) { + $overwrite_transformations = $this->maybe_overwrite_featured_image( $attachment_id ); + + return $this->apply_srcset( $content, $attachment_id, $overwrite_transformations ); + }, + 10, + 3 + ); + } + ); + } + + /** + * Apply srcset to an image tag. + * + * @param string $content The image tag. + * @param int $attachment_id The attachment ID. + * @param bool $overwrite_transformations Flag to overwrite transformations. + * + * @return string + */ + public function apply_srcset( $content, $attachment_id, $overwrite_transformations = false ) { + $cloudinary_id = $this->get_cloudinary_id( $attachment_id ); + $image_meta = wp_get_attachment_metadata( $attachment_id ); + $image_meta['file'] = pathinfo( $cloudinary_id, PATHINFO_FILENAME ) . '/' . pathinfo( $cloudinary_id, PATHINFO_BASENAME ); + $image_meta['overwrite_transformations'] = $overwrite_transformations; + + return wp_image_add_srcset_and_sizes( $content, $image_meta, $attachment_id ); } /** diff --git a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/media/class-filter.php b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/media/class-filter.php index 2837ca47a..5200226db 100644 --- a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/media/class-filter.php +++ b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/media/class-filter.php @@ -361,10 +361,7 @@ public function filter_out_local( $content ) { $new_tag = str_replace( $poster, $cloudinary_url, $new_tag ); } } - $image_meta = wp_get_attachment_metadata( $attachment_id ); - $image_meta['file'] = pathinfo( $cloudinary_id, PATHINFO_FILENAME ) . '/' . pathinfo( $cloudinary_id, PATHINFO_BASENAME ); - $image_meta['overwrite_transformations'] = $overwrite_transformations; - $new_tag = wp_image_add_srcset_and_sizes( $new_tag, $image_meta, $attachment_id ); + $new_tag = $this->media->apply_srcset( $new_tag, $attachment_id, $overwrite_transformations ); } $content = str_replace( $asset, $new_tag, $content ); // Additional URL change for backgrounds etc.. @@ -515,7 +512,7 @@ public function filter_video_embeds( $html, $id, $attachment ) { } if ( ! empty( $attachment['transformations'] ) ) { $transformation_string = Api::generate_transformation_string( $attachment['transformations'] ); - $new_atts .= ' transformations="' . esc_attr( $transformation_string ) . '"'; + $new_atts .= ' transformations="' . esc_attr( $transformation_string ) . '"'; } $html = str_replace( $shortcode['args'], $new_atts, $html ); } From 3d3343b0ce6aa4f94e4e31ebf49efa8afdbb7e53 Mon Sep 17 00:00:00 2001 From: David Cramer Date: Tue, 13 Oct 2020 07:40:45 +0200 Subject: [PATCH 2/4] only apply featured image if synced. --- .../php/class-media.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php index cb1205f6c..d413b0f7d 100644 --- a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php +++ b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php @@ -1772,6 +1772,9 @@ public function maybe_overwrite_featured_image( $attachment_id ) { * @param int $attachment_id The thumbnail ID. */ public function set_doing_featured( $post_id, $attachment_id ) { + if ( ! $this->sync->is_synced( $attachment_id ) ) { + return; // Bail if not synced. + } $this->doing_featured_image = (int) $attachment_id; add_action( 'end_fetch_post_thumbnail_html', From db16ef4f793c0baf119d63078983c6663850dd13 Mon Sep 17 00:00:00 2001 From: David Cramer Date: Tue, 13 Oct 2020 08:43:53 +0200 Subject: [PATCH 3/4] simplify featured image handling --- .../php/class-media.php | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php index d413b0f7d..6ade79969 100644 --- a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php +++ b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/class-media.php @@ -1772,26 +1772,29 @@ public function maybe_overwrite_featured_image( $attachment_id ) { * @param int $attachment_id The thumbnail ID. */ public function set_doing_featured( $post_id, $attachment_id ) { - if ( ! $this->sync->is_synced( $attachment_id ) ) { - return; // Bail if not synced. + if ( $this->sync->is_synced( $attachment_id ) ) { + $this->doing_featured_image = (int) $attachment_id; } - $this->doing_featured_image = (int) $attachment_id; - add_action( - 'end_fetch_post_thumbnail_html', - function () { - $this->doing_featured_image = false; - add_filter( - 'post_thumbnail_html', - function ( $content, $post_id, $attachment_id ) { - $overwrite_transformations = $this->maybe_overwrite_featured_image( $attachment_id ); - - return $this->apply_srcset( $content, $attachment_id, $overwrite_transformations ); - }, - 10, - 3 - ); - } - ); + } + + /** + * Maybe add responsive images to a post thumbnail. + * + * @param string $content The content to alter. + * @param int $post_id The current post ID (unused). + * @param int $attachment_id The attachment ID. + * + * @return string + */ + public function maybe_srcset_post_thumbnail( $content, $post_id, $attachment_id ) { + // Check the attachment is synced and does not already have a srcset (some themes do this already). + if ( $this->doing_featured_image === $attachment_id ) { + $overwrite_transformations = $this->maybe_overwrite_featured_image( $attachment_id ); + $content = $this->apply_srcset( $content, $attachment_id, $overwrite_transformations ); + $this->doing_featured_image = false; // Reset featured. + } + + return $content; } /** @@ -1864,6 +1867,7 @@ public function setup() { // Hook into Featured Image cycle. add_action( 'begin_fetch_post_thumbnail_html', array( $this, 'set_doing_featured' ), 10, 2 ); + add_filter( 'post_thumbnail_html', array( $this, 'maybe_srcset_post_thumbnail' ), 10, 3 ); } } } From 2b82aa773d4e63071f9fe35a511fbfccbe001504 Mon Sep 17 00:00:00 2001 From: David Cramer Date: Tue, 13 Oct 2020 08:46:40 +0200 Subject: [PATCH 4/4] fix formatting --- .../php/media/class-filter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/media/class-filter.php b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/media/class-filter.php index 5200226db..55924efce 100644 --- a/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/media/class-filter.php +++ b/cloudinary-image-management-and-manipulation-in-the-cloud-cdn/php/media/class-filter.php @@ -512,7 +512,7 @@ public function filter_video_embeds( $html, $id, $attachment ) { } if ( ! empty( $attachment['transformations'] ) ) { $transformation_string = Api::generate_transformation_string( $attachment['transformations'] ); - $new_atts .= ' transformations="' . esc_attr( $transformation_string ) . '"'; + $new_atts .= ' transformations="' . esc_attr( $transformation_string ) . '"'; } $html = str_replace( $shortcode['args'], $new_atts, $html ); }