432 lines
11 KiB
PHP
432 lines
11 KiB
PHP
<?php
|
|
/**
|
|
* Register the customizer settings.
|
|
*
|
|
* @package olympus-google-fonts
|
|
* @copyright Copyright (c) 2020, Fonts Plugin
|
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
|
*/
|
|
|
|
/**
|
|
* Register the custom Typography control.
|
|
*
|
|
* @param object $wp_customize Access to the $wp_customize object.
|
|
*/
|
|
function ogf_register_typography_control( $wp_customize ) {
|
|
if ( ! class_exists( 'OGF_Customize_Typography_Control' ) ) {
|
|
require_once OGF_DIR_PATH . 'includes/customizer/controls/class-ogf-customize-typography-control.php';
|
|
$wp_customize->register_control_type( 'OGF_Customize_Typography_Control' );
|
|
}
|
|
}
|
|
add_action( 'customize_register', 'ogf_register_typography_control', 10 );
|
|
|
|
/**
|
|
* An array containing the customizer sections, settings and controls.
|
|
*
|
|
* @param object $wp_customize Access to the $wp_customize object.
|
|
*/
|
|
function ogf_customize_register( $wp_customize ) {
|
|
require_once OGF_DIR_PATH . 'includes/customizer/controls/class-ogf-customize-multiple-fonts-control.php';
|
|
require_once OGF_DIR_PATH . 'includes/customizer/controls/class-ogf-customize-repeater-control.php';
|
|
require_once OGF_DIR_PATH . 'includes/customizer/controls/class-ogf-customize-upsell-control.php';
|
|
require_once OGF_DIR_PATH . 'includes/customizer/controls/class-ogf-customize-multiple-checkbox-control.php';
|
|
|
|
$wp_customize->register_control_type( 'OGF_Customize_Multiple_Fonts_Control' );
|
|
$wp_customize->register_control_type( 'OGF_Customize_Multiple_Checkbox_Control' );
|
|
|
|
$wp_customize->add_setting(
|
|
'ogf_custom_selectors',
|
|
array(
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
new OGF_Customize_Repeater_Control(
|
|
$wp_customize,
|
|
'ogf_custom_selectors',
|
|
array(
|
|
'label' => esc_html__( 'Custom Elements', 'olympus-google-fonts' ),
|
|
'section' => 'ogf_custom',
|
|
)
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
'ogf_load_fonts',
|
|
array(
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
new OGF_Customize_Multiple_Fonts_Control(
|
|
$wp_customize,
|
|
'ogf_load_fonts',
|
|
array(
|
|
'label' => esc_html__( 'Load Fonts Only', 'olympus-google-fonts' ),
|
|
'description' => esc_html__( 'Load fonts but don\'t automatically assign them to an element.', 'olympus-google-fonts' ),
|
|
'section' => 'ogf_advanced__css',
|
|
'type' => 'ogf-typography-multiselect',
|
|
)
|
|
)
|
|
);
|
|
|
|
/**
|
|
* Build customizer controls.
|
|
*
|
|
* @param array $elements array of elements to build controls based on.
|
|
*/
|
|
function ogf_build_customizer_controls( $elements ) {
|
|
global $wp_customize;
|
|
|
|
foreach ( $elements as $id => $values ) {
|
|
$wp_customize->add_setting(
|
|
$id . '_font',
|
|
array(
|
|
'default' => 'default',
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_font_weight',
|
|
array(
|
|
'default' => '0',
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_font_style',
|
|
array(
|
|
'default' => 'default',
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_font_size',
|
|
array(
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_font_size_tablet',
|
|
array(
|
|
'transport' => 'refresh',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_font_size_mobile',
|
|
array(
|
|
'transport' => 'refresh',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_line_height',
|
|
array(
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_line_height_tablet',
|
|
array(
|
|
'transport' => 'refresh',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_line_height_mobile',
|
|
array(
|
|
'transport' => 'refresh',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_font_color',
|
|
array(
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_letter_spacing',
|
|
array(
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_text_transform',
|
|
array(
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
$id . '_text_decoration',
|
|
array(
|
|
'transport' => 'postMessage',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
new OGF_Customize_Typography_Control(
|
|
$wp_customize,
|
|
$id . '_typography',
|
|
array(
|
|
'priority' => ( isset( $values['priority'] ) ? absint( $values['priority'] ) : 10 ),
|
|
'label' => ( isset( $values['label'] ) ? esc_attr( $values['label'] ) : '' ),
|
|
'description' => ( isset( $values['description'] ) ? esc_attr( $values['description'] ) : '' ),
|
|
'section' => ( isset( $values['section'] ) ? esc_attr( $values['section'] ) : '' ),
|
|
'type' => 'ogf-typography',
|
|
'settings' =>
|
|
apply_filters(
|
|
'ogf_typography_control_settings',
|
|
array(
|
|
'family' => $id . '_font',
|
|
'weight' => $id . '_font_weight',
|
|
'style' => $id . '_font_style',
|
|
'size' => $id . '_font_size',
|
|
'size_tablet' => $id . '_font_size_tablet',
|
|
'size_mobile' => $id . '_font_size_mobile',
|
|
'line_height' => $id . '_line_height',
|
|
'line_height_tablet' => $id . '_line_height_tablet',
|
|
'line_height_mobile' => $id . '_line_height_mobile',
|
|
'color' => $id . '_font_color',
|
|
'letter_spacing' => $id . '_letter_spacing',
|
|
'text_transform' => $id . '_text_transform',
|
|
),
|
|
$id
|
|
),
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
ogf_build_customizer_controls( ogf_get_elements() );
|
|
ogf_build_customizer_controls( ogf_get_custom_elements() );
|
|
|
|
$wp_customize->add_setting(
|
|
'ogf_force_styles',
|
|
array(
|
|
'default' => '',
|
|
'transport' => 'refresh',
|
|
'sanitize_callback' => 'wp_validate_boolean',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'force_styles',
|
|
array(
|
|
'label' => esc_html__( 'Force Styles?', 'olympus-google-fonts' ),
|
|
'description' => esc_html__( 'If your choices are not displaying correctly, check this box.', 'olympus-google-fonts' ),
|
|
'section' => 'ogf_debugging',
|
|
'settings' => 'ogf_force_styles',
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
'ogf_disable_post_level_controls',
|
|
array(
|
|
'default' => '',
|
|
'transport' => 'postMessage',
|
|
'sanitize_callback' => 'wp_validate_boolean',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'ogf_disable_post_level_controls',
|
|
array(
|
|
'label' => esc_html__( 'Disable Editor Controls', 'olympus-google-fonts' ),
|
|
'description' => esc_html__( 'Remove font controls from the individual post editor screen (Gutenberg and Classic).', 'olympus-google-fonts' ),
|
|
'section' => 'ogf_debugging',
|
|
'settings' => 'ogf_disable_post_level_controls',
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
'ogf_use_px',
|
|
array(
|
|
'default' => 'true',
|
|
'transport' => 'postMessage',
|
|
'sanitize_callback' => 'wp_validate_boolean',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'ogf_use_px',
|
|
array(
|
|
'label' => esc_html__( 'Use px Font Sizes', 'olympus-google-fonts' ),
|
|
'description' => esc_html__( 'Replace the default (pt) font sizes with px values in the Classic Editor.', 'olympus-google-fonts' ),
|
|
'section' => 'ogf_debugging',
|
|
'settings' => 'ogf_use_px',
|
|
'type' => 'checkbox',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_setting(
|
|
'ogf_font_display',
|
|
array(
|
|
'sanitize_callback' => 'ogf_sanitize_select',
|
|
'default' => 'swap',
|
|
)
|
|
);
|
|
|
|
$wp_customize->add_control(
|
|
'ogf_font_display',
|
|
array(
|
|
'label' => esc_html__( 'Font Display', 'olympus-google-fonts' ),
|
|
'description' => '<a href = "https: //fontsplugin.com/google-fonts-font-display-swap/#values">' . esc_html__( 'Learn more →', 'olympus-google-fonts' ) . '</a>',
|
|
'type' => 'select',
|
|
'section' => 'ogf_debugging',
|
|
'choices' => array(
|
|
'swap' => esc_html__( 'Swap', 'olympus-google-fonts' ),
|
|
'block' => esc_html__( 'Block', 'olympus-google-fonts' ),
|
|
'fallback' => esc_html__( 'Fallback', 'olympus-google-fonts' ),
|
|
'optional' => esc_html__( 'Optional', 'olympus-google-fonts' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$fonts = new OGF_Fonts();
|
|
$subsets = array();
|
|
|
|
if ( $fonts->has_google_fonts() ) {
|
|
|
|
// Build the selective font loading controls.
|
|
foreach ( $fonts->choices as $font_id ) {
|
|
if ( ! ogf_is_google_font( $font_id ) ) {
|
|
continue;
|
|
}
|
|
|
|
$weights = $fonts->get_font_weights( $font_id );
|
|
$name = $fonts->get_font_name( $font_id );
|
|
$all_variants = ogf_font_variants();
|
|
$new_variants = array();
|
|
|
|
foreach ( $weights as $key => $value ) {
|
|
$new_variants[ $key ] = $all_variants[ $key ];
|
|
}
|
|
|
|
// remove the 'default' value.
|
|
unset( $new_variants[0] );
|
|
|
|
$wp_customize->add_setting(
|
|
$font_id . '_weights',
|
|
array(
|
|
'default' => array( '100', '200', '300', '400', '500', '600', '700', '800', '900', '100i', '200i', '300i', '400i', '500i', '600i', '700i', '800i', '900i' ),
|
|
'transport' => 'refresh',
|
|
)
|
|
);
|
|
|
|
$input_attrs = array();
|
|
|
|
if ( ! defined( 'OGF_PRO' ) ) {
|
|
$input_attrs = array(
|
|
'disabled' => false,
|
|
);
|
|
}
|
|
|
|
$wp_customize->add_control(
|
|
new OGF_Customize_Multiple_Checkbox_Control(
|
|
$wp_customize,
|
|
$font_id . '_weights',
|
|
array(
|
|
'label' => $name,
|
|
'section' => 'ogf_font_loading',
|
|
'choices' => $new_variants,
|
|
'input_attrs' => $input_attrs,
|
|
'type' => 'ogf-multiple-checkbox',
|
|
)
|
|
)
|
|
);
|
|
|
|
$subsets = array_merge( $subsets, $fonts->get_font_subsets( $font_id ) );
|
|
}
|
|
|
|
$wp_customize->add_setting(
|
|
'fpp_disable_subsets',
|
|
array(
|
|
'default' => array(),
|
|
'transport' => 'refresh',
|
|
)
|
|
);
|
|
|
|
if ( defined( 'OGF_PRO' ) ) {
|
|
$wp_customize->add_control(
|
|
new OGF_Customize_Multiple_Checkbox_Control(
|
|
$wp_customize,
|
|
'fpp_disable_subsets',
|
|
array(
|
|
'label' => 'Remove Subsets',
|
|
'section' => 'ogf_font_subsets',
|
|
'choices' => array_unique( $subsets ),
|
|
'type' => 'ogf-multiple-checkbox',
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
$upsell_locations = array(
|
|
'ogf_basic',
|
|
'ogf_advanced',
|
|
'ogf_advanced__branding',
|
|
'ogf_advanced__navigation',
|
|
'ogf_advanced__content',
|
|
'ogf_advanced__sidebar',
|
|
'ogf_advanced__footer',
|
|
'ogf_font_loading',
|
|
'ogf_debugging',
|
|
'ogf_optimization',
|
|
);
|
|
|
|
foreach ( $upsell_locations as $loc ) {
|
|
if ( defined( 'OGF_PRO' ) ) {
|
|
return;
|
|
}
|
|
|
|
$wp_customize->add_setting( 'ogf_upsell_' . $loc );
|
|
|
|
$wp_customize->add_control(
|
|
new OGF_Customize_Upsell_Control(
|
|
$wp_customize,
|
|
'ogf_upsell_' . $loc,
|
|
array(
|
|
'section' => $loc,
|
|
'priority' => 120,
|
|
'type' => 'ogf-upsell',
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
add_action( 'customize_register', 'ogf_customize_register', 20 );
|
|
|
|
/**
|
|
* Sanitize value from select field.
|
|
*
|
|
* @param string $input The selected input.
|
|
* @param object $setting The setting.
|
|
* @return bool
|
|
*/
|
|
function ogf_sanitize_select( $input, $setting ) {
|
|
// Ensure input is a slug.
|
|
$input = sanitize_key( $input );
|
|
|
|
// Get list of choices from the control associated with the setting.
|
|
$choices = $setting->manager->get_control( $setting->id )->choices;
|
|
|
|
// If the input is a valid key, return it; otherwise, return the default.
|
|
return ( array_key_exists( $input, $choices ) ? $input : $setting->default );
|
|
}
|