PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.2.1
Jetpack – WP Security, Backup, Speed, & Growth v15.2.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 / shortcodes / getty.php
jetpack / modules / shortcodes Last commit date
css 10 months ago images 2 years ago img 2 years ago js 9 months ago archiveorg-book.php 1 year ago archiveorg.php 1 year ago archives.php 1 year ago bandcamp.php 11 months ago brightcove.php 1 year ago cartodb.php 1 year ago class.filter-embedded-html-objects.php 1 year ago codepen.php 1 year ago crowdsignal.php 9 months ago dailymotion.php 1 year ago descript.php 1 year ago facebook.php 1 year ago flatio.php 1 year ago flickr.php 11 months ago getty.php 1 year ago gist.php 1 year ago googleapps.php 1 year ago googlemaps.php 1 year ago googleplus.php 1 year ago gravatar.php 1 year ago houzz.php 1 year ago inline-pdfs.php 1 year ago instagram.php 1 year ago kickstarter.php 1 year ago mailchimp.php 1 year ago medium.php 1 year ago mixcloud.php 1 year ago others.php 1 year ago pinterest.php 1 year ago presentations.php 1 year ago quiz.php 1 year ago recipe.php 11 months ago scribd.php 1 year ago shortcode-utils.php 1 year ago sitemap.php 1 year ago slideshare.php 9 months ago slideshow.php 11 months ago smartframe.php 1 year ago soundcloud.php 1 year ago spotify.php 1 year ago ted.php 11 months ago tweet.php 1 year ago twitchtv.php 1 year ago twitter-timeline.php 1 year ago twitter.php 1 year ago unavailable.php 1 year ago untappd-menu.php 1 year ago upcoming-events.php 1 year ago ustream.php 1 year ago videopress.php 1 year ago vimeo.php 1 year ago vine.php 1 year ago vr.php 1 year ago wufoo.php 1 year ago youtube.php 1 year ago
getty.php
230 lines
1 <?php
2 /**
3 * Getty shortcode
4 *
5 * [getty src="82278805" width="$width" height="$height"]
6 * <div class="getty embed image" style="background-color:#fff;display:inline-block;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#a7a7a7;font-size:11px;width:100%;max-width:462px;"><div style="padding:0;margin:0;text-align:left;"><a href="http://www.gettyimages.com/detail/82278805" target="_blank" style="color:#a7a7a7;text-decoration:none;font-weight:normal !important;border:none;display:inline-block;">Embed from Getty Images</a></div><div style="overflow:hidden;position:relative;height:0;padding:80.086580% 0 0 0;width:100%;"><iframe src="//embed.gettyimages.com/embed/82278805?et=jGiu6FXXSpJDGf1SnwLV2g&sig=TFVNFtqghwNw5iJQ1MFWnI8f4Y40_sfogfZLhai6SfA=" width="462" height="370" scrolling="no" frameborder="0" style="display:inline-block;position:absolute;top:0;left:0;width:100%;height:100%;"></iframe></div><p style="margin:0;"></p></div>
7 *
8 * @package automattic/jetpack
9 */
10
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit( 0 );
13 }
14
15 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
16 add_action( 'init', 'jetpack_getty_enable_embeds' );
17 } else {
18 jetpack_getty_enable_embeds();
19 }
20
21 /**
22 * Register Getty as oembed provider. Add filter to reverse iframes to shortcode. Register [getty] shortcode.
23 *
24 * @since 4.5.0
25 * @since 5.8.0 removed string parameter.
26 */
27 function jetpack_getty_enable_embeds() {
28
29 // Support their oEmbed Endpoint.
30 wp_oembed_add_provider( '#https?://www\.gettyimages\.com/detail/.*#i', 'https://embed.gettyimages.com/oembed/', true );
31 wp_oembed_add_provider( '#https?://(www\.)?gty\.im/.*#i', 'https://embed.gettyimages.com/oembed/', true );
32
33 if ( jetpack_shortcodes_should_hook_pre_kses() ) {
34 // Allow iframes to be filtered to short code (so direct copy+paste can be done).
35 add_filter( 'pre_kses', 'wpcom_shortcodereverse_getty' );
36 }
37
38 // Actually display the Getty Embed.
39 add_shortcode( 'getty', 'jetpack_getty_shortcode' );
40 }
41
42 /**
43 * Filters the oEmbed provider URL for Getty URLs to include site URL host as
44 * caller if available, falling back to "wordpress.com". Must be applied at
45 * time of embed in case that `init` is too early (WP.com REST API).
46 *
47 * @module shortcodes
48 *
49 * @since 5.8.0
50 *
51 * @see WP_oEmbed::fetch
52 *
53 * @return string oEmbed provider URL
54 */
55 add_filter( 'oembed_fetch_url', 'getty_add_oembed_endpoint_caller' );
56
57 /**
58 * Filter the embeds to add a caller parameter.
59 *
60 * @param string $provider URL of the oEmbed provider.
61 */
62 function getty_add_oembed_endpoint_caller( $provider ) {
63 // By time filter is called, original provider URL has had url, maxwidth,
64 // maxheight query parameters added.
65 if ( ! str_starts_with( $provider, 'https://embed.gettyimages.com/oembed/' ) ) {
66 return $provider;
67 }
68
69 // Set the caller argument to pass to Getty's oembed provider.
70 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
71
72 // Only include caller for non-private sites.
73 if ( ! function_exists( 'is_private_blog' ) || ! is_private_blog() ) {
74 $host = wp_parse_url( get_bloginfo( 'url' ), PHP_URL_HOST );
75 }
76
77 // Fall back to WordPress.com.
78 if ( empty( $host ) ) {
79 $host = 'wordpress.com';
80 }
81 } else {
82 $host = wp_parse_url( get_home_url(), PHP_URL_HOST );
83 }
84
85 return add_query_arg( 'caller', $host, $provider );
86 }
87
88 /**
89 * Compose shortcode based on Getty iframes.
90 *
91 * @since 4.5.0
92 *
93 * @param string $content Post content.
94 *
95 * @return mixed
96 */
97 function wpcom_shortcodereverse_getty( $content ) {
98 if ( ! is_string( $content ) || false === stripos( $content, '.gettyimages.com/' ) ) {
99 return $content;
100 }
101
102 $regexp = '!<iframe\s+src=[\'"](https?:)?//embed\.gettyimages\.com/embed(/|/?\?assets=)([a-z0-9_-]+(,[a-z0-9_-]+)*)[^\'"]*?[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)((?:[\s\w]*))></iframe>!i';
103 $regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) );
104
105 // Markup pattern for 2017 embed syntax with significant differences from the prior pattern.
106 $regexp_2017 = '!<a.+?class=\'gie-(single|slideshow)\'.+?gie\.widgets\.load\({([^}]+)}\).+?embed-cdn\.gettyimages\.com/widgets\.js.+?</script>!';
107 $regexp_2017_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp_2017, ENT_NOQUOTES ) );
108
109 foreach ( compact( 'regexp_2017', 'regexp_2017_ent', 'regexp', 'regexp_ent' ) as $reg => $regexp ) {
110 if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
111 continue;
112 }
113
114 foreach ( $matches as $match ) {
115 if ( 'regexp_2017' === $reg || 'regexp_2017_ent' === $reg ) {
116 // Extract individual keys from the matched JavaScript object.
117 $params = $match[2];
118 if ( ! preg_match_all( '!(?P<key>\w+)\s*:\s*([\'"](?P<value>[^\'"]*?)(px)?[\'"])!', $params, $key_matches, PREG_SET_ORDER ) ) {
119 continue;
120 }
121
122 foreach ( $key_matches as $key_match ) {
123 switch ( $key_match['key'] ) {
124 case 'items':
125 $ids = $key_match['value'];
126 break;
127 case 'w':
128 $width = (int) $key_match['value'];
129 break;
130 case 'h':
131 $height = (int) $key_match['value'];
132 break;
133 case 'tld':
134 $tld = $key_match['value'];
135 break;
136 }
137 }
138 } else {
139 $params = $match[5];
140 if ( 'regexp_ent' === $reg ) {
141 $params = html_entity_decode( $params, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 );
142 }
143 $params = wp_kses_hair( $params, array( 'http' ) );
144
145 $ids = esc_html( $match[3] );
146 $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
147 $height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
148 }
149
150 if ( empty( $ids ) ) {
151 continue;
152 }
153
154 $shortcode = '[getty src="' . esc_attr( $ids ) . '"';
155 if ( ! empty( $width ) ) {
156 $shortcode .= ' width="' . esc_attr( $width ) . '"';
157 }
158 if ( ! empty( $height ) ) {
159 $shortcode .= ' height="' . esc_attr( $height ) . '"';
160 }
161
162 /*
163 * While it does not appear to have any practical impact, Getty has
164 * requested that we include TLD in the embed request
165 */
166 if ( ! empty( $tld ) ) {
167 $shortcode .= ' tld="' . esc_attr( $tld ) . '"';
168 }
169 $shortcode .= ']';
170
171 $content = str_replace( $match[0], $shortcode, $content );
172 }
173 }
174
175 // strip out enclosing div and any other markup.
176 $regexp = '%<div class="getty\s[^>]*+>.*?<div[^>]*+>(\[getty[^\]]*+\])\s*</div>.*?</div>%is';
177 $regexp_ent = str_replace( array( '&amp;#0*58;', '[^&gt;]' ), array( '&amp;#0*58;|&#0*58;', '[^&]' ), htmlspecialchars( $regexp, ENT_NOQUOTES ) );
178
179 foreach ( compact( 'regexp', 'regexp_ent' ) as $reg => $regexp ) {
180 if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
181 continue;
182 }
183
184 foreach ( $matches as $match ) {
185 $content = str_replace( $match[0], $match[1], $content );
186 }
187 }
188
189 /** This action is documented in modules/widgets/social-media-icons.php */
190 do_action( 'jetpack_bump_stats_extras', 'html_to_shortcode', 'getty' );
191
192 return $content;
193 }
194
195 /**
196 * Parse shortcode arguments and render its output.
197 *
198 * @since 4.5.0
199 *
200 * @param array $atts Shortcode parameters.
201 * @param string $content Content enclosed by shortcode tags.
202 *
203 * @return string
204 */
205 function jetpack_getty_shortcode( $atts, $content = '' ) {
206
207 if ( ! empty( $content ) ) {
208 $src = $content;
209 } elseif ( ! empty( $atts['src'] ) ) {
210 $src = $atts['src'];
211 } elseif ( ! empty( $atts[0] ) ) {
212 $src = $atts[0];
213 } else {
214 return '<!-- Missing Getty Source ID -->';
215 }
216
217 $src = preg_replace( '/^([\da-z-]+(,[\da-z-]+)*).*$/', '$1', $src );
218
219 $params = array(
220 'width' => isset( $atts['width'] ) ? (int) $atts['width'] : null,
221 'height' => isset( $atts['height'] ) ? (int) $atts['height'] : null,
222 );
223
224 if ( ! empty( $atts['tld'] ) ) {
225 $params['tld'] = $atts['tld'];
226 }
227
228 return wp_oembed_get( 'https://gty.im/' . $src, array_filter( $params ) );
229 }
230