PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.2.3
Jetpack – WP Security, Backup, Speed, & Growth v12.2.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 4 years ago blog-display.php 4 years ago customizer.js 6 years ago customizer.php 3 years ago featured-images-fallback.php 4 years ago featured-images.php 4 years ago post-details.php 4 years ago
featured-images-fallback.php
168 lines
1 <?php
2 /**
3 * Theme Tools: functions for Featured Images fallback.
4 *
5 * @package automattic/jetpack
6 */
7
8 /**
9 * Get one image from a specified post in the following order:
10 * Featured Image then first image from the_content HTML
11 * and filter the post_thumbnail_html
12 *
13 * @param string $html The HTML for the image markup.
14 * @param int $post_id The post ID to check.
15 * @param int $post_thumbnail_id The ID of the featured image.
16 * @param string $size The image size to return, defaults to 'post-thumbnail'.
17 * @param string|array $attr Optional. Query string or array of attributes.
18 *
19 * @return string $html Thumbnail image with markup.
20 */
21 function jetpack_featured_images_fallback_get_image( $html, $post_id, $post_thumbnail_id, $size, $attr ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
22 $opts = jetpack_featured_images_get_settings();
23
24 if ( ! empty( $html ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
25 return trim( $html );
26 }
27
28 if ( jetpack_featured_images_should_load() ) {
29 if (
30 ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
31 || ( true === $opts['post'] && is_single() && ! $opts['post-option'] )
32 || ! $opts['fallback-option']
33 ) {
34 return trim( $html );
35 }
36 }
37
38 if ( class_exists( 'Jetpack_PostImages' ) ) {
39 global $_wp_additional_image_sizes;
40
41 $args = array(
42 'from_thumbnail' => false,
43 'from_slideshow' => true,
44 'from_gallery' => true,
45 'from_attachment' => false,
46 );
47
48 $image = Jetpack_PostImages::get_image( $post_id, $args );
49
50 if ( ! empty( $image ) ) {
51 $image['width'] = '';
52 $image['height'] = '';
53 $image['crop'] = '';
54
55 if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
56 $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
57 $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
58 $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
59 }
60
61 $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
62
63 // Use the theme's crop setting rather than forcing to true.
64 $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
65
66 $html = '<img src="' . esc_url( $image_src ) . '" title="' . esc_attr( wp_strip_all_tags( get_the_title() ) ) . '" class="attachment-' . esc_attr( $size ) . ' wp-post-image" />';
67
68 return trim( $html );
69 }
70 }
71
72 return trim( $html );
73 }
74 add_filter( 'post_thumbnail_html', 'jetpack_featured_images_fallback_get_image', 10, 5 );
75
76 /**
77 * Get URL of one image from a specified post in the following order:
78 * Featured Image then first image from the_content HTML
79 *
80 * @param int $post_id The post ID to check.
81 * @param int $post_thumbnail_id The ID of the featured image.
82 * @param string $size The image size to return, defaults to 'post-thumbnail'.
83 *
84 * @return string|null $image_src The URL of the thumbnail image.
85 */
86 function jetpack_featured_images_fallback_get_image_src( $post_id, $post_thumbnail_id, $size ) {
87 $image_src = wp_get_attachment_image_src( $post_thumbnail_id, $size );
88 $image_src = ( ! empty( $image_src[0] ) ) ? $image_src[0] : null;
89 $opts = jetpack_featured_images_get_settings();
90
91 if ( ! empty( $image_src ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
92 return esc_url( $image_src );
93 }
94
95 if ( jetpack_featured_images_should_load() ) {
96 if ( ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
97 || ( true === $opts['post'] && is_single() && ! $opts['post-option'] ) ) {
98 return esc_url( $image_src );
99 }
100 }
101
102 if ( class_exists( 'Jetpack_PostImages' ) ) {
103 global $_wp_additional_image_sizes;
104
105 $args = array(
106 'from_thumbnail' => false,
107 'from_slideshow' => true,
108 'from_gallery' => true,
109 'from_attachment' => false,
110 );
111
112 $image = Jetpack_PostImages::get_image( $post_id, $args );
113
114 if ( ! empty( $image ) ) {
115 $image['width'] = '';
116 $image['height'] = '';
117 $image['crop'] = '';
118
119 if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
120 $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
121 $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
122 $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
123 }
124
125 $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
126
127 // Use the theme's crop setting rather than forcing to true.
128 $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
129
130 return esc_url( $image_src );
131 }
132 }
133
134 return esc_url( $image_src );
135 }
136
137 /**
138 * Check if post has an image attached, including a fallback.
139 *
140 * @param int $post The post ID to check.
141 *
142 * @return bool
143 */
144 function jetpack_has_featured_image( $post = null ) {
145 return (bool) get_the_post_thumbnail( $post );
146 }
147
148 /**
149 * Adds custom class to the array of post classes.
150 *
151 * @param array $classes Classes for the post element.
152 * @param array $class Optional. Comma separated list of additional classes.
153 * @param array $post_id Unique The post ID to check.
154 *
155 * @return array $classes
156 */
157 function jetpack_featured_images_post_class( $classes, $class, $post_id ) {
158 $post_password_required = post_password_required( $post_id );
159 $opts = jetpack_featured_images_get_settings();
160
161 if ( jetpack_has_featured_image( $post_id ) && (bool) 1 === (bool) $opts['fallback-option'] && ! is_attachment() && ! $post_password_required && 'post' === get_post_type() ) {
162 $classes[] = 'has-post-thumbnail';
163 }
164
165 return $classes;
166 }
167 add_filter( 'post_class', 'jetpack_featured_images_post_class', 10, 3 );
168