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