PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.2
Jetpack – WP Security, Backup, Speed, & Growth v16.2
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 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 All 502 releases
jetpack / modules / theme-tools / content-options / customizer.php

customizer.php in Jetpack – WP Security, Backup, Speed, & Growth 16.2, at modules/theme-tools/content-options/customizer.php

540 lines 18.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
540