535 lines
18 KiB
PHP
535 lines
18 KiB
PHP
<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
|
|
/**
|
|
* Theme Tools: functions for Customizer enhancements.
|
|
*
|
|
* @package automattic/jetpack
|
|
*/
|
|
|
|
if ( ! function_exists( 'jetpack_content_options_customize_register' ) ) {
|
|
|
|
/**
|
|
* Add Content section to the Theme Customizer.
|
|
*
|
|
* @deprecated 13.9 Moved to Classic Theme Helper package.
|
|
*
|
|
* @param WP_Customize_Manager $wp_customize Theme Customizer object.
|
|
*/
|
|
function jetpack_content_options_customize_register( $wp_customize ) {
|
|
_deprecated_function( __FUNCTION__, 'jetpack-13.9' );
|
|
$options = get_theme_support( 'jetpack-content-options' );
|
|
$blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
|
|
$blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
|
|
sort( $blog_display );
|
|
$blog_display = implode( ', ', $blog_display );
|
|
$blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
|
|
$author_bio = ( ! empty( $options[0]['author-bio'] ) ) ? $options[0]['author-bio'] : null;
|
|
$author_bio_default = ( isset( $options[0]['author-bio-default'] ) && false === $options[0]['author-bio-default'] ) ? '' : 1;
|
|
$post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
|
|
$date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
|
|
$categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
|
|
$tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
|
|
$author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
|
|
$comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
|
|
$featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
|
|
$fi_archive = ( ! empty( $featured_images['archive'] ) ) ? $featured_images['archive'] : null;
|
|
$fi_post = ( ! empty( $featured_images['post'] ) ) ? $featured_images['post'] : null;
|
|
$fi_page = ( ! empty( $featured_images['page'] ) ) ? $featured_images['page'] : null;
|
|
$fi_portfolio = ( ! empty( $featured_images['portfolio'] ) ) ? $featured_images['portfolio'] : null;
|
|
$fi_fallback = ( ! empty( $featured_images['fallback'] ) ) ? $featured_images['fallback'] : null;
|
|
$fi_archive_default = ( isset( $featured_images['archive-default'] ) && false === $featured_images['archive-default'] ) ? '' : 1;
|
|
$fi_post_default = ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1;
|
|
$fi_page_default = ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1;
|
|
$fi_portfolio_default = ( isset( $featured_images['portfolio-default'] ) && false === $featured_images['portfolio-default'] ) ? '' : 1;
|
|
$fi_fallback_default = ( isset( $featured_images['fallback-default'] ) && false === $featured_images['fallback-default'] ) ? '' : 1;
|
|
|
|
// 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.
|
|
if ( ( ! in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ), true ) )
|
|
&& ( true !== $author_bio )
|
|
&& ( ( empty( $post_details['stylesheet'] ) )
|
|
&& ( empty( $date )
|
|
|| empty( $categories )
|
|
|| empty( $tags )
|
|
|| empty( $author )
|
|
|| empty( $comment ) ) )
|
|
&& ( true !== $fi_archive && true !== $fi_post && true !== $fi_page && true !== $fi_portfolio && true !== $fi_fallback ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! class_exists( 'Jetpack_Customize_Control_Title' ) ) {
|
|
|
|
/**
|
|
* New Customizer control type: Title.
|
|
*/
|
|
class Jetpack_Customize_Control_Title extends WP_Customize_Control {
|
|
/**
|
|
* Customizer control type.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $type = 'title';
|
|
|
|
/**
|
|
* Render the control's content.
|
|
*/
|
|
public function render_content() { // phpcs:ignore MediaWiki.Usage.NestedFunctions.NestedFunction
|
|
?>
|
|
<span class="customize-control-title"><?php echo wp_kses_post( $this->label ); ?></span>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// Add Content section.
|
|
$wp_customize->add_section(
|
|
'jetpack_content_options',
|
|
array(
|
|
'title' => esc_html__( 'Content Options', 'jetpack' ),
|
|
'theme_supports' => 'jetpack-content-options',
|
|
'priority' => 100,
|
|
)
|
|
);
|
|
|
|
// Add Blog Display option.
|
|
if ( in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ), true ) ) {
|
|
if ( 'mixed' === $blog_display ) {
|
|
$blog_display_choices = array(
|
|
'content' => esc_html__( 'Full post', 'jetpack' ),
|
|
'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
|
|
'mixed' => esc_html__( 'Default', 'jetpack' ),
|
|
);
|
|
|
|
$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' );
|
|
} else {
|
|
$blog_display_choices = array(
|
|
'content' => esc_html__( 'Full post', 'jetpack' ),
|
|
'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
|
|
);
|
|
|
|
$blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages.', 'jetpack' );
|
|
|
|
if ( 'mixed' === get_option( 'jetpack_content_blog_display' ) ) {
|
|
update_option( 'jetpack_content_blog_display', $blog_display );
|
|
}
|
|
}
|
|
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_blog_display',
|
|
array(
|
|
'default' => $blog_display,
|
|
'type' => 'option',
|
|
'transport' => 'postMessage',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_blog_display',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_blog_display',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Blog Display', 'jetpack' ),
|
|
'description' => $blog_display_description,
|
|
'type' => 'radio',
|
|
'choices' => $blog_display_choices,
|
|
)
|
|
);
|
|
}
|
|
|
|
// Add Author Bio option.
|
|
if ( true === $author_bio ) {
|
|
$wp_customize->add_setting( 'jetpack_content_author_bio_title' );
|
|
|
|
$wp_customize->add_control(
|
|
new Jetpack_Customize_Control_Title(
|
|
$wp_customize,
|
|
'jetpack_content_author_bio_title',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Author Bio', 'jetpack' ),
|
|
'type' => 'title',
|
|
)
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_author_bio',
|
|
array(
|
|
'default' => $author_bio_default,
|
|
'type' => 'option',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_author_bio',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display on single posts', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Add Post Details options.
|
|
if ( ( ! empty( $post_details ) )
|
|
&& ( ! empty( $post_details['stylesheet'] ) )
|
|
&& ( ! empty( $date )
|
|
|| ! empty( $categories )
|
|
|| ! empty( $tags )
|
|
|| ! empty( $author )
|
|
|| ! empty( $comment ) ) ) {
|
|
$wp_customize->add_setting( 'jetpack_content_post_details_title' );
|
|
|
|
$wp_customize->add_control(
|
|
new Jetpack_Customize_Control_Title(
|
|
$wp_customize,
|
|
'jetpack_content_post_details_title',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Post Details', 'jetpack' ),
|
|
'type' => 'title',
|
|
)
|
|
)
|
|
);
|
|
|
|
// Post Details: Date.
|
|
if ( ! empty( $date ) ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_post_details_date',
|
|
array(
|
|
'default' => 1,
|
|
'type' => 'option',
|
|
'transport' => 'postMessage',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_post_details_date',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display date', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Post Details: Categories.
|
|
if ( ! empty( $categories ) ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_post_details_categories',
|
|
array(
|
|
'default' => 1,
|
|
'type' => 'option',
|
|
'transport' => 'postMessage',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_post_details_categories',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display categories', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Post Details: Tags.
|
|
if ( ! empty( $tags ) ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_post_details_tags',
|
|
array(
|
|
'default' => 1,
|
|
'type' => 'option',
|
|
'transport' => 'postMessage',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_post_details_tags',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display tags', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Post Details: Author.
|
|
if ( ! empty( $author ) ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_post_details_author',
|
|
array(
|
|
'default' => 1,
|
|
'type' => 'option',
|
|
'transport' => 'postMessage',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_post_details_author',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display author', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Post Details: Comment link.
|
|
if ( ! empty( $comment ) ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_post_details_comment',
|
|
array(
|
|
'default' => 1,
|
|
'type' => 'option',
|
|
'transport' => 'postMessage',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_post_details_comment',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display comment link', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
// Add Featured Images options.
|
|
if ( true === $fi_archive || true === $fi_post || true === $fi_page || true === $fi_portfolio || true === $fi_fallback ) {
|
|
$wp_customize->add_setting( 'jetpack_content_featured_images_title' );
|
|
|
|
$wp_customize->add_control(
|
|
new Jetpack_Customize_Control_Title(
|
|
$wp_customize,
|
|
'jetpack_content_featured_images_title',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'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' ) ),
|
|
'type' => 'title',
|
|
'active_callback' => 'jetpack_post_thumbnail_supports',
|
|
)
|
|
)
|
|
);
|
|
|
|
// Featured Images: Archive.
|
|
if ( true === $fi_archive ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_featured_images_archive',
|
|
array(
|
|
'default' => $fi_archive_default,
|
|
'type' => 'option',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_featured_images_archive',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display on blog and archives', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
'active_callback' => 'jetpack_post_thumbnail_supports',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Featured Images: Post.
|
|
if ( true === $fi_post ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_featured_images_post',
|
|
array(
|
|
'default' => $fi_post_default,
|
|
'type' => 'option',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_featured_images_post',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display on single posts', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
'active_callback' => 'jetpack_post_thumbnail_supports',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Featured Images: Page.
|
|
if ( true === $fi_page ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_featured_images_page',
|
|
array(
|
|
'default' => $fi_page_default,
|
|
'type' => 'option',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_featured_images_page',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display on pages', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
'active_callback' => 'jetpack_post_thumbnail_supports',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Featured Images: Portfolio.
|
|
if ( true === $fi_portfolio && post_type_exists( 'jetpack-portfolio' ) ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_featured_images_portfolio',
|
|
array(
|
|
'default' => $fi_portfolio_default,
|
|
'type' => 'option',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_featured_images_portfolio',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Display on single projects', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
'active_callback' => 'jetpack_post_thumbnail_supports',
|
|
)
|
|
);
|
|
}
|
|
|
|
// Featured Images: Fallback.
|
|
if ( true === $fi_fallback ) {
|
|
$wp_customize->add_setting(
|
|
'jetpack_content_featured_images_fallback',
|
|
array(
|
|
'default' => $fi_fallback_default,
|
|
'type' => 'option',
|
|
'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'jetpack_content_featured_images_fallback',
|
|
array(
|
|
'section' => 'jetpack_content_options',
|
|
'label' => esc_html__( 'Automatically use first image in post', 'jetpack' ),
|
|
'type' => 'checkbox',
|
|
'active_callback' => 'jetpack_post_thumbnail_supports',
|
|
)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
add_action( 'customize_register', 'jetpack_content_options_customize_register' );
|
|
|
|
}
|
|
|
|
if ( ! function_exists( 'jetpack_post_thumbnail_supports' ) ) {
|
|
|
|
/**
|
|
* Return whether the theme supports Post Thumbnails.
|
|
*
|
|
* @deprecated 13.9 Moved to Classic Theme Helper package.
|
|
*/
|
|
function jetpack_post_thumbnail_supports() {
|
|
_deprecated_function( __FUNCTION__, 'jetpack-13.9' );
|
|
return ( current_theme_supports( 'post-thumbnails' ) );
|
|
}
|
|
|
|
}
|
|
|
|
if ( ! function_exists( 'jetpack_content_options_sanitize_checkbox' ) ) {
|
|
|
|
/**
|
|
* Sanitize the checkbox.
|
|
*
|
|
* @deprecated 13.9 Moved to Classic Theme Helper package.
|
|
* @param int $input The unsanitized value from the setting.
|
|
* @return boolean|string
|
|
*/
|
|
function jetpack_content_options_sanitize_checkbox( $input ) {
|
|
_deprecated_function( __FUNCTION__, 'jetpack-13.9' );
|
|
return ( 1 === (int) $input ) ? 1 : '';
|
|
}
|
|
|
|
}
|
|
|
|
if ( ! function_exists( 'jetpack_content_options_sanitize_blog_display' ) ) {
|
|
|
|
/**
|
|
* Sanitize the Display value.
|
|
*
|
|
* @deprecated 13.9 Moved to Classic Theme Helper package.
|
|
* @param string $display The unsanitized value from the setting.
|
|
* @return string
|
|
*/
|
|
function jetpack_content_options_sanitize_blog_display( $display ) {
|
|
_deprecated_function( __FUNCTION__, 'jetpack-13.9' );
|
|
if ( ! in_array( $display, array( 'content', 'excerpt', 'mixed' ), true ) ) {
|
|
$display = 'content';
|
|
}
|
|
return $display;
|
|
}
|
|
|
|
}
|
|
|
|
if ( ! function_exists( 'jetpack_content_options_customize_preview_js' ) ) {
|
|
|
|
/**
|
|
* Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
|
|
*
|
|
* @deprecated 13.9 Moved to Classic Theme Helper package.
|
|
*/
|
|
function jetpack_content_options_customize_preview_js() {
|
|
_deprecated_function( __FUNCTION__, 'jetpack-13.9' );
|
|
$options = get_theme_support( 'jetpack-content-options' );
|
|
$blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
|
|
$blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
|
|
sort( $blog_display );
|
|
$blog_display = implode( ', ', $blog_display );
|
|
$blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
|
|
$masonry = ( ! empty( $options[0]['masonry'] ) ) ? $options[0]['masonry'] : null;
|
|
$post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
|
|
$date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
|
|
$categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
|
|
$tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
|
|
$author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
|
|
$comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
|
|
|
|
wp_enqueue_script( 'jetpack-content-options-customizer', plugins_url( 'customizer.js', __FILE__ ), array( 'jquery', 'customize-preview' ), '1.0', true );
|
|
|
|
wp_localize_script(
|
|
'jetpack-content-options-customizer',
|
|
'blogDisplay',
|
|
array(
|
|
'display' => get_option( 'jetpack_content_blog_display', $blog_display ),
|
|
'masonry' => $masonry,
|
|
)
|
|
);
|
|
|
|
wp_localize_script(
|
|
'jetpack-content-options-customizer',
|
|
'postDetails',
|
|
array(
|
|
'date' => $date,
|
|
'categories' => $categories,
|
|
'tags' => $tags,
|
|
'author' => $author,
|
|
'comment' => $comment,
|
|
)
|
|
);
|
|
}
|
|
add_action( 'customize_preview_init', 'jetpack_content_options_customize_preview_js' );
|
|
|
|
}
|