PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.3.1
Jetpack – WP Security, Backup, Speed, & Growth v14.3.1
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 1 year ago featured-images.php 1 year ago post-details.php 1 year ago
featured-images-fallback.php
251 lines
1 <?php
2 /**
3 * Theme Tools: functions for Featured Images fallback.
4 *
5 * @package automattic/jetpack
6 */
7
8 if ( ! function_exists( 'jetpack_featured_images_fallback_get_image' ) ) {
9
10 /**
11 * Get one image from a specified post in the following order:
12 * Featured Image then first image from the_content HTML
13 * and filter the post_thumbnail_html
14 *
15 * @deprecated 13.9 Moved to Classic Theme Helper package.
16 * @param string $html The HTML for the image markup.
17 * @param int $post_id The post ID to check.
18 * @param int $post_thumbnail_id The ID of the featured image.
19 * @param string $size The image size to return, defaults to 'post-thumbnail'.
20 * @param string|array $attr Optional. Query string or array of attributes.
21 *
22 * @return string $html Thumbnail image with markup.
23 */
24 function jetpack_featured_images_fallback_get_image( $html, $post_id, $post_thumbnail_id, $size, $attr ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
25 _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
26 $opts = jetpack_featured_images_get_settings();
27
28 if ( ! empty( $html ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
29 return trim( $html );
30 }
31
32 if ( jetpack_featured_images_should_load() ) {
33 if (
34 ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
35 || ( true === $opts['post'] && is_single() && ! $opts['post-option'] )
36 || ! $opts['fallback-option']
37 ) {
38 return trim( $html );
39 }
40 }
41
42 if ( class_exists( 'Jetpack_PostImages' ) ) {
43 global $_wp_additional_image_sizes;
44
45 $args = array(
46 'from_thumbnail' => false,
47 'from_slideshow' => true,
48 'from_gallery' => true,
49 'from_attachment' => false,
50 );
51
52 $image = Jetpack_PostImages::get_image( $post_id, $args );
53
54 if ( ! empty( $image ) ) {
55 $image['width'] = '';
56 $image['height'] = '';
57 $image['crop'] = '';
58
59 if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
60 $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
61 $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
62 $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
63 }
64
65 // Force `crop` to be a simple boolean, to avoid dealing with WP crop positions.
66 $image['crop'] = boolval( $image['crop'] );
67
68 $image_sizes = '';
69
70 $width = isset( $image['width'] ) ? intval( $image['width'] ) : null;
71 $height = isset( $image['height'] ) ? intval( $image['height'] ) : null;
72
73 if ( ! empty( $image['src_width'] ) && ! empty( $image['src_height'] ) && ! empty( $image['width'] ) && ! empty( $image['height'] ) ) {
74 $src_width = intval( $image['src_width'] );
75 $src_height = intval( $image['src_height'] );
76
77 // If we're aware of the source dimensions, calculate the final image height and width.
78 // This allows us to provide them as attributes in the `<img>` tag, to avoid layout shifts.
79 // It also allows us to calculate a `srcset`.
80 if ( $image['crop'] ) {
81 // If we're cropping, the final dimensions are calculated independently of each other.
82 $width = min( $width, $src_width );
83 $height = min( $height, $src_height );
84 } else {
85 // If we're not cropping, we need to preserve aspect ratio.
86 $dims = wp_constrain_dimensions( $src_width, $src_height, $width, $height );
87 $width = $dims[0];
88 $height = $dims[1];
89 }
90
91 $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $width, $height );
92 $image_srcset = Jetpack_PostImages::generate_cropped_srcset( $image, $width, $height, true );
93 $image_sizes = 'min(' . $width . 'px, 100vw)';
94 } else {
95 // If we're not aware of the source dimensions, leave the size calculations to the CDN, and
96 // fall back to a simpler `<img>` tag without `width`/`height` or `srcset`.
97 $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
98
99 // Use the theme's crop setting rather than forcing to true.
100 $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
101
102 $image_srcset = null;
103 $image_sizes = null;
104 }
105
106 $default_attr = array(
107 'srcset' => $image_srcset,
108 'sizes' => $image_sizes,
109 'loading' => is_singular() ? 'eager' : 'lazy',
110 'decoding' => 'async',
111 'title' => wp_strip_all_tags( get_the_title() ),
112 'alt' => '',
113 'class' => "attachment-$size wp-post-image",
114 );
115
116 $image_attr = wp_parse_args( $attr, $default_attr );
117 $hwstring = image_hwstring( $width, $height );
118
119 $html = rtrim( "<img $hwstring" );
120 $html .= ' src="' . esc_url( $image_src ) . '"';
121
122 foreach ( $image_attr as $name => $value ) {
123 if ( $value ) {
124 $html .= " $name=" . '"' . esc_attr( $value ) . '"';
125 }
126 }
127
128 $html .= ' />';
129
130 return trim( $html );
131 }
132 }
133
134 return trim( $html );
135 }
136 add_filter( 'post_thumbnail_html', 'jetpack_featured_images_fallback_get_image', 10, 5 );
137
138 }
139
140 if ( ! function_exists( 'jetpack_featured_images_fallback_get_image_src' ) ) {
141
142 /**
143 * Get URL of one image from a specified post in the following order:
144 * Featured Image then first image from the_content HTML
145 *
146 * @deprecated 13.9 Moved to Classic Theme Helper package.
147 * @param int $post_id The post ID to check.
148 * @param int $post_thumbnail_id The ID of the featured image.
149 * @param string $size The image size to return, defaults to 'post-thumbnail'.
150 *
151 * @return string|null $image_src The URL of the thumbnail image.
152 */
153 function jetpack_featured_images_fallback_get_image_src( $post_id, $post_thumbnail_id, $size ) {
154 _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
155 $image_src = wp_get_attachment_image_src( $post_thumbnail_id, $size );
156 $image_src = ( ! empty( $image_src[0] ) ) ? $image_src[0] : null;
157 $opts = jetpack_featured_images_get_settings();
158
159 if ( ! empty( $image_src ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
160 return esc_url( $image_src );
161 }
162
163 if ( jetpack_featured_images_should_load() ) {
164 if ( ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
165 || ( true === $opts['post'] && is_single() && ! $opts['post-option'] ) ) {
166 return esc_url( $image_src );
167 }
168 }
169
170 if ( class_exists( 'Jetpack_PostImages' ) ) {
171 global $_wp_additional_image_sizes;
172
173 $args = array(
174 'from_thumbnail' => false,
175 'from_slideshow' => true,
176 'from_gallery' => true,
177 'from_attachment' => false,
178 );
179
180 $image = Jetpack_PostImages::get_image( $post_id, $args );
181
182 if ( ! empty( $image ) ) {
183 $image['width'] = '';
184 $image['height'] = '';
185 $image['crop'] = '';
186
187 if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
188 $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
189 $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
190 $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
191 }
192
193 $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
194
195 // Use the theme's crop setting rather than forcing to true.
196 $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
197
198 return esc_url( $image_src );
199 }
200 }
201
202 return esc_url( $image_src );
203 }
204
205 }
206
207 if ( ! function_exists( 'jetpack_has_featured_image' ) ) {
208
209 /**
210 * Check if post has an image attached, including a fallback.
211 *
212 * @deprecated 13.9 Moved to Classic Theme Helper package.
213 * @param int $post The post ID to check.
214 *
215 * @return bool
216 */
217 function jetpack_has_featured_image( $post = null ) {
218 _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
219 return (bool) get_the_post_thumbnail( $post );
220 }
221
222 }
223
224 if ( ! function_exists( 'jetpack_featured_images_post_class' ) ) {
225
226 /**
227 * Adds custom class to the array of post classes.
228 *
229 * @deprecated 13.9 Moved to Classic Theme Helper package.
230 * @param array $classes Classes for the post element.
231 * @param array $class Optional. Comma separated list of additional classes.
232 * @param array $post_id Unique The post ID to check.
233 *
234 * @return array $classes
235 */
236 function jetpack_featured_images_post_class( $classes, $class, $post_id ) {
237 _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
238 $post_password_required = post_password_required( $post_id );
239 $opts = jetpack_featured_images_get_settings();
240
241 if ( jetpack_has_featured_image( $post_id ) && (bool) 1 === (bool) $opts['fallback-option'] && ! is_attachment() && ! $post_password_required && 'post' === get_post_type() ) {
242 $classes[] = 'has-post-thumbnail';
243 $classes[] = 'fallback-thumbnail';
244 }
245
246 return $classes;
247 }
248 add_filter( 'post_class', 'jetpack_featured_images_post_class', 10, 3 );
249
250 }
251