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