PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 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 All 508 releases
← All changes | modules/shortcodes/kickstarter.php +86 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,86 @@
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 automattic/jetpack
9 + */
10 +
11 +if ( ! defined( 'ABSPATH' ) ) {
12 + exit( 0 );
13 +}
14 +
15 +add_shortcode( 'kickstarter', 'jetpack_kickstarter_shortcode' );
16 +if ( jetpack_shortcodes_should_hook_pre_kses() ) {
17 + add_filter( 'pre_kses', 'jetpack_kickstarter_embed_to_shortcode' );
18 +}
19 +
20 +/**
21 + * Parse shortcode arguments and render its output.
22 + *
23 + * @since 4.5.0
24 + *
25 + * @param array $atts Shortcode parameters.
26 + *
27 + * @return string
28 + */
29 +function jetpack_kickstarter_shortcode( $atts ) {
30 + if ( empty( $atts['url'] ) ) {
31 + return '';
32 + }
33 +
34 + $url = esc_url_raw( $atts['url'] );
35 + if ( ! preg_match( '#^(www\.)?kickstarter\.com$#i', wp_parse_url( $url, PHP_URL_HOST ) ) ) {
36 + return '<!-- Invalid Kickstarter URL -->';
37 + }
38 +
39 + global $wp_embed;
40 + return $wp_embed->shortcode( $atts, $url );
41 +}
42 +
43 +/**
44 + * Converts Kickstarter iframe embeds to a shortcode.
45 + *
46 + * 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>
47 + *
48 + * @since 4.5.0
49 + *
50 + * @param string $content Entry content that possibly includes a Kickstarter embed.
51 + *
52 + * @return string
53 + */
54 +function jetpack_kickstarter_embed_to_shortcode( $content ) {
55 + if ( ! is_string( $content ) || false === stripos( $content, 'www.kickstarter.com/projects' ) ) {
56 + return $content;
57 + }
58 +
59 + $regexp = '!<iframe((?:\s+\w+=[\'"][^\'"]*[\'"])*)\s+src=[\'"](http://www\.kickstarter\.com/projects/[^/]+/[^/]+)/[^\'"]+[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)>[\s]*</iframe>!i';
60 + $regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) ); // phpcs:ignore
61 +
62 + foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) {
63 + if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
64 + continue;
65 + }
66 +
67 + foreach ( $matches as $match ) {
68 + $url = esc_url( $match[2] );
69 +
70 + $params = $match[1] . $match[3];
71 +
72 + if ( 'regexp_ent' === $reg ) {
73 + $params = html_entity_decode( $params, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 );
74 + }
75 +
76 + $params = wp_kses_hair( $params, array( 'http' ) );
77 +
78 + $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
79 +
80 + $shortcode = '[kickstarter url=' . $url . ( ( ! empty( $width ) ) ? " width=$width" : '' ) . ']';
81 + $content = str_replace( $match[0], $shortcode, $content );
82 + }
83 + }
84 +
85 + return $content;
86 +}