PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.0.3
Jetpack – WP Security, Backup, Speed, & Growth v15.0.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / theme-tools / content-options / featured-images-fallback.php
jetpack / modules / theme-tools / content-options Last commit date
author-bio.php 1 year ago blog-display.php 1 year ago customizer.js 1 year ago customizer.php 1 year ago featured-images-fallback.php 11 months ago featured-images.php 1 year ago post-details.php 1 year ago
featured-images-fallback.php
255 lines
1 <?php
2 /**
3 * Theme Tools: functions for Featured Images fallback.
4 *
5 * @package automattic/jetpack
6 */
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit( 0 );
10 }
11
12 if ( ! function_exists( 'jetpack_featured_images_fallback_get_image' ) ) {
13
14 /**
15 * Get one image from a specified post in the following order:
16 * Featured Image then first image from the_content HTML
17 * and filter the post_thumbnail_html
18 *
19 * @deprecated 13.9 Moved to Classic Theme Helper package.
20 * @param string $html The HTML for the image markup.
21 * @param int $post_id The post ID to check.
22 * @param int $post_thumbnail_id The ID of the featured image.
23 * @param string $size The image size to return, defaults to 'post-thumbnail'.
24 * @param string|array $attr Optional. Query string or array of attributes.
25 *
26 * @return string $html Thumbnail image with markup.
27 */
28 function jetpack_featured_images_fallback_get_image( $html, $post_id, $post_thumbnail_id, $size, $attr ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
29 _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
30 $opts = jetpack_featured_images_get_settings();
31
32 if ( ! empty( $html ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
33 return trim( $html );
34 }
35
36 if ( jetpack_featured_images_should_load() ) {
37 if (
38 ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
39 || ( true === $opts['post'] && is_single() && ! $opts['post-option'] )
40 || ! $opts['fallback-option']
41 ) {
42 return trim( $html );
43 }
44 }
45
46 if ( class_exists( 'Jetpack_PostImages' ) ) {
47 global $_wp_additional_image_sizes;
48
49 $args = array(
50 'from_thumbnail' => false,
51 'from_slideshow' => true,
52 'from_gallery' => true,
53 'from_attachment' => false,
54 );
55
56 $image = Jetpack_PostImages::get_image( $post_id, $args );
57
58 if ( ! empty( $image ) ) {
59 $image['width'] = '';
60 $image['height'] = '';
61 $image['crop'] = '';
62
63 if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
64 $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
65 $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
66 $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
67 }
68
69 // Force `crop` to be a simple boolean, to avoid dealing with WP crop positions.
70 $image['crop'] = boolval( $image['crop'] );
71
72 $image_sizes = '';
73
74 $width = isset( $image['width'] ) ? intval( $image['width'] ) : null;
75 $height = isset( $image['height'] ) ? intval( $image['height'] ) : null;
76
77 if ( ! empty( $image['src_width'] ) && ! empty( $image['src_height'] ) && ! empty( $image['width'] ) && ! empty( $image['height'] ) ) {
78 $src_width = intval( $image['src_width'] );
79 $src_height = intval( $image['src_height'] );
80
81 // If we're aware of the source dimensions, calculate the final image height and width.
82 // This allows us to provide them as attributes in the `<img>` tag, to avoid layout shifts.
83 // It also allows us to calculate a `srcset`.
84 if ( $image['crop'] ) {
85 // If we're cropping, the final dimensions are calculated independently of each other.
86 $width = min( $width, $src_width );
87 $height = min( $height, $src_height );
88 } else {
89 // If we're not cropping, we need to preserve aspect ratio.
90 $dims = wp_constrain_dimensions( $src_width, $src_height, $width, $height );
91 $width = $dims[0];
92 $height = $dims[1];
93 }
94
95 $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $width, $height );
96 $image_srcset = Jetpack_PostImages::generate_cropped_srcset( $image, $width, $height, true );
97 $image_sizes = 'min(' . $width . 'px, 100vw)';
98 } else {
99 // If we're not aware of the source dimensions, leave the size calculations to the CDN, and
100 // fall back to a simpler `<img>` tag without `width`/`height` or `srcset`.
101 $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
102
103 // Use the theme's crop setting rather than forcing to true.
104 $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
105
106 $image_srcset = null;
107 $image_sizes = null;
108 }
109
110 $default_attr = array(
111 'srcset' => $image_srcset,
112 'sizes' => $image_sizes,
113 'loading' => is_singular() ? 'eager' : 'lazy',
114 'decoding' => 'async',
115 'title' => wp_strip_all_tags( get_the_title() ),
116 'alt' => '',
117 'class' => "attachment-$size wp-post-image",
118 );
119
120 $image_attr = wp_parse_args( $attr, $default_attr );
121 $hwstring = image_hwstring( $width, $height );
122
123 $html = rtrim( "<img $hwstring" );
124 $html .= ' src="' . esc_url( $image_src ) . '"';
125
126 foreach ( $image_attr as $name => $value ) {
127 if ( $value ) {
128 $html .= " $name=" . '"' . esc_attr( $value ) . '"';
129 }
130 }
131
132 $html .= ' />';
133
134 return trim( $html );
135 }
136 }
137
138 return trim( $html );
139 }
140 add_filter( 'post_thumbnail_html', 'jetpack_featured_images_fallback_get_image', 10, 5 );
141
142 }
143
144 if ( ! function_exists( 'jetpack_featured_images_fallback_get_image_src' ) ) {
145
146 /**
147 * Get URL of one image from a specified post in the following order:
148 * Featured Image then first image from the_content HTML
149 *
150 * @deprecated 13.9 Moved to Classic Theme Helper package.
151 * @param int $post_id The post ID to check.
152 * @param int $post_thumbnail_id The ID of the featured image.
153 * @param string $size The image size to return, defaults to 'post-thumbnail'.
154 *
155 * @return string|null $image_src The URL of the thumbnail image.
156 */
157 function jetpack_featured_images_fallback_get_image_src( $post_id, $post_thumbnail_id, $size ) {
158 _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
159 $image_src = wp_get_attachment_image_src( $post_thumbnail_id, $size );
160 $image_src = ( ! empty( $image_src[0] ) ) ? $image_src[0] : null;
161 $opts = jetpack_featured_images_get_settings();
162
163 if ( ! empty( $image_src ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
164 return esc_url( $image_src );
165 }
166
167 if ( jetpack_featured_images_should_load() ) {
168 if ( ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
169 || ( true === $opts['post'] && is_single() && ! $opts['post-option'] ) ) {
170 return esc_url( $image_src );
171 }
172 }
173
174 if ( class_exists( 'Jetpack_PostImages' ) ) {
175 global $_wp_additional_image_sizes;
176
177 $args = array(
178 'from_thumbnail' => false,
179 'from_slideshow' => true,
180 'from_gallery' => true,
181 'from_attachment' => false,
182 );
183
184 $image = Jetpack_PostImages::get_image( $post_id, $args );
185
186 if ( ! empty( $image ) ) {
187 $image['width'] = '';
188 $image['height'] = '';
189 $image['crop'] = '';
190
191 if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
192 $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
193 $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
194 $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
195 }
196
197 $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
198
199 // Use the theme's crop setting rather than forcing to true.
200 $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
201
202 return esc_url( $image_src );
203 }
204 }
205
206 return esc_url( $image_src );
207 }
208
209 }
210
211 if ( ! function_exists( 'jetpack_has_featured_image' ) ) {
212
213 /**
214 * Check if post has an image attached, including a fallback.
215 *
216 * @deprecated 13.9 Moved to Classic Theme Helper package.
217 * @param int $post The post ID to check.
218 *
219 * @return bool
220 */
221 function jetpack_has_featured_image( $post = null ) {
222 _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
223 return (bool) get_the_post_thumbnail( $post );
224 }
225
226 }
227
228 if ( ! function_exists( 'jetpack_featured_images_post_class' ) ) {
229
230 /**
231 * Adds custom class to the array of post classes.
232 *
233 * @deprecated 13.9 Moved to Classic Theme Helper package.
234 * @param array $classes Classes for the post element.
235 * @param array $class Optional. Comma separated list of additional classes.
236 * @param array $post_id Unique The post ID to check.
237 *
238 * @return array $classes
239 */
240 function jetpack_featured_images_post_class( $classes, $class, $post_id ) {
241 _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
242 $post_password_required = post_password_required( $post_id );
243 $opts = jetpack_featured_images_get_settings();
244
245 if ( jetpack_has_featured_image( $post_id ) && (bool) 1 === (bool) $opts['fallback-option'] && ! is_attachment() && ! $post_password_required && 'post' === get_post_type() ) {
246 $classes[] = 'has-post-thumbnail';
247 $classes[] = 'fallback-thumbnail';
248 }
249
250 return $classes;
251 }
252 add_filter( 'post_class', 'jetpack_featured_images_post_class', 10, 3 );
253
254 }
255