PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.9.2
Jetpack – WP Security, Backup, Speed, & Growth v14.9.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 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 / slideshow.php
jetpack / modules / shortcodes Last commit date
css 1 year ago images 2 years ago img 2 years ago js 1 year 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 1 year ago codepen.php 5 years ago crowdsignal.php 1 year ago dailymotion.php 3 years ago descript.php 4 years ago facebook.php 1 year ago flatio.php 5 years ago flickr.php 1 year ago getty.php 2 years ago gist.php 1 year 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 1 year ago kickstarter.php 3 years ago mailchimp.php 3 years ago medium.php 3 years ago mixcloud.php 1 year ago others.php 1 year ago pinterest.php 2 years ago presentations.php 2 years ago quiz.php 4 years ago recipe.php 1 year ago scribd.php 5 years ago sitemap.php 5 years ago slideshare.php 5 years ago slideshow.php 1 year 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 twitter.php 1 year ago unavailable.php 1 year ago untappd-menu.php 1 year ago upcoming-events.php 1 year ago ustream.php 5 years ago videopress.php 4 years ago vimeo.php 2 years ago vine.php 5 years ago vr.php 2 years ago wufoo.php 3 years ago youtube.php 1 year ago
slideshow.php
320 lines
1 <?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 use Automattic\Jetpack\Assets;
4 use Automattic\Jetpack\Extensions\Slideshow;
5
6 /**
7 * Slideshow shortcode.
8 * Adds a new "slideshow" gallery type when adding a gallery using the classic editor.
9 *
10 * @package automattic/jetpack
11 */
12
13 /**
14 * Slideshow shortcode usage: [gallery type="slideshow"] or the older [slideshow]
15 *
16 * @phan-constructor-used-for-side-effects
17 */
18 class Jetpack_Slideshow_Shortcode {
19 /**
20 * Number of slideshows on a page.
21 *
22 * @var int
23 */
24 public $instance_count = 0;
25
26 /**
27 * Constructor
28 */
29 public function __construct() {
30 global $shortcode_tags;
31
32 // Only if the slideshow shortcode has not already been defined.
33 if ( ! array_key_exists( 'slideshow', $shortcode_tags ) ) {
34 add_shortcode( 'slideshow', array( $this, 'shortcode_callback' ) );
35 }
36
37 // Only if the gallery shortcode has not been redefined.
38 if ( isset( $shortcode_tags['gallery'] ) && 'gallery_shortcode' === $shortcode_tags['gallery'] ) {
39 add_filter( 'post_gallery', array( $this, 'post_gallery' ), 1002, 2 );
40 add_filter( 'jetpack_gallery_types', array( $this, 'add_gallery_type' ), 10 );
41 }
42 }
43
44 /**
45 * Responds to the [gallery] shortcode, but not an actual shortcode callback.
46 *
47 * @param string $value An empty string if nothing has modified the gallery output, the output html otherwise.
48 * @param array $attr The shortcode attributes array.
49 *
50 * @return string The (un)modified $value
51 */
52 public function post_gallery( $value, $attr ) {
53 // Bail if somebody else has done something.
54 if ( ! empty( $value ) ) {
55 return $value;
56 }
57
58 // If [gallery type="slideshow"] have it behave just like [slideshow].
59 if ( ! empty( $attr['type'] ) && 'slideshow' === $attr['type'] ) {
60 return $this->shortcode_callback( $attr );
61 }
62
63 return $value;
64 }
65
66 /**
67 * Add the Slideshow type to gallery settings
68 *
69 * @see Jetpack_Tiled_Gallery::media_ui_print_templates
70 *
71 * @param array $types An array of types where the key is the value, and the value is the caption.
72 *
73 * @return array
74 */
75 public function add_gallery_type( $types = array() ) {
76 $types['slideshow'] = esc_html__( 'Slideshow', 'jetpack' );
77
78 return $types;
79 }
80
81 /**
82 * Display shortcode.
83 *
84 * @param array $attr Shortcode attributes.
85 */
86 public function shortcode_callback( $attr ) {
87 $post_id = get_the_ID();
88
89 $attr = shortcode_atts(
90 array(
91 'trans' => 'fade',
92 'order' => 'ASC',
93 'orderby' => 'menu_order ID',
94 'id' => $post_id,
95 'include' => '',
96 'exclude' => '',
97 'autostart' => true,
98 'size' => '',
99 ),
100 $attr,
101 'slideshow'
102 );
103
104 if ( 'rand' === strtolower( $attr['order'] ) ) {
105 $attr['orderby'] = 'none';
106 }
107
108 $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
109 if ( ! $attr['orderby'] ) {
110 $attr['orderby'] = 'menu_order ID';
111 }
112
113 if ( ! $attr['size'] ) {
114 $attr['size'] = 'full';
115 }
116
117 // Don't restrict to the current post if include.
118 $post_parent = ( empty( $attr['include'] ) ) ? (int) $attr['id'] : null;
119
120 $attachments = get_posts(
121 array(
122 'post_status' => 'inherit',
123 'post_type' => 'attachment',
124 'post_mime_type' => 'image',
125 'posts_per_page' => - 1,
126 'post_parent' => $post_parent,
127 'order' => $attr['order'],
128 'orderby' => $attr['orderby'],
129 'include' => $attr['include'],
130 'exclude' => $attr['exclude'],
131 'suppress_filters' => false,
132 )
133 );
134
135 if ( ! is_countable( $attachments ) || count( $attachments ) < 1 ) {
136 return false;
137 }
138
139 $gallery_instance = sprintf( 'gallery-%d-%d', $attr['id'], ++$this->instance_count );
140
141 $gallery = array();
142 foreach ( $attachments as $attachment ) {
143 $attachment_image_src = wp_get_attachment_image_src( $attachment->ID, $attr['size'] );
144 $attachment_image_src = false !== $attachment_image_src ? $attachment_image_src[0] : ''; // [url, width, height].
145 $attachment_image_title = get_the_title( $attachment->ID );
146 $attachment_image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true );
147 /**
148 * Filters the Slideshow slide caption.
149 *
150 * @module shortcodes
151 *
152 * @since 2.3.0
153 *
154 * @param string wptexturize( strip_tags( $attachment->post_excerpt ) ) Post excerpt.
155 * @param string $attachment ->ID Attachment ID.
156 */
157 $caption = apply_filters( 'jetpack_slideshow_slide_caption', wptexturize( wp_strip_all_tags( $attachment->post_excerpt ) ), $attachment->ID );
158
159 $gallery[] = (object) array(
160 'src' => (string) esc_url_raw( $attachment_image_src ),
161 'id' => (string) $attachment->ID,
162 'title' => (string) esc_attr( $attachment_image_title ),
163 'alt' => (string) esc_attr( $attachment_image_alt ),
164 'caption' => (string) $caption,
165 'itemprop' => 'image',
166 );
167 }
168
169 $color = Jetpack_Options::get_option( 'slideshow_background_color', 'black' );
170 $autostart = $attr['autostart'] ? $attr['autostart'] : 'true';
171 $js_attr = array(
172 'gallery' => $gallery,
173 'selector' => $gallery_instance,
174 'trans' => $attr['trans'] ? $attr['trans'] : 'fade',
175 'autostart' => $autostart,
176 'color' => $color,
177 );
178
179 // Show a link to the gallery in feeds.
180 if ( is_feed() ) {
181 return sprintf(
182 '<a href="%s">%s</a>',
183 esc_url( get_permalink( $post_id ) . '#' . $gallery_instance . '-slideshow' ),
184 esc_html__( 'Click to view slideshow.', 'jetpack' )
185 );
186 }
187
188 if (
189 class_exists( 'Jetpack_AMP_Support' )
190 && Jetpack_AMP_Support::is_amp_request()
191 ) {
192 // Load the styles and use the rendering method from the Slideshow block.
193 Jetpack_Gutenberg::load_styles_as_required( 'slideshow' );
194
195 $amp_args = array(
196 'ids' => wp_list_pluck( $gallery, 'id' ),
197 );
198
199 if ( 'true' == $autostart ) { // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual -- attribute can be stored as boolean or string.
200 $amp_args['autoplay'] = true;
201 }
202
203 /*
204 * Blocks can be disabled in Jetpack Settings.
205 * If that's the case, we need to include the slideshow block manually.
206 */
207 if ( ! class_exists( 'Automattic\Jetpack\Extensions\Slideshow' ) ) {
208 require_once JETPACK__PLUGIN_DIR . 'extensions/blocks/slideshow/slideshow.php';
209 }
210
211 return Slideshow\render_amp( $amp_args );
212 }
213
214 return $this->slideshow_js( $js_attr );
215 }
216
217 /**
218 * Render the slideshow js
219 *
220 * Returns the necessary markup and js to fire a slideshow.
221 *
222 * @param array $attr Attributes for the slideshow.
223 *
224 * @uses $this->enqueue_scripts()
225 *
226 * @return string HTML output.
227 */
228 public function slideshow_js( $attr ) {
229 // Enqueue scripts.
230 $this->enqueue_scripts();
231
232 $output = '<p class="jetpack-slideshow-noscript robots-nocontent">' . esc_html__( 'This slideshow requires JavaScript.', 'jetpack' ) . '</p>';
233
234 /*
235 * Checking for JSON_HEX_AMP and friends here allows us to get rid of
236 * '&quot;', that can sometimes be included in the JSON input in some languages like French.
237 */
238 $gallery_attributes = _wp_specialchars(
239 wp_check_invalid_utf8(
240 wp_json_encode( $attr['gallery'], JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT )
241 ),
242 ENT_QUOTES,
243 false,
244 true
245 );
246
247 $output .= sprintf(
248 '<div id="%s" class="jetpack-slideshow-window jetpack-slideshow jetpack-slideshow-%s" data-trans="%s" data-autostart="%s" data-gallery="%s" itemscope itemtype="https://schema.org/ImageGallery"></div>',
249 esc_attr( $attr['selector'] . '-slideshow' ),
250 esc_attr( $attr['color'] ),
251 esc_attr( $attr['trans'] ),
252 esc_attr( $attr['autostart'] ),
253 $gallery_attributes
254 );
255
256 return $output;
257 }
258
259 /**
260 * Actually enqueues the scripts and styles.
261 */
262 public function enqueue_scripts() {
263
264 wp_enqueue_script( 'jquery-cycle', plugins_url( '/js/jquery.cycle.min.js', __FILE__ ), array( 'jquery' ), '20161231', true );
265 wp_enqueue_script(
266 'jetpack-slideshow',
267 Assets::get_file_url_for_environment( '_inc/build/shortcodes/js/slideshow-shortcode.min.js', 'modules/shortcodes/js/slideshow-shortcode.js' ),
268 array( 'jquery', 'jquery-cycle' ),
269 '20160119.1',
270 true
271 );
272 wp_enqueue_style(
273 'jetpack-slideshow',
274 plugins_url( '/css/slideshow-shortcode.css', __FILE__ ),
275 array(),
276 JETPACK__VERSION
277 );
278 wp_style_add_data( 'jetpack-slideshow', 'rtl', 'replace' );
279
280 wp_localize_script(
281 'jetpack-slideshow',
282 'jetpackSlideshowSettings',
283 /**
284 * Filters the slideshow JavaScript spinner.
285 *
286 * @module shortcodes
287 *
288 * @since 2.1.0
289 * @since 4.7.0 Added the `speed` option to the array of options.
290 *
291 * @param array $args
292 * - string - spinner - URL of the spinner image.
293 * - string - speed - Speed of the slideshow. Defaults to 4000.
294 * - string - label_prev - Aria label for slideshow's previous button
295 * - string - label_stop - Aria label for slideshow's pause button
296 * - string - label_next - Aria label for slideshow's next button
297 */
298 apply_filters(
299 'jetpack_js_slideshow_settings',
300 array(
301 'spinner' => plugins_url( '/img/slideshow-loader.gif', __FILE__ ),
302 'speed' => '4000',
303 'label_prev' => __( 'Previous Slide', 'jetpack' ),
304 'label_stop' => __( 'Pause Slideshow', 'jetpack' ),
305 'label_next' => __( 'Next Slide', 'jetpack' ),
306 )
307 )
308 );
309 }
310
311 /**
312 * Instantiate shortcode.
313 */
314 public static function init() {
315 new Jetpack_Slideshow_Shortcode();
316 }
317 }
318
319 Jetpack_Slideshow_Shortcode::init();
320