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/theme-tools/content-options/customizer.php +539 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,539 @@
1 +<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 +/**
3 + * Theme Tools: functions for Customizer enhancements.
4 + *
5 + * @package automattic/jetpack
6 + */
7 +
8 +if ( ! defined( 'ABSPATH' ) ) {
9 + exit( 0 );
10 +}
11 +
12 +if ( ! function_exists( 'jetpack_content_options_customize_register' ) ) {
13 +
14 + /**
15 + * Add Content section to the Theme Customizer.
16 + *
17 + * @deprecated 13.9 Moved to Classic Theme Helper package.
18 + *
19 + * @param WP_Customize_Manager $wp_customize Theme Customizer object.
20 + */
21 + function jetpack_content_options_customize_register( $wp_customize ) {
22 + _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
23 + $options = get_theme_support( 'jetpack-content-options' );
24 + $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
25 + $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
26 + sort( $blog_display );
27 + $blog_display = implode( ', ', $blog_display );
28 + $blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
29 + $author_bio = ( ! empty( $options[0]['author-bio'] ) ) ? $options[0]['author-bio'] : null;
30 + $author_bio_default = ( isset( $options[0]['author-bio-default'] ) && false === $options[0]['author-bio-default'] ) ? '' : 1;
31 + $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
32 + $date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
33 + $categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
34 + $tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
35 + $author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
36 + $comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
37 + $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
38 + $fi_archive = ( ! empty( $featured_images['archive'] ) ) ? $featured_images['archive'] : null;
39 + $fi_post = ( ! empty( $featured_images['post'] ) ) ? $featured_images['post'] : null;
40 + $fi_page = ( ! empty( $featured_images['page'] ) ) ? $featured_images['page'] : null;
41 + $fi_portfolio = ( ! empty( $featured_images['portfolio'] ) ) ? $featured_images['portfolio'] : null;
42 + $fi_fallback = ( ! empty( $featured_images['fallback'] ) ) ? $featured_images['fallback'] : null;
43 + $fi_archive_default = ( isset( $featured_images['archive-default'] ) && false === $featured_images['archive-default'] ) ? '' : 1;
44 + $fi_post_default = ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1;
45 + $fi_page_default = ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1;
46 + $fi_portfolio_default = ( isset( $featured_images['portfolio-default'] ) && false === $featured_images['portfolio-default'] ) ? '' : 1;
47 + $fi_fallback_default = ( isset( $featured_images['fallback-default'] ) && false === $featured_images['fallback-default'] ) ? '' : 1;
48 +
49 + // If the theme doesn't support 'jetpack-content-options[ 'blog-display' ]', 'jetpack-content-options[ 'author-bio' ]', 'jetpack-content-options[ 'post-details' ]' and 'jetpack-content-options[ 'featured-images' ]', don't continue.
50 + if ( ( ! in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ), true ) )
51 + && ( true !== $author_bio )
52 + && ( ( empty( $post_details['stylesheet'] ) )
53 + && ( empty( $date )
54 + || empty( $categories )
55 + || empty( $tags )
56 + || empty( $author )
57 + || empty( $comment ) ) )
58 + && ( true !== $fi_archive && true !== $fi_post && true !== $fi_page && true !== $fi_portfolio && true !== $fi_fallback ) ) {
59 + return;
60 + }
61 +
62 + if ( ! class_exists( 'Jetpack_Customize_Control_Title' ) ) {
63 +
64 + /**
65 + * New Customizer control type: Title.
66 + */
67 + class Jetpack_Customize_Control_Title extends WP_Customize_Control {
68 + /**
69 + * Customizer control type.
70 + *
71 + * @var string
72 + */
73 + public $type = 'title';
74 +
75 + /**
76 + * Render the control's content.
77 + */
78 + public function render_content() {
79 + ?>
80 + <span class="customize-control-title"><?php echo wp_kses_post( $this->label ); ?></span>
81 + <?php
82 + }
83 + }
84 +
85 + }
86 +
87 + // Add Content section.
88 + $wp_customize->add_section(
89 + 'jetpack_content_options',
90 + array(
91 + 'title' => esc_html__( 'Content Options', 'jetpack' ),
92 + 'theme_supports' => 'jetpack-content-options',
93 + 'priority' => 100,
94 + )
95 + );
96 +
97 + // Add Blog Display option.
98 + if ( in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ), true ) ) {
99 + if ( 'mixed' === $blog_display ) {
100 + $blog_display_choices = array(
101 + 'content' => esc_html__( 'Full post', 'jetpack' ),
102 + 'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
103 + 'mixed' => esc_html__( 'Default', 'jetpack' ),
104 + );
105 +
106 + $blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages, or opt for the theme\'s default combination of excerpt and full post.', 'jetpack' );
107 + } else {
108 + $blog_display_choices = array(
109 + 'content' => esc_html__( 'Full post', 'jetpack' ),
110 + 'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
111 + );
112 +
113 + $blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages.', 'jetpack' );
114 +
115 + if ( 'mixed' === get_option( 'jetpack_content_blog_display' ) ) {
116 + update_option( 'jetpack_content_blog_display', $blog_display );
117 + }
118 + }
119 +
120 + $wp_customize->add_setting(
121 + 'jetpack_content_blog_display',
122 + array(
123 + 'default' => $blog_display,
124 + 'type' => 'option',
125 + 'transport' => 'postMessage',
126 + 'sanitize_callback' => 'jetpack_content_options_sanitize_blog_display',
127 + )
128 + );
129 +
130 + $wp_customize->add_control(
131 + 'jetpack_content_blog_display',
132 + array(
133 + 'section' => 'jetpack_content_options',
134 + 'label' => esc_html__( 'Blog Display', 'jetpack' ),
135 + 'description' => $blog_display_description,
136 + 'type' => 'radio',
137 + 'choices' => $blog_display_choices,
138 + )
139 + );
140 + }
141 +
142 + // Add Author Bio option.
143 + if ( true === $author_bio ) {
144 + $wp_customize->add_setting( 'jetpack_content_author_bio_title' );
145 +
146 + $wp_customize->add_control(
147 + new Jetpack_Customize_Control_Title(
148 + $wp_customize,
149 + 'jetpack_content_author_bio_title',
150 + array(
151 + 'section' => 'jetpack_content_options',
152 + 'label' => esc_html__( 'Author Bio', 'jetpack' ),
153 + 'type' => 'title',
154 + )
155 + )
156 + );
157 +
158 + $wp_customize->add_setting(
159 + 'jetpack_content_author_bio',
160 + array(
161 + 'default' => $author_bio_default,
162 + 'type' => 'option',
163 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
164 + )
165 + );
166 +
167 + $wp_customize->add_control(
168 + 'jetpack_content_author_bio',
169 + array(
170 + 'section' => 'jetpack_content_options',
171 + 'label' => esc_html__( 'Display on single posts', 'jetpack' ),
172 + 'type' => 'checkbox',
173 + )
174 + );
175 + }
176 +
177 + // Add Post Details options.
178 + if ( ( ! empty( $post_details ) )
179 + && ( ! empty( $post_details['stylesheet'] ) )
180 + && ( ! empty( $date )
181 + || ! empty( $categories )
182 + || ! empty( $tags )
183 + || ! empty( $author )
184 + || ! empty( $comment ) ) ) {
185 + $wp_customize->add_setting( 'jetpack_content_post_details_title' );
186 +
187 + $wp_customize->add_control(
188 + new Jetpack_Customize_Control_Title(
189 + $wp_customize,
190 + 'jetpack_content_post_details_title',
191 + array(
192 + 'section' => 'jetpack_content_options',
193 + 'label' => esc_html__( 'Post Details', 'jetpack' ),
194 + 'type' => 'title',
195 + )
196 + )
197 + );
198 +
199 + // Post Details: Date.
200 + if ( ! empty( $date ) ) {
201 + $wp_customize->add_setting(
202 + 'jetpack_content_post_details_date',
203 + array(
204 + 'default' => 1,
205 + 'type' => 'option',
206 + 'transport' => 'postMessage',
207 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
208 + )
209 + );
210 +
211 + $wp_customize->add_control(
212 + 'jetpack_content_post_details_date',
213 + array(
214 + 'section' => 'jetpack_content_options',
215 + 'label' => esc_html__( 'Display date', 'jetpack' ),
216 + 'type' => 'checkbox',
217 + )
218 + );
219 + }
220 +
221 + // Post Details: Categories.
222 + if ( ! empty( $categories ) ) {
223 + $wp_customize->add_setting(
224 + 'jetpack_content_post_details_categories',
225 + array(
226 + 'default' => 1,
227 + 'type' => 'option',
228 + 'transport' => 'postMessage',
229 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
230 + )
231 + );
232 +
233 + $wp_customize->add_control(
234 + 'jetpack_content_post_details_categories',
235 + array(
236 + 'section' => 'jetpack_content_options',
237 + 'label' => esc_html__( 'Display categories', 'jetpack' ),
238 + 'type' => 'checkbox',
239 + )
240 + );
241 + }
242 +
243 + // Post Details: Tags.
244 + if ( ! empty( $tags ) ) {
245 + $wp_customize->add_setting(
246 + 'jetpack_content_post_details_tags',
247 + array(
248 + 'default' => 1,
249 + 'type' => 'option',
250 + 'transport' => 'postMessage',
251 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
252 + )
253 + );
254 +
255 + $wp_customize->add_control(
256 + 'jetpack_content_post_details_tags',
257 + array(
258 + 'section' => 'jetpack_content_options',
259 + 'label' => esc_html__( 'Display tags', 'jetpack' ),
260 + 'type' => 'checkbox',
261 + )
262 + );
263 + }
264 +
265 + // Post Details: Author.
266 + if ( ! empty( $author ) ) {
267 + $wp_customize->add_setting(
268 + 'jetpack_content_post_details_author',
269 + array(
270 + 'default' => 1,
271 + 'type' => 'option',
272 + 'transport' => 'postMessage',
273 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
274 + )
275 + );
276 +
277 + $wp_customize->add_control(
278 + 'jetpack_content_post_details_author',
279 + array(
280 + 'section' => 'jetpack_content_options',
281 + 'label' => esc_html__( 'Display author', 'jetpack' ),
282 + 'type' => 'checkbox',
283 + )
284 + );
285 + }
286 +
287 + // Post Details: Comment link.
288 + if ( ! empty( $comment ) ) {
289 + $wp_customize->add_setting(
290 + 'jetpack_content_post_details_comment',
291 + array(
292 + 'default' => 1,
293 + 'type' => 'option',
294 + 'transport' => 'postMessage',
295 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
296 + )
297 + );
298 +
299 + $wp_customize->add_control(
300 + 'jetpack_content_post_details_comment',
301 + array(
302 + 'section' => 'jetpack_content_options',
303 + 'label' => esc_html__( 'Display comment link', 'jetpack' ),
304 + 'type' => 'checkbox',
305 + )
306 + );
307 + }
308 + }
309 +
310 + // Add Featured Images options.
311 + if ( true === $fi_archive || true === $fi_post || true === $fi_page || true === $fi_portfolio || true === $fi_fallback ) {
312 + $wp_customize->add_setting( 'jetpack_content_featured_images_title' );
313 +
314 + $wp_customize->add_control(
315 + new Jetpack_Customize_Control_Title(
316 + $wp_customize,
317 + 'jetpack_content_featured_images_title',
318 + array(
319 + 'section' => 'jetpack_content_options',
320 + 'label' => esc_html__( 'Featured Images', 'jetpack' ) . sprintf( '<a href="https://en.support.wordpress.com/featured-images/" class="customize-help-toggle dashicons dashicons-editor-help" title="%1$s" rel="noopener noreferrer" target="_blank"><span class="screen-reader-text">%1$s</span></a>', esc_html__( 'Learn more about Featured Images', 'jetpack' ) ),
321 + 'type' => 'title',
322 + 'active_callback' => 'jetpack_post_thumbnail_supports',
323 + )
324 + )
325 + );
326 +
327 + // Featured Images: Archive.
328 + if ( true === $fi_archive ) {
329 + $wp_customize->add_setting(
330 + 'jetpack_content_featured_images_archive',
331 + array(
332 + 'default' => $fi_archive_default,
333 + 'type' => 'option',
334 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
335 + )
336 + );
337 +
338 + $wp_customize->add_control(
339 + 'jetpack_content_featured_images_archive',
340 + array(
341 + 'section' => 'jetpack_content_options',
342 + 'label' => esc_html__( 'Display on blog and archives', 'jetpack' ),
343 + 'type' => 'checkbox',
344 + 'active_callback' => 'jetpack_post_thumbnail_supports',
345 + )
346 + );
347 + }
348 +
349 + // Featured Images: Post.
350 + if ( true === $fi_post ) {
351 + $wp_customize->add_setting(
352 + 'jetpack_content_featured_images_post',
353 + array(
354 + 'default' => $fi_post_default,
355 + 'type' => 'option',
356 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
357 + )
358 + );
359 +
360 + $wp_customize->add_control(
361 + 'jetpack_content_featured_images_post',
362 + array(
363 + 'section' => 'jetpack_content_options',
364 + 'label' => esc_html__( 'Display on single posts', 'jetpack' ),
365 + 'type' => 'checkbox',
366 + 'active_callback' => 'jetpack_post_thumbnail_supports',
367 + )
368 + );
369 + }
370 +
371 + // Featured Images: Page.
372 + if ( true === $fi_page ) {
373 + $wp_customize->add_setting(
374 + 'jetpack_content_featured_images_page',
375 + array(
376 + 'default' => $fi_page_default,
377 + 'type' => 'option',
378 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
379 + )
380 + );
381 +
382 + $wp_customize->add_control(
383 + 'jetpack_content_featured_images_page',
384 + array(
385 + 'section' => 'jetpack_content_options',
386 + 'label' => esc_html__( 'Display on pages', 'jetpack' ),
387 + 'type' => 'checkbox',
388 + 'active_callback' => 'jetpack_post_thumbnail_supports',
389 + )
390 + );
391 + }
392 +
393 + // Featured Images: Portfolio.
394 + if ( true === $fi_portfolio && post_type_exists( 'jetpack-portfolio' ) ) {
395 + $wp_customize->add_setting(
396 + 'jetpack_content_featured_images_portfolio',
397 + array(
398 + 'default' => $fi_portfolio_default,
399 + 'type' => 'option',
400 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
401 + )
402 + );
403 +
404 + $wp_customize->add_control(
405 + 'jetpack_content_featured_images_portfolio',
406 + array(
407 + 'section' => 'jetpack_content_options',
408 + 'label' => esc_html__( 'Display on single projects', 'jetpack' ),
409 + 'type' => 'checkbox',
410 + 'active_callback' => 'jetpack_post_thumbnail_supports',
411 + )
412 + );
413 + }
414 +
415 + // Featured Images: Fallback.
416 + if ( true === $fi_fallback ) {
417 + $wp_customize->add_setting(
418 + 'jetpack_content_featured_images_fallback',
419 + array(
420 + 'default' => $fi_fallback_default,
421 + 'type' => 'option',
422 + 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
423 + )
424 + );
425 +
426 + $wp_customize->add_control(
427 + 'jetpack_content_featured_images_fallback',
428 + array(
429 + 'section' => 'jetpack_content_options',
430 + 'label' => esc_html__( 'Automatically use first image in post', 'jetpack' ),
431 + 'type' => 'checkbox',
432 + 'active_callback' => 'jetpack_post_thumbnail_supports',
433 + )
434 + );
435 + }
436 + }
437 + }
438 + add_action( 'customize_register', 'jetpack_content_options_customize_register' );
439 +
440 +}
441 +
442 +if ( ! function_exists( 'jetpack_post_thumbnail_supports' ) ) {
443 +
444 + /**
445 + * Return whether the theme supports Post Thumbnails.
446 + *
447 + * @deprecated 13.9 Moved to Classic Theme Helper package.
448 + */
449 + function jetpack_post_thumbnail_supports() {
450 + _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
451 + return ( current_theme_supports( 'post-thumbnails' ) );
452 + }
453 +
454 +}
455 +
456 +if ( ! function_exists( 'jetpack_content_options_sanitize_checkbox' ) ) {
457 +
458 + /**
459 + * Sanitize the checkbox.
460 + *
461 + * @deprecated 13.9 Moved to Classic Theme Helper package.
462 + * @param int $input The unsanitized value from the setting.
463 + * @return boolean|string
464 + */
465 + function jetpack_content_options_sanitize_checkbox( $input ) {
466 + _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
467 + return ( 1 === (int) $input ) ? 1 : '';
468 + }
469 +
470 +}
471 +
472 +if ( ! function_exists( 'jetpack_content_options_sanitize_blog_display' ) ) {
473 +
474 + /**
475 + * Sanitize the Display value.
476 + *
477 + * @deprecated 13.9 Moved to Classic Theme Helper package.
478 + * @param string $display The unsanitized value from the setting.
479 + * @return string
480 + */
481 + function jetpack_content_options_sanitize_blog_display( $display ) {
482 + _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
483 + if ( ! in_array( $display, array( 'content', 'excerpt', 'mixed' ), true ) ) {
484 + $display = 'content';
485 + }
486 + return $display;
487 + }
488 +
489 +}
490 +
491 +if ( ! function_exists( 'jetpack_content_options_customize_preview_js' ) ) {
492 +
493 + /**
494 + * Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
495 + *
496 + * @deprecated 13.9 Moved to Classic Theme Helper package.
497 + */
498 + function jetpack_content_options_customize_preview_js() {
499 + _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
500 + $options = get_theme_support( 'jetpack-content-options' );
501 + $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
502 + $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
503 + sort( $blog_display );
504 + $blog_display = implode( ', ', $blog_display );
505 + $blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
506 + $masonry = ( ! empty( $options[0]['masonry'] ) ) ? $options[0]['masonry'] : null;
507 + $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
508 + $date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
509 + $categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
510 + $tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
511 + $author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
512 + $comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
513 +
514 + wp_enqueue_script( 'jetpack-content-options-customizer', plugins_url( 'customizer.js', __FILE__ ), array( 'jquery', 'customize-preview' ), '1.0', true );
515 +
516 + wp_localize_script(
517 + 'jetpack-content-options-customizer',
518 + 'blogDisplay',
519 + array(
520 + 'display' => get_option( 'jetpack_content_blog_display', $blog_display ),
521 + 'masonry' => $masonry,
522 + )
523 + );
524 +
525 + wp_localize_script(
526 + 'jetpack-content-options-customizer',
527 + 'postDetails',
528 + array(
529 + 'date' => $date,
530 + 'categories' => $categories,
531 + 'tags' => $tags,
532 + 'author' => $author,
533 + 'comment' => $comment,
534 + )
535 + );
536 + }
537 + add_action( 'customize_preview_init', 'jetpack_content_options_customize_preview_js' );
538 +
539 +}