HEX
Server: Apache/2.4.37 (CentOS Stream) OpenSSL/1.1.1k
System: Linux ysnet.com.tw 4.18.0-553.5.1.el8.x86_64 #1 SMP Tue May 21 05:46:01 UTC 2024 x86_64
User: test (521)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /var/www/test/wp-content/themes/graceful-minimal/functions.php
<?php
/**
 * Graceful Minimal functions and definitions
 *
 * @link https://developer.wordpress.org/themes/basics/theme-functions/
 *
 * @package Graceful Minimal
 */

// ----------------------------------------------------------------------------------
//	Register Front-End Styles And Scripts
// ----------------------------------------------------------------------------------

function graceful_minimal_enqueue_child_styles() {
 
    wp_enqueue_style( 'graceful-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'graceful-minimal-style', get_stylesheet_directory_uri() . '/style.css', array( 'graceful-style' ), wp_get_theme()->get('Version') );
}
add_action( 'wp_enqueue_scripts', 'graceful_minimal_enqueue_child_styles' );


// ----------------------------------------------------------------------------------
//  Customize Register for Featured Boxes Section
// ----------------------------------------------------------------------------------
function graceful_minimal_customize_register( $wp_customize ) {    

    /** Featured Boxes */
    // Featured Boxes section
    $wp_customize->add_section( 'graceful_minimal_featured_boxes' , array(
        'title'      => esc_html__( 'Featured Boxes', 'graceful-minimal' ),
        'priority'   => 27,
        'capability' => 'edit_theme_options'
    ) );

    // Featured Boxes 1
    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_show]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_show' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'graceful_sanitize_checkboxes'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_show]', array(
        'label'     => esc_html__( 'Enable Featured Boxes', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'checkbox',
        'priority'  => 1
    ) );


    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_title_1]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_title_1' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'sanitize_text_field'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_title_1]', array(
        'label'     => esc_html__( 'Title 1', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'text',
        'priority'  => 9
    ) );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_url_1]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_url_1' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'esc_url_raw'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_url_1]', array(
        'label'     => esc_html__( 'URL 1', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'text',
        'priority'  => 11
    ) );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_image_1]', array(
        'default'   => '',
        'type'      => 'option',
        'transport' => 'refresh',
        'sanitize_callback' => 'graceful_sanitize_number_absint'
    ) );
    $wp_customize->add_control(
        new WP_Customize_Cropped_Image_Control( $wp_customize, 'graceful_minimal_options[featured_boxes_image_1]', array(
            'label'         => esc_html__( 'Image 1', 'graceful-minimal' ),
            'section'       => 'graceful_minimal_featured_boxes',
            'flex_width'    => false,
            'flex_height'   => false,
            'width'         => 600,
            'height'        => 340,
            'priority'      => 13
        )
    ) );

    // Featured Boxes Enable
    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_show]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_show' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'graceful_sanitize_checkboxes'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_show]', array(
        'label'     => esc_html__( 'Enable Featured Boxes', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'checkbox',
        'priority'  => 1
    ) );

    // Featured Boxes 1
    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_title_1]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_title_1' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'sanitize_text_field'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_title_1]', array(
        'label'     => esc_html__( 'Title 1', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'text',
        'priority'  => 9
    ) );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_url_1]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_url_1' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'esc_url_raw'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_url_1]', array(
        'label'     => esc_html__( 'URL 1', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'text',
        'priority'  => 11
    ) );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_image_1]', array(
        'default'   => '',
        'type'      => 'option',
        'transport' => 'refresh',
        'sanitize_callback' => 'graceful_sanitize_number_absint'
    ) );
    $wp_customize->add_control(
        new WP_Customize_Cropped_Image_Control( $wp_customize, 'graceful_minimal_options[featured_boxes_image_1]', array(
            'label'         => esc_html__( 'Image 1', 'graceful-minimal' ),
            'section'       => 'graceful_minimal_featured_boxes',
            'flex_width'    => false,
            'flex_height'   => false,
            'width'         => 600,
            'height'        => 340,
            'priority'      => 13
        )
    ) );

    // Featured Boxes 2
    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_title_2]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_title_2' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'sanitize_text_field'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_title_2]', array(
        'label'     => esc_html__( 'Title 2', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'text',
        'priority'  => 15
    ) );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_url_2]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_url_2' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'esc_url_raw'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_url_2]', array(
        'label'     => esc_html__( 'URL 2', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'text',
        'priority'  => 17
    ) );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_image_2]', array(
        'default'   => '',
        'type'      => 'option',
        'transport' => 'refresh',
        'sanitize_callback' => 'graceful_sanitize_number_absint'
    ) );
    $wp_customize->add_control(
        new WP_Customize_Cropped_Image_Control( $wp_customize, 'graceful_minimal_options[featured_boxes_image_2]', array(
            'label'         => esc_html__( 'Image 2', 'graceful-minimal' ),
            'section'       => 'graceful_minimal_featured_boxes',
            'flex_width'    => false,
            'flex_height'   => false,
            'width'         => 600,
            'height'        => 340,
            'priority'      => 19
        )
    ) );

    // Featured Boxes 3
    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_title_3]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_title_3' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'sanitize_text_field'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_title_3]', array(
        'label'     => esc_html__( 'Title 3', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'text',
        'priority'  => 21
    ) );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_url_3]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_url_3' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'esc_url_raw'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_url_3]', array(
        'label'     => esc_html__( 'URL 3', 'graceful-minimal' ),
        'section'   => 'graceful_minimal_featured_boxes',
        'type'      => 'text',
        'priority'  => 23
    ) );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_image_3]', array(
        'default'   => '',
        'type'      => 'option',
        'transport' => 'refresh',
        'sanitize_callback' => 'graceful_sanitize_number_absint'
    ) );
    $wp_customize->add_control(
        new WP_Customize_Cropped_Image_Control( $wp_customize, 'graceful_minimal_options[featured_boxes_image_3]', array(
            'label'         => esc_html__( 'Image 3', 'graceful-minimal' ),
            'section'       => 'graceful_minimal_featured_boxes',
            'flex_width'    => false,
            'flex_height'   => false,
            'width'         => 600,
            'height'        => 340,
            'priority'      => 25
        )
    ) );

    // Featured Boxes Layout Width
    $boxed_width_featured_boxes = array(
        'full' => esc_html__( 'Full', 'graceful-minimal' ),
        'wrapped' => esc_html__( 'Boxed', 'graceful-minimal' ),
    );

    $wp_customize->add_setting( 'graceful_minimal_options[featured_boxes_width]', array(
        'default'    => graceful_minimal_options( 'featured_boxes_width' ),
        'type'       => 'option',
        'transport'  => 'refresh',
        'capability' => 'edit_theme_options',
        'sanitize_callback' => 'graceful_sanitize_select'
    ) );
    $wp_customize->add_control( 'graceful_minimal_options[featured_boxes_width]', array(
        'label'         => esc_html__( 'Featured Boxes Width', 'graceful-minimal' ),
        'section'       => 'graceful_basic',
        'type'          => 'select',
        'choices'       => $boxed_width_featured_boxes,
        'priority'      => 28
    ) );

}
add_action( 'customize_register', 'graceful_minimal_customize_register', 99 );

