PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 11.0.2
Jetpack – WP Security, Backup, Speed, & Growth v11.0.2
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 All 500 releases
jetpack / modules / shortcodes.php
shortcodes.php
203 lines 6.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Module Name: Shortcode Embeds
4 * Module Description: Shortcodes are WordPress-specific markup that let you add media from popular sites. This feature is no longer necessary as the editor now handles media embeds rather gracefully.
5 * Sort Order: 3
6 * First Introduced: 1.1
7 * Major Changes In: 1.2
8 * Requires Connection: No
9 * Auto Activate: No
10 * Module Tags: Photos and Videos, Social, Writing, Appearance
11 * Feature: Writing
12 * Additional Search Queries: shortcodes, shortcode, embeds, media, bandcamp, dailymotion, facebook, flickr, google calendars, google maps, polldaddy, recipe, recipes, scribd, slideshare, slideshow, slideshows, soundcloud, ted, twitter, vimeo, vine, youtube
13 *
14 * @package automattic/jetpack
15 */
16
17 /**
18 * Transforms the $atts array into a string that the old functions expected
19 *
20 * The old way was:
21 * [shortcode a=1&b=2&c=3] or [shortcode=1]
22 * This is parsed as array( a => '1&b=2&c=3' ) and array( 0 => '=1' ), which is useless
23 *
24 * @param array $params Array of old shortcode parameters.
25 * @param bool $old_format_support true if [shortcode=foo] format is possible.
26 *
27 * @return string $params
28 */
29 function shortcode_new_to_old_params( $params, $old_format_support = false ) {
30 $str = '';
31
32 if ( $old_format_support && isset( $params[0] ) ) {
33 $str = ltrim( $params[0], '=' );
34 } elseif ( is_array( $params ) ) {
35 foreach ( array_keys( $params ) as $key ) {
36 if ( ! is_numeric( $key ) ) {
37 $str = $key . '=' . $params[ $key ];
38 }
39 }
40 }
41
42 return str_replace( array( '&amp;', '&#038;' ), '&', $str );
43 }
44
45 /**
46 * Load all available Jetpack shortcode files.
47 */
48 function jetpack_load_shortcodes() {
49 $shortcode_includes = array();
50
51 foreach ( Jetpack::glob_php( __DIR__ . '/shortcodes' ) as $file ) {
52 $filename = substr( basename( $file ), 0, -4 );
53
54 $shortcode_includes[ $filename ] = $file;
55 }
56
57 /**
58 * This filter allows other plugins to override which shortcodes Jetpack loads.
59 *
60 * Fires as part of the `plugins_loaded` WP hook, so modifying code needs to be in a plugin, not in a theme's functions.php.
61 *
62 * @module shortcodes
63 *
64 * @since 2.2.1
65 * @since 4.2.0 Added filename without extension as array key.
66 *
67 * @param array $shortcode_includes An array of which shortcodes to include.
68 */
69 $shortcode_includes = apply_filters( 'jetpack_shortcodes_to_include', $shortcode_includes );
70
71 foreach ( $shortcode_includes as $include ) {
72 include_once $include;
73 }
74 }
75
76 /**
77 * Runs preg_replace so that replacements don't happen within open tags.
78 * Parameters are the same as preg_replace, with an added optional search param for improved performance
79 *
80 * @param string $pattern Pattern to search for.
81 * @param string $replacement String to replace.
82 * @param string $content Post content.
83 * @param string $search String to search for.
84 *
85 * @return string $content Replaced post content.
86 */
87 function jetpack_preg_replace_outside_tags( $pattern, $replacement, $content, $search = null ) {
88 if ( $search && false === strpos( $content, $search ) ) {
89 return $content;
90 }
91
92 $textarr = wp_html_split( $content );
93 unset( $content );
94 foreach ( $textarr as &$element ) {
95 if ( '' === $element || '<' === $element[0] ) {
96 continue;
97 }
98 $element = preg_replace( $pattern, $replacement, $element );
99 }
100
101 return join( $textarr );
102 }
103
104 /**
105 * Runs preg_replace_callback so that replacements don't happen within open tags.
106 * Parameters are the same as preg_replace, with an added optional search param for improved performance.
107 *
108 * @param string $pattern Pattern to search for.
109 * @param string $callback Callback returning the replacement string.
110 * @param string $content Post content.
111 * @param string $search String to search for.
112 *
113 * @return string $content Replaced post content.
114 */
115 function jetpack_preg_replace_callback_outside_tags( $pattern, $callback, $content, $search = null ) {
116 if ( $search && false === strpos( $content, $search ) ) {
117 return $content;
118 }
119
120 $textarr = wp_html_split( $content );
121 unset( $content );
122 foreach ( $textarr as &$element ) {
123 if ( '' === $element || '<' === $element[0] ) {
124 continue;
125 }
126 $element = preg_replace_callback( $pattern, $callback, $element );
127 }
128
129 return join( $textarr );
130 }
131
132 if ( ! function_exists( 'jetpack_shortcode_get_wpvideo_id' ) ) {
133 /**
134 * Get VideoPress ID from wpvideo shortcode attributes.
135 *
136 * @param array $atts Shortcode attributes.
137 * @return int $id VideoPress ID.
138 */
139 function jetpack_shortcode_get_wpvideo_id( $atts ) {
140 if ( isset( $atts[0] ) ) {
141 return $atts[0];
142 } else {
143 return 0;
144 }
145 }
146 }
147
148 if ( ! function_exists( 'jetpack_shortcode_get_videopress_id' ) ) {
149 /**
150 * Get VideoPress ID from videopress shortcode attributes.
151 *
152 * @param array $atts Shortcode attributes.
153 * @return int $id VideoPress ID.
154 */
155 function jetpack_shortcode_get_videopress_id( $atts ) {
156 if ( isset( $atts[0] ) ) {
157 return $atts[0];
158 } else {
159 return 0;
160 }
161 }
162 }
163
164 /**
165 * Common element attributes parsing and sanitizing for src, width and height.
166 *
167 * @since 4.5.0
168 *
169 * @param array $attrs With original values.
170 *
171 * @return array $attrs With sanitized values.
172 */
173 function wpcom_shortcodereverse_parseattr( $attrs ) {
174 $defaults = array(
175 'src' => false,
176 'width' => false,
177 'height' => false,
178 );
179
180 $attrs = shortcode_atts( $defaults, $attrs );
181
182 $attrs['src'] = wp_strip_all_tags( $attrs['src'] ); // For sanity.
183 $attrs['width'] = ( is_numeric( $attrs['width'] ) ) ? abs( (int) $attrs['width'] ) : $defaults['width'];
184 $attrs['height'] = ( is_numeric( $attrs['height'] ) ) ? abs( (int) $attrs['height'] ) : $defaults['height'];
185
186 return $attrs;
187 }
188
189 /**
190 * When an embed service goes away, we can use this handler
191 * to output a link for history's sake.
192 *
193 * @param array $matches Regex partial matches against the URL passed.
194 * @param array $attr Attributes received in embed response.
195 * @param string $url Requested URL to be embedded.
196 * @return string Link to output.
197 */
198 function jetpack_deprecated_embed_handler( $matches, $attr, $url ) {
199 return sprintf( '<a href="%s">%s</a>', esc_url( $url ), esc_html( esc_url( $url ) ) );
200 }
201
202 jetpack_load_shortcodes();
203