PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 7.5.1
Jetpack – WP Security, Backup, Speed, & Growth v7.5.1
16.2-beta 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 All 501 releases
jetpack / modules / shortcodes / kickstarter.php
kickstarter.php
81 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Kickstarter shortcode
4 *
5 * Usage:
6 * [kickstarter url="https://www.kickstarter.com/projects/peaktoplateau/yak-wool-baselayers-from-tibet-to-the-world" width="480" height=""]
7 *
8 * @package Jetpack
9 */
10
11 add_shortcode( 'kickstarter', 'jetpack_kickstarter_shortcode' );
12 add_filter( 'pre_kses', 'jetpack_kickstarter_embed_to_shortcode' );
13
14 /**
15 * Parse shortcode arguments and render its output.
16 *
17 * @since 4.5.0
18 *
19 * @param array $atts Shortcode parameters.
20 *
21 * @return string
22 */
23 function jetpack_kickstarter_shortcode( $atts ) {
24 if ( empty( $atts['url'] ) ) {
25 return '';
26 }
27
28 $url = esc_url_raw( $atts['url'] );
29 if ( ! preg_match( '#^(www\.)?kickstarter\.com$#i', wp_parse_url( $url, PHP_URL_HOST ) ) ) {
30 return '<!-- Invalid Kickstarter URL -->';
31 }
32
33 global $wp_embed;
34 return $wp_embed->shortcode( $atts, $url );
35 }
36
37 /**
38 * Converts Kickstarter iframe embeds to a shortcode.
39 *
40 * EG: <iframe width="480" height="360" src="http://www.kickstarter.com/projects/deweymac/dewey-mac-kid-detective-book-make-diy-and-stem-spy/widget/video.html" frameborder="0" scrolling="no"> </iframe>
41 *
42 * @since 4.5.0
43 *
44 * @param string $content Entry content that possibly includes a Kickstarter embed.
45 *
46 * @return string
47 */
48 function jetpack_kickstarter_embed_to_shortcode( $content ) {
49 if ( ! is_string( $content ) || false === stripos( $content, 'www.kickstarter.com/projects' ) ) {
50 return $content;
51 }
52
53 $regexp = '!<iframe((?:\s+\w+=[\'"][^\'"]*[\'"])*)\s+src=[\'"](http://www\.kickstarter\.com/projects/[^/]+/[^/]+)/[^\'"]+[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)>[\s]*</iframe>!i';
54 $regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) ); // phpcs:ignore
55
56 foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) {
57 if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
58 continue;
59 }
60
61 foreach ( $matches as $match ) {
62 $url = esc_url( $match[2] );
63
64 $params = $match[1] . $match[3];
65
66 if ( 'regexp_ent' === $reg ) {
67 $params = html_entity_decode( $params );
68 }
69
70 $params = wp_kses_hair( $params, array( 'http' ) );
71
72 $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
73
74 $shortcode = '[kickstarter url=' . $url . ( ( ! empty( $width ) ) ? " width=$width" : '' ) . ']';
75 $content = str_replace( $match[0], $shortcode, $content );
76 }
77 }
78
79 return $content;
80 }
81