218 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			218 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * This file handles adding Customizer controls.
 | 
						|
 *
 | 
						|
 * @package GeneratePress
 | 
						|
 */
 | 
						|
 | 
						|
if ( ! defined( 'ABSPATH' ) ) {
 | 
						|
	exit; // Exit if accessed directly.
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Helper functions to add Customizer fields.
 | 
						|
 */
 | 
						|
class GeneratePress_Customize_Field {
 | 
						|
	/**
 | 
						|
	 * Instance.
 | 
						|
	 *
 | 
						|
	 * @access private
 | 
						|
	 * @var object Instance
 | 
						|
	 */
 | 
						|
	private static $instance;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Initiator.
 | 
						|
	 *
 | 
						|
	 * @since 1.2.0
 | 
						|
	 * @return object initialized object of class.
 | 
						|
	 */
 | 
						|
	public static function get_instance() {
 | 
						|
		if ( ! isset( self::$instance ) ) {
 | 
						|
			self::$instance = new self();
 | 
						|
		}
 | 
						|
 | 
						|
		return self::$instance;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Add a wrapper for defined controls.
 | 
						|
	 *
 | 
						|
	 * @param string $id The settings ID for this field.
 | 
						|
	 * @param array  $control_args The args for add_control().
 | 
						|
	 */
 | 
						|
	public static function add_wrapper( $id, $control_args = array() ) {
 | 
						|
		global $wp_customize;
 | 
						|
 | 
						|
		if ( ! $id ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$control_args['settings'] = isset( $wp_customize->selective_refresh ) ? array() : 'blogname';
 | 
						|
		$control_args['choices']['id'] = str_replace( '_', '-', $id );
 | 
						|
		$control_args['type'] = 'generate-wrapper-control';
 | 
						|
 | 
						|
		$wp_customize->add_control(
 | 
						|
			new GeneratePress_Customize_React_Control(
 | 
						|
				$wp_customize,
 | 
						|
				$id,
 | 
						|
				$control_args
 | 
						|
			)
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Add a title.
 | 
						|
	 *
 | 
						|
	 * @param string $id The settings ID for this field.
 | 
						|
	 * @param array  $control_args The args for add_control().
 | 
						|
	 */
 | 
						|
	public static function add_title( $id, $control_args = array() ) {
 | 
						|
		global $wp_customize;
 | 
						|
 | 
						|
		if ( ! $id ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$control_args['settings'] = isset( $wp_customize->selective_refresh ) ? array() : 'blogname';
 | 
						|
		$control_args['type'] = 'generate-title-control';
 | 
						|
		$control_args['choices']['title'] = $control_args['title'];
 | 
						|
		unset( $control_args['title'] );
 | 
						|
 | 
						|
		$wp_customize->add_control(
 | 
						|
			new GeneratePress_Customize_React_Control(
 | 
						|
				$wp_customize,
 | 
						|
				$id,
 | 
						|
				$control_args
 | 
						|
			)
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Add a Customizer field.
 | 
						|
	 *
 | 
						|
	 * @param string $id The settings ID for this field.
 | 
						|
	 * @param object $control_class A custom control classes if we want one.
 | 
						|
	 * @param array  $setting_args The args for add_setting().
 | 
						|
	 * @param array  $control_args The args for add_control().
 | 
						|
	 */
 | 
						|
	public static function add_field( $id, $control_class, $setting_args = array(), $control_args = array() ) {
 | 
						|
		global $wp_customize;
 | 
						|
 | 
						|
		if ( ! $id ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$settings = wp_parse_args(
 | 
						|
			$setting_args,
 | 
						|
			array(
 | 
						|
				'type' => 'option',
 | 
						|
				'capability' => 'edit_theme_options',
 | 
						|
				'default' => '',
 | 
						|
				'transport' => 'refresh',
 | 
						|
				'validate_callback' => '',
 | 
						|
				'sanitize_callback' => '',
 | 
						|
			)
 | 
						|
		);
 | 
						|
 | 
						|
		$wp_customize->add_setting(
 | 
						|
			$id,
 | 
						|
			array(
 | 
						|
				'type' => $settings['type'],
 | 
						|
				'capability' => $settings['capability'],
 | 
						|
				'default' => $settings['default'],
 | 
						|
				'transport' => $settings['transport'],
 | 
						|
				'validate_callback' => $settings['validate_callback'],
 | 
						|
				'sanitize_callback' => $settings['sanitize_callback'],
 | 
						|
			)
 | 
						|
		);
 | 
						|
 | 
						|
		$control_args['settings'] = $id;
 | 
						|
 | 
						|
		if ( ! isset( $control_args['type'] ) ) {
 | 
						|
			unset( $control_args['type'] );
 | 
						|
		}
 | 
						|
 | 
						|
		if ( ! isset( $control_args['defaultValue'] ) && isset( $setting_args['default'] ) ) {
 | 
						|
			$control_args['defaultValue'] = $setting_args['default'];
 | 
						|
		}
 | 
						|
 | 
						|
		if ( isset( $control_args['output'] ) ) {
 | 
						|
			global $generate_customize_fields;
 | 
						|
 | 
						|
			$generate_customize_fields[] = array(
 | 
						|
				'js_vars' => $control_args['output'],
 | 
						|
				'settings' => $id,
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( $control_class ) {
 | 
						|
			$wp_customize->add_control(
 | 
						|
				new $control_class(
 | 
						|
					$wp_customize,
 | 
						|
					$id,
 | 
						|
					$control_args
 | 
						|
				)
 | 
						|
			);
 | 
						|
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$wp_customize->add_control(
 | 
						|
			$id,
 | 
						|
			$control_args
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Add color field group.
 | 
						|
	 *
 | 
						|
	 * @param string $id The ID for the group wrapper.
 | 
						|
	 * @param string $section_id The section ID.
 | 
						|
	 * @param string $toggle_id The Toggle ID.
 | 
						|
	 * @param array  $fields The color fields.
 | 
						|
	 */
 | 
						|
	public static function add_color_field_group( $id, $section_id, $toggle_id, $fields ) {
 | 
						|
		self::add_wrapper(
 | 
						|
			"generate_{$id}_wrapper",
 | 
						|
			array(
 | 
						|
				'section' => $section_id,
 | 
						|
				'choices' => array(
 | 
						|
					'type' => 'color',
 | 
						|
					'toggleId' => $toggle_id,
 | 
						|
					'items' => array_keys( $fields ),
 | 
						|
				),
 | 
						|
			)
 | 
						|
		);
 | 
						|
 | 
						|
		foreach ( $fields as $key => $field ) {
 | 
						|
			self::add_field(
 | 
						|
				$key,
 | 
						|
				'GeneratePress_Customize_Color_Control',
 | 
						|
				array(
 | 
						|
					'default' => $field['default_value'],
 | 
						|
					'transport' => 'postMessage',
 | 
						|
					'sanitize_callback' => 'generate_sanitize_rgba_color',
 | 
						|
				),
 | 
						|
				array(
 | 
						|
					'label' => $field['label'],
 | 
						|
					'section' => $section_id,
 | 
						|
					'choices' => array(
 | 
						|
						'alpha' => isset( $field['alpha'] ) ? $field['alpha'] : true,
 | 
						|
						'toggleId' => $toggle_id,
 | 
						|
						'wrapper' => $key,
 | 
						|
						'tooltip' => $field['tooltip'],
 | 
						|
						'hideLabel' => isset( $field['hide_label'] ) ? $field['hide_label'] : false,
 | 
						|
					),
 | 
						|
					'output' => array(
 | 
						|
						array(
 | 
						|
							'element'  => $field['element'],
 | 
						|
							'property' => $field['property'],
 | 
						|
						),
 | 
						|
					),
 | 
						|
				)
 | 
						|
			);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |