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