get( 'Version' ) );
}
/**
* Sets up theme defaults and registers support for various WordPress features.
*
* Note that this function is hooked into the after_setup_theme hook, which
* runs before the init hook. The init hook is too late for some features, such
* as indicating support for post thumbnails.
*/
function accepta_setup() {
// Add default posts and comments RSS feed links to head.
add_theme_support( 'automatic-feed-links' );
/*
* Let WordPress manage the document title.
* By adding theme support, we declare that this theme does not use a
* hard-coded
tag in the document head, and expect WordPress to
* provide it for us.
*/
add_theme_support( 'title-tag' );
/*
* Enable support for Post Thumbnails on posts and pages.
*
* @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/
*/
add_theme_support( 'post-thumbnails' );
// This theme uses wp_nav_menu() in one location.
register_nav_menus(
array(
'menu-1' => esc_html__( 'Primary', 'accepta' ),
)
);
/*
* Switch default core markup for search form, comment form, and comments
* to output valid HTML5.
*/
add_theme_support(
'html5',
array(
'search-form',
'comment-form',
'comment-list',
'gallery',
'caption',
'style',
'script',
'navigation-widgets',
)
);
// Set up the WordPress core custom background feature.
add_theme_support(
'custom-background',
apply_filters(
'accepta_custom_background_args',
array(
'default-color' => 'ffffff',
'default-image' => '',
)
)
);
// Add theme support for selective refresh for widgets.
add_theme_support( 'customize-selective-refresh-widgets' );
/**
* Add support for core custom logo.
*
* @link https://codex.wordpress.org/Theme_Logo
*/
add_theme_support(
'custom-logo',
array(
'height' => 250,
'width' => 250,
'flex-width' => true,
'flex-height' => true,
)
);
/*
* Starter content: sample pages, menu, and widgets shown in the Customizer
* preview before the theme is activated. Only loaded in customize preview.
*/
if ( is_customize_preview() ) {
require_once get_template_directory() . '/inc/starter-content.php';
add_theme_support( 'starter-content', accepta_get_starter_content() );
}
}
add_action( 'after_setup_theme', 'accepta_setup' );
/**
* Load theme textdomain for translations.
*
* Translations can be filed in the /languages/ directory.
* If you're building a theme based on Accepta, use a find and replace
* to change 'accepta' to the name of your theme in all the template files.
*/
function accepta_load_textdomain() {
load_theme_textdomain( 'accepta', get_template_directory() . '/languages' );
}
add_action( 'init', 'accepta_load_textdomain' );
/**
* Set the content width in pixels, based on the theme's design and stylesheet.
*
* Priority 0 to make it available to lower priority callbacks.
*
* @global int $content_width
*/
function accepta_content_width() {
$GLOBALS['content_width'] = apply_filters( 'accepta_content_width', 1160 ); // 1200px - 40px padding
}
add_action( 'after_setup_theme', 'accepta_content_width', 0 );
/**
* Register widget area.
*
* @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar
*/
function accepta_widgets_init() {
register_sidebar(
array(
'name' => esc_html__( 'Sidebar', 'accepta' ),
'id' => 'sidebar-1',
'description' => esc_html__( 'Add widgets here.', 'accepta' ),
'before_widget' => '',
'before_title' => '',
)
);
// Register Footer Widget Areas
register_sidebar(
array(
'name' => esc_html__( 'Footer 1', 'accepta' ),
'id' => 'footer-1',
'description' => esc_html__( 'Add widgets here to appear in the first footer column.', 'accepta' ),
'before_widget' => '',
'before_title' => '',
)
);
register_sidebar(
array(
'name' => esc_html__( 'Footer 2', 'accepta' ),
'id' => 'footer-2',
'description' => esc_html__( 'Add widgets here to appear in the second footer column.', 'accepta' ),
'before_widget' => '',
'before_title' => '',
)
);
register_sidebar(
array(
'name' => esc_html__( 'Footer 3', 'accepta' ),
'id' => 'footer-3',
'description' => esc_html__( 'Add widgets here to appear in the third footer column.', 'accepta' ),
'before_widget' => '',
'before_title' => '',
)
);
register_sidebar(
array(
'name' => esc_html__( 'Footer 4', 'accepta' ),
'id' => 'footer-4',
'description' => esc_html__( 'Add widgets here to appear in the fourth footer column.', 'accepta' ),
'before_widget' => '',
'before_title' => '',
)
);
}
add_action( 'widgets_init', 'accepta_widgets_init' );
/**
* Enqueue scripts and styles.
*/
function accepta_scripts() {
wp_enqueue_style(
'accepta-style',
get_template_directory_uri() . '/assets/css/accepta.css',
array(),
_ACCEPTA_VERSION
);
wp_style_add_data( 'accepta-style', 'rtl', 'replace' );
wp_enqueue_style(
'font-awesome',
get_template_directory_uri() . '/assets/fonts/fontawesome/all.min.css',
array(),
'6.4.0'
);
if ( class_exists( 'WooCommerce' ) ) {
wp_enqueue_style(
'accepta-woocommerce-style',
get_template_directory_uri() . '/assets/css/woocommerce.css',
array( 'accepta-style', 'woocommerce-layout' ),
_ACCEPTA_VERSION
);
wp_style_add_data( 'accepta-woocommerce-style', 'rtl', 'replace' );
}
wp_enqueue_script(
'accepta-navigation',
get_template_directory_uri() . '/assets/js/navigation.js',
array(),
_ACCEPTA_VERSION,
true
);
wp_enqueue_script(
'accepta-mobile-menu',
get_template_directory_uri() . '/assets/js/mobile-menu.js',
array(),
_ACCEPTA_VERSION,
true
);
$sticky_header_enabled = get_theme_mod( 'accepta_sticky_header', true );
wp_enqueue_script(
'accepta-sticky-header',
get_template_directory_uri() . '/assets/js/sticky-header.js',
array(),
_ACCEPTA_VERSION,
true
);
$transparent_header = get_theme_mod( 'accepta_transparent_header', true );
$scrolled_bg = get_theme_mod( 'accepta_scrolled_header_bg', '#ffffff' );
$scrolled_bg_opacity = get_theme_mod( 'accepta_scrolled_header_bg_opacity', '1' );
$transparent_text_color = get_theme_mod( 'accepta_transparent_header_text_color', '#ffffff' );
$scrolled_text_color = get_theme_mod( 'accepta_scrolled_header_text_color', '#2c3e50' );
wp_localize_script(
'accepta-sticky-header',
'acceptaStickyHeader',
array(
'enabled' => $sticky_header_enabled,
'transparent' => $transparent_header,
'scrolledBg' => $scrolled_bg,
'scrolledBgOpacity' => floatval( $scrolled_bg_opacity ),
'transparentTextColor' => $transparent_text_color,
'scrolledTextColor' => $scrolled_text_color,
)
);
if ( is_front_page() || is_home() ) {
wp_enqueue_script(
'accepta-hero-section',
get_template_directory_uri() . '/assets/js/hero-section.js',
array(),
_ACCEPTA_VERSION,
true
);
}
if ( get_theme_mod( 'accepta_display_header_search', true ) ) {
wp_enqueue_script(
'accepta-header-search',
get_template_directory_uri() . '/assets/js/header-search.js',
array(),
_ACCEPTA_VERSION,
true
);
}
if ( class_exists( 'WooCommerce' ) && get_theme_mod( 'accepta_woo_display_header_cart', true ) ) {
wp_enqueue_script( 'wc-cart-fragments' );
wp_enqueue_script(
'accepta-woocommerce-cart-refresh',
get_template_directory_uri() . '/assets/js/woocommerce-cart-refresh.js',
array( 'jquery', 'wc-cart-fragments' ),
_ACCEPTA_VERSION,
true
);
wp_enqueue_script(
'accepta-minicart-offcanvas',
get_template_directory_uri() . '/assets/js/minicart-offcanvas.js',
array(),
_ACCEPTA_VERSION,
true
);
}
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
}
add_action( 'wp_enqueue_scripts', 'accepta_scripts' );
/**
* Get all Google Fonts used across typography settings
*/
function accepta_get_all_google_fonts() {
$google_fonts = array();
$google_fonts['Outfit'] = array(
'weights' => array( '300', '400', '500', '600', '700' ),
'used_in' => array( 'default' )
);
$typography_settings = array(
'body' => get_theme_mod( 'accepta_body_typography', '' ),
'all_headings' => get_theme_mod( 'accepta_all_headings_typography', '' ),
'post_title' => get_theme_mod( 'accepta_post_title_typography', '' ),
'h1' => get_theme_mod( 'accepta_h1_typography', '' ),
'h2' => get_theme_mod( 'accepta_h2_typography', '' ),
'h3' => get_theme_mod( 'accepta_h3_typography', '' ),
'h4' => get_theme_mod( 'accepta_h4_typography', '' ),
'h5' => get_theme_mod( 'accepta_h5_typography', '' ),
'h6' => get_theme_mod( 'accepta_h6_typography', '' ),
'button' => get_theme_mod( 'accepta_button_typography', '' ),
);
foreach ( $typography_settings as $type => $typography ) {
if ( ! empty( $typography ) ) {
$typography_data = json_decode( $typography, true );
if ( is_array( $typography_data ) && ! empty( $typography_data['font_family'] ) ) {
$font_family = $typography_data['font_family'];
$clean_font_name = explode( ',', $font_family )[0];
$clean_font_name = trim( str_replace( array( '"', "'" ), '', $clean_font_name ) );
if ( ! accepta_is_system_font( $clean_font_name ) ) {
if ( ! isset( $google_fonts[ $clean_font_name ] ) ) {
$google_fonts[ $clean_font_name ] = array(
'weights' => array( '300', '400', '500', '600', '700' ),
'used_in' => array()
);
}
$google_fonts[ $clean_font_name ]['used_in'][] = $type;
}
}
}
}
return $google_fonts;
}
/**
* Enqueue Google Fonts based on typography settings
*/
function accepta_enqueue_google_fonts() {
$google_fonts_data = accepta_get_all_google_fonts();
$google_fonts = array();
foreach ( $google_fonts_data as $font_name => $font_data ) {
$google_fonts[ $font_name ] = $font_data['weights'];
}
if ( ! empty( $google_fonts ) ) {
$font_families = array();
foreach ( $google_fonts as $font_family => $weights ) {
// Encode font family name for URL
$encoded_family = str_replace( ' ', '+', $font_family );
// Build font family with weights
$font_families[] = $encoded_family . ':wght@' . implode( ';', $weights );
}
if ( ! empty( $font_families ) ) {
$fonts_url = 'https://fonts.googleapis.com/css2?family=' . implode( '&family=', $font_families ) . '&display=swap';
// Enqueue the Google Fonts
wp_enqueue_style( 'accepta-google-fonts', $fonts_url, array(), null );
// Add debug comment to show combined fonts
add_action( 'wp_head', function() use ( $google_fonts_data, $fonts_url ) {
echo '' . "\n";
foreach ( $google_fonts_data as $font_name => $font_data ) {
echo '' . "\n";
}
echo '' . "\n";
}, 1 );
}
}
}
add_action( 'wp_enqueue_scripts', 'accepta_enqueue_google_fonts' );
/**
* Check if a font is a system font
*
* @param string $font_family Font family name
* @return bool
*/
function accepta_is_system_font( $font_family ) {
$system_fonts = array(
'Arial, sans-serif',
'Helvetica, Arial, sans-serif',
'"Times New Roman", Times, serif',
'Georgia, serif',
'"Courier New", Courier, monospace',
'Verdana, Geneva, sans-serif',
'Tahoma, Geneva, sans-serif',
'"Trebuchet MS", Helvetica, sans-serif',
'"Arial Black", Gadget, sans-serif',
'"Palatino Linotype", "Book Antiqua", Palatino, serif',
'"Lucida Sans Unicode", "Lucida Grande", sans-serif',
'"MS Serif", "New York", serif',
'"Comic Sans MS", cursive',
'Impact, Charcoal, sans-serif'
);
return in_array( $font_family, $system_fonts, true );
}
/**
* Get font variants from Google Fonts JSON
*
* @param string $font_family Font family name
* @return array
*/
function accepta_get_font_variants( $font_family ) {
$fonts_file = get_template_directory() . '/inc/customizer-controls/google-fonts.json';
if ( ! file_exists( $fonts_file ) ) {
return array( '400' );
}
$fonts_json = file_get_contents( $fonts_file );
$fonts_data = json_decode( $fonts_json, true );
if ( ! isset( $fonts_data['items'] ) || ! is_array( $fonts_data['items'] ) ) {
return array( '400' );
}
foreach ( $fonts_data['items'] as $font ) {
if ( isset( $font['family'] ) && $font['family'] === $font_family ) {
return isset( $font['variants'] ) ? $font['variants'] : array( '400' );
}
}
return array( '400' );
}
/**
* Filter for RTL replacements - point rtl styles to -rtl versions in assets/css
*/
add_filter( 'load_rtl_styles', function( $rtl_styles ) {
foreach ( $rtl_styles as $key => $rtl_style ) {
if ( strpos( $key, 'accepta-' ) === 0 ) {
// Replace standard .css with -rtl.css for our theme styles
$rtl_styles[$key] = str_replace( '.css', '-rtl.css', $rtl_style );
}
}
return $rtl_styles;
});
/**
* Load Accepta theme custom functions
*/
require get_template_directory() . '/inc/accepta-theme-functions.php';
/**
* Implement the Custom Header feature.
*/
require get_template_directory() . '/inc/custom-header.php';
/**
* Custom template tags for this theme.
*/
require get_template_directory() . '/inc/template-tags.php';
/**
* Functions which enhance the theme by hooking into WordPress.
*/
require get_template_directory() . '/inc/template-functions.php';
/**
* Customizer additions.
*/
require get_template_directory() . '/inc/customizer.php';
/**
* Elementor compatibility.
*/
require get_template_directory() . '/inc/elementor.php';
/**
* Load Jetpack compatibility file.
*/
if ( defined( 'JETPACK__VERSION' ) ) {
require get_template_directory() . '/inc/jetpack.php';
}
/**
* Load WooCommerce compatibility file.
*/
if ( class_exists( 'WooCommerce' ) ) {
require get_template_directory() . '/inc/woocommerce.php';
}
/**
* Load Admin pages and functionality
*/
if ( is_admin() ) {
require_once get_template_directory() . '/inc/admin/accepta-admin-init.php';
}