| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- <?php
- // Exit if file is accessed directly
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- /**
- * Class to include elements to modify Related Posts look in Customizer.
- *
- * @since 4.4.0
- */
- class Jetpack_Related_Posts_Customize {
- /**
- * Key for panel, section and prefix for options. Same option name than in Options > Reading.
- *
- * @var string
- */
- var $prefix = 'jetpack_relatedposts';
- /**
- * @var string Control to focus when customizer loads.
- */
- var $focus = '';
- /**
- * Class initialization.
- *
- * @since 4.4.0
- */
- function __construct() {
- add_action( 'customize_register', array( $this, 'customize_register' ) );
- add_action( 'customize_controls_enqueue_scripts', array( $this, 'customize_controls_enqueue_scripts' ) );
- }
- /**
- * Initialize Customizer controls.
- *
- * @since 4.4.0
- *
- * @param WP_Customize_Manager $wp_customize Customizer instance.
- */
- function customize_register( $wp_customize ) {
- $wp_customize->add_section( $this->prefix,
- array(
- 'title' => esc_html__( 'Related Posts', 'jetpack' ),
- 'description' => '',
- 'capability' => 'edit_theme_options',
- 'priority' => 200,
- )
- );
- $selective_options = array();
- foreach ( $this->get_options( $wp_customize ) as $key => $field ) {
- $control_id = "$this->prefix[$key]";
- $selective_options[] = $control_id;
- $wp_customize->add_setting( $control_id,
- array(
- 'default' => isset( $field['default'] ) ? $field['default'] : '',
- 'type' => isset( $field['setting_type'] ) ? $field['setting_type'] : 'option',
- 'capability' => isset( $field['capability'] ) ? $field['capability'] : 'edit_theme_options',
- 'transport' => isset( $field['transport'] ) ? $field['transport'] : 'postMessage',
- )
- );
- $control_settings = array(
- 'label' => isset( $field['label'] ) ? $field['label'] : '',
- 'description' => isset( $field['description'] ) ? $field['description'] : '',
- 'settings' => $control_id,
- 'type' => isset( $field['control_type'] ) ? $field['control_type'] : 'text',
- 'section' => $this->prefix,
- 'priority' => 10,
- 'active_callback' => isset( $field['active_callback'] ) ? $field['active_callback'] : __CLASS__ . '::is_single',
- );
- switch ( $field['control_type'] ) {
- case 'text':
- case 'checkbox':
- default:
- $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control_id, $control_settings ) );
- break;
- case 'select':
- if ( isset( $field['choices'] ) ) {
- $control_settings['choices'] = $field['choices'];
- $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control_id, $control_settings ) );
- }
- break;
- case 'message':
- $wp_customize->add_control( new Jetpack_Message_Control( $wp_customize, $control_id, $control_settings ) );
- break;
- }
- }
- // If selective refresh is available, implement it.
- if ( isset( $wp_customize->selective_refresh ) ) {
- $wp_customize->selective_refresh->add_partial( "$this->prefix", array(
- 'selector' => '.jp-relatedposts',
- 'settings' => $selective_options,
- 'render_callback' => __CLASS__ . '::render_callback',
- 'container_inclusive' => false,
- ) );
- }
- }
- /**
- * Callback that outputs the headline based on user choice.
- *
- * @since 4.4.0
- */
- public static function render_callback() {
- echo Jetpack_RelatedPosts::init()->get_headline();
- }
- /**
- * Check that we're in a single post view.
- *
- * @since 4.4.0
- *
- * @return bool
- */
- public static function is_single() {
- return is_single();
- }
- /**
- * Check that we're not in a single post view.
- *
- * @since 4.4.0
- *
- * @return bool
- */
- public static function is_not_single() {
- return ! is_single();
- }
- /**
- * Return list of options to modify.
- *
- * @since 4.4.0
- *
- * @param object $wp_customize Instance of WP Customizer
- *
- * @return mixed|void
- */
- function get_options( $wp_customize ) {
- $transport = isset( $wp_customize->selective_refresh ) ? 'postMessage' : 'refresh';
- // Get the correct translated string for preview in WP 4.7 and later.
- $switched_locale = function_exists( 'switch_to_locale' )
- ? switch_to_locale( get_user_locale() )
- : false;
- $headline = __( 'Related', 'jetpack' );
- if ( $switched_locale ) {
- restore_previous_locale();
- }
- /**
- * The filter allows you to change the options used to display Related Posts in the Customizer.
- *
- * @module related-posts
- *
- * @since 4.4.0
- *
- * @param array $options Array of options used to display Related Posts in the Customizer.
- */
- return apply_filters(
- 'jetpack_related_posts_customize_options', array(
- 'enabled' => array(
- 'control_type' => 'hidden',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'show_headline' => array(
- 'label' => esc_html__( 'Show a headline', 'jetpack' ),
- 'description' => esc_html__( 'This helps to clearly separate the related posts from post content.', 'jetpack' ),
- 'control_type' => 'checkbox',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'headline' => array(
- 'label' => '',
- 'description' => esc_html__( 'Enter text to use as headline.', 'jetpack' ),
- 'control_type' => 'text',
- 'default' => esc_html( $headline ),
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'show_thumbnails' => array(
- 'label' => esc_html__( 'Show thumbnails', 'jetpack' ),
- 'description' => esc_html__( 'Show a thumbnail image where available.', 'jetpack' ),
- 'control_type' => 'checkbox',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'show_date' => array(
- 'label' => esc_html__( 'Show date', 'jetpack' ),
- 'description' => esc_html__( 'Display date when entry was published.', 'jetpack' ),
- 'control_type' => 'checkbox',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'show_context' => array(
- 'label' => esc_html__( 'Show context', 'jetpack' ),
- 'description' => esc_html__( "Display entry's category or tag.", 'jetpack' ),
- 'control_type' => 'checkbox',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'layout' => array(
- 'label' => esc_html__( 'Layout', 'jetpack' ),
- 'description' => esc_html__( 'Arrange entries in different layouts.', 'jetpack' ),
- 'control_type' => 'select',
- 'choices' => array(
- 'grid' => esc_html__( 'Grid', 'jetpack' ),
- 'list' => esc_html__( 'List', 'jetpack' ),
- ),
- 'default' => 'grid',
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'msg_go_to_single' => array(
- 'description' => esc_html__( 'Please visit a single post view to reveal the customization options.', 'jetpack' ),
- 'control_type' => 'message',
- 'active_callback' => __CLASS__ . '::is_not_single',
- ),
- 'msg_example' => array(
- 'description' => esc_html__( 'Please note that the related posts displayed now are only for previewing purposes.', 'jetpack' ),
- 'control_type' => 'message',
- ),
- )
- );
- }
- /**
- * Enqueue assets for Customizer controls.
- *
- * @since 4.4.0
- */
- function customize_controls_enqueue_scripts() {
- wp_enqueue_script(
- 'jetpack_related-posts-customizer',
- Jetpack::get_file_url_for_environment(
- '_inc/build/related-posts/related-posts-customizer.min.js',
- 'modules/related-posts/related-posts-customizer.js'
- ),
- array( 'customize-controls' ),
- JETPACK__VERSION
- );
- }
- } // class end
- /**
- * Control that displays a message in Customizer.
- *
- * @since 4.4.0
- */
- class Jetpack_Message_Control extends WP_Customize_Control {
- /**
- * Render the message.
- *
- * @since 4.4.0
- */
- public function render_content() {
- echo '<p class="description">' . esc_html( $this->description ) . '</p>';
- }
- } // class end
- // Initialize controls
- new Jetpack_Related_Posts_Customize;
|