// Sanitize number absint
function graceful_sanitize_number_absint( $number, $setting ) {

    // ensure $number is an absolute integer
    $number = absint( $number );

    // return default if not integer
    return ( $number ? $number : $setting->default );

}

// Enqueue customizer styles
function graceful_minimal_customizer_css() {
    wp_enqueue_style( 'graceful-customize-style', get_theme_file_uri( '/css/customize-ui.css' ) );
}
add_action( 'customize_controls_enqueue_scripts', 'graceful_minimal_customizer_css' );

// Graceful minimal default options
function graceful_minimal_options( $controls ) {

    $graceful_minimal_defaults = array(
        'blog_grid_excerpt_length' => '30',
        'featured_boxes_show' => false,
        'featured_boxes_window' => true,
        'featured_boxes_width' => 'wrapped',
        'featured_boxes_title_1' => '',
        'featured_boxes_url_1' => '',
        'featured_boxes_image_1' => '',
        'featured_boxes_title_2' => '',
        'featured_boxes_url_2' => '',
        'featured_boxes_image_2' => '',
        'featured_boxes_title_3' => '',
        'featured_boxes_url_3' => '',
        'featured_boxes_image_3' => '',
    );

    // merge defaults and options
    $graceful_minimal_defaults = wp_parse_args( get_option( 'graceful_minimal_options' ), $graceful_minimal_defaults );

    // return control
    return $graceful_minimal_defaults[ $controls ];

}

// ----------------------------------------------------------------------------------
//  New Thumbnail Size
// ----------------------------------------------------------------------------------
if ( function_exists( 'add_image_size' ) ) {
    // new column thumbnail size
    add_image_size( 'graceful-post-column-thumbnail', 700, 680, true );
}

// ----------------------------------------------------------------------------------
//  New Font
// ----------------------------------------------------------------------------------
function graceful_minimal_enqueue_assets()
{
    // Include the file.
    require_once get_theme_file_path('webfont-loader/wptt-webfont-loader.php');
    // Load the webfont.
    wp_enqueue_style(
        'minimalist-stories-fonts',
        wptt_get_webfont_url('https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=auto'),
        array(),
        '1.0'
    );
}
add_action('wp_enqueue_scripts', 'graceful_minimal_enqueue_assets');