File: /home/thuexe247c/public_html/wp-content/themes/flatsome/inc/functions/function-setup.php
<?php
if ( ! isset( $content_width ) ) {
$content_width = 1020; // Pixels.
}
/**
* Initialized Envato and Flatsome Account implementation.
*/
flatsome_envato();
/**
* Only load styles for used blocks.
*/
add_filter( 'should_load_separate_core_block_assets', '__return_true' );
/**
* Use shortcodes for cart & checkout, since WC 8.3 cart & checkout are blocks by default upon first installation.
*
* @param array $pages Pages.
*
* @return array
*/
function flatsome_woocommerce_create_pages( $pages ) {
if ( ! fl_woocommerce_version_check( '8.3' ) ) {
return $pages;
}
if ( apply_filters( 'experimental_flatsome_woocommerce_blockify', false ) ) {
return $pages;
}
$pages['cart']['content'] = '<!-- wp:shortcode -->[woocommerce_cart]<!-- /wp:shortcode -->';
$pages['checkout']['content'] = '<!-- wp:shortcode -->[woocommerce_checkout]<!-- /wp:shortcode -->';
return $pages;
}
add_filter( 'woocommerce_create_pages', 'flatsome_woocommerce_create_pages' );
/**
* Remove the "CustomizeStore" task from each task list.
*
* @param array $task_lists An array of task lists.
*
* @return array The modified task lists.
*/
function experimental_flatsome_woocommerce_admin_onboarding_tasklists( $task_lists ) {
if ( isset( $task_lists ) && is_array( $task_lists ) ) {
foreach ( $task_lists as $task_list ) {
if ( isset( $task_list->tasks ) && is_array( $task_list->tasks ) ) {
foreach ( $task_list->tasks as $key => $task ) {
if ( is_object( $task ) && get_class( $task ) == 'Automattic\WooCommerce\Admin\Features\OnboardingTasks\Tasks\CustomizeStore' ) {
unset( $task_list->tasks[ $key ] );
}
}
}
}
}
return $task_lists;
}
add_filter( 'woocommerce_admin_experimental_onboarding_tasklists', 'experimental_flatsome_woocommerce_admin_onboarding_tasklists' );
/**
* Setup Flatsome.
*/
function flatsome_setup() {
/* add woocommerce support */
add_theme_support( 'woocommerce' );
if ( get_theme_mod( 'wpseo_breadcrumb' ) ) {
add_theme_support( 'yoast-seo-breadcrumbs' );
}
/* add title tag support */
add_theme_support( 'title-tag' );
/* Load child theme languages */
load_theme_textdomain( 'flatsome', get_stylesheet_directory() . '/languages' );
/* load theme languages */
load_theme_textdomain( 'flatsome', get_template_directory() . '/languages' );
/* Add default posts and comments RSS feed links to head */
add_theme_support( 'automatic-feed-links' );
/* Add excerpt to pages */
add_post_type_support( 'page', 'excerpt' );
/* Add support for post thumbnails */
add_theme_support( 'post-thumbnails' );
/* Add support for Selective Widget refresh */
add_theme_support( 'customize-selective-refresh-widgets' );
/** Add sensei support */
add_theme_support( 'sensei' );
/* Add support for HTML5 */
add_theme_support( 'html5', array(
'search-form',
'comment-form',
'comment-list',
'gallery',
'caption',
'widgets',
) );
/* Register menus. */
register_nav_menus( array(
'primary' => __( 'Main Menu', 'flatsome' ),
'primary_mobile' => __( 'Main Menu - Mobile', 'flatsome' ),
'secondary' => __( 'Secondary Menu', 'flatsome' ),
'footer' => __( 'Footer Menu', 'flatsome' ),
'top_bar_nav' => __( 'Top Bar Menu', 'flatsome' ),
'my_account' => __( 'My Account Menu', 'flatsome' ),
'vertical' => __( 'Vertical Menu', 'flatsome' ),
) );
/* Register post meta. */
register_post_meta( 'page', '_footer', array(
'show_in_rest' => current_user_can( 'edit_posts' ),
'single' => true,
'type' => 'string',
'default' => 'normal',
'auth_callback' => function () {
return current_user_can( 'edit_posts' );
},
) );
/* Enable support for Post Formats */
add_theme_support( 'post-formats', array( 'video' ) );
// Disable widgets-block-editor for now.
remove_theme_support( 'widgets-block-editor' );
}
add_action( 'after_setup_theme', 'flatsome_setup' );
/**
* Setup Theme Widgets
*/
function flatsome_widgets_init() {
$title_before = '';
$title_class = '';
$title_after = '<div class="is-divider small"></div>';
register_sidebar( array(
'name' => __( 'Sidebar', 'flatsome' ),
'id' => 'sidebar-main',
'before_widget' => '<aside id="%1$s" class="widget %2$s">',
'after_widget' => '</aside>',
'before_title' => $title_before . '<span class="widget-title ' . $title_class . '"><span>',
'after_title' => '</span></span>' . $title_after,
) );
register_sidebar( array(
'name' => __( 'Footer 1', 'flatsome' ),
'id' => 'sidebar-footer-1',
'before_widget' => '<div id="%1$s" class="col pb-0 widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<span class="widget-title">',
'after_title' => '</span><div class="is-divider small"></div>',
) );
register_sidebar( array(
'name' => __( 'Footer 2', 'flatsome' ),
'id' => 'sidebar-footer-2',
'before_widget' => '<div id="%1$s" class="col pb-0 widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<span class="widget-title">',
'after_title' => '</span><div class="is-divider small"></div>',
) );
}
add_action( 'widgets_init', 'flatsome_widgets_init' );
/**
* Setup Flatsome Styles and Scripts
*/
function flatsome_scripts() {
$uri = get_template_directory_uri();
$theme = wp_get_theme( get_template() );
$version = $theme->get( 'Version' );
// Styles.
wp_enqueue_style( 'flatsome-main', $uri . '/assets/css/flatsome.css', array(), $version, 'all' );
wp_style_add_data( 'flatsome-main', 'rtl', 'replace' );
if ( is_woocommerce_activated() ) {
wp_enqueue_style( 'flatsome-shop', $uri . '/assets/css/flatsome-shop.css', array(), $version, 'all' );
wp_style_add_data( 'flatsome-shop', 'rtl', 'replace' );
}
// Load current theme styles.css file.
if ( ! get_theme_mod( 'flatsome_disable_style_css', 0 ) ) {
wp_enqueue_style( 'flatsome-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ), 'all' );
}
// Register styles (Loaded on request).
wp_register_style( 'flatsome-effects', $uri . '/assets/css/effects.css', array(), $version, 'all' );
// Register scripts (Loaded on request).
wp_register_script( 'flatsome-masonry-js', $uri . '/assets/libs/packery.pkgd.min.js', array( 'jquery' ), $version, true );
wp_register_script( 'flatsome-isotope-js', $uri . '/assets/libs/isotope.pkgd.min.js', array( 'jquery', 'flatsome-js' ), $version, true );
// Google maps.
$maps_api = trim( get_theme_mod( 'google_map_api' ) );
if ( ! empty( $maps_api ) ) {
wp_register_script( 'flatsome-maps', "//maps.googleapis.com/maps/api/js?key=$maps_api&callback=jQuery.noop", array( 'jquery' ), $version, true );
}
// Enqueue theme scripts.
flatsome_enqueue_asset( 'flatsome-js', 'flatsome', array( 'jquery', 'hoverIntent' ) );
// Register theme assets.
flatsome_register_asset( 'flatsome-relay', 'flatsome-relay', array( 'flatsome-js', 'jquery' ) );
$sticky_height = get_theme_mod( 'header_height_sticky', 70 );
if ( is_admin_bar_showing() ) {
$sticky_height = $sticky_height + 30;
}
$lightbox_close_markup = apply_filters('flatsome_lightbox_close_button', '<button title="%title%" type="button" class="mfp-close"><svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button>');
$localize_data = array(
'theme' => array( 'version' => $version ),
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'rtl' => is_rtl(),
'sticky_height' => $sticky_height, // Deprecated.
'stickyHeaderHeight' => 0,
'scrollPaddingTop' => 0,
'assets_url' => $uri . '/assets/',
'lightbox' => array(
'close_markup' => $lightbox_close_markup,
'close_btn_inside' => apply_filters( 'flatsome_lightbox_close_btn_inside', false ),
),
'user' => array(
'can_edit_pages' => current_user_can( 'edit_pages' ),
),
'i18n' => array(
'mainMenu' => __( 'Main Menu', 'flatsome' ),
'toggleButton' => __( 'Toggle', 'flatsome' ),
),
'options' => array(
'cookie_notice_version' => get_theme_mod( 'cookie_notice_version', '1' ),
'swatches_layout' => get_theme_mod( 'swatches_layout' ),
'swatches_disable_deselect' => get_theme_mod( 'swatches_disable_deselect' ),
'swatches_box_select_event' => get_theme_mod( 'swatches_box_select_event' ),
'swatches_box_behavior_selected' => get_theme_mod( 'swatches_box_behavior_selected' ),
'swatches_box_update_urls' => get_theme_mod( 'swatches_box_update_urls', '1' ),
'swatches_box_reset' => get_theme_mod( 'swatches_box_reset' ),
'swatches_box_reset_limited' => get_theme_mod( 'swatches_box_reset_limited' ),
'swatches_box_reset_extent' => get_theme_mod( 'swatches_box_reset_extent' ),
'swatches_box_reset_time' => get_theme_mod( 'swatches_box_reset_time', 300 ),
'search_result_latency' => get_theme_mod( 'search_result_latency', '0' ),
),
);
if ( is_woocommerce_activated() ) {
$wc_localize_data = array(
'is_mini_cart_reveal' => flatsome_is_mini_cart_reveal(),
);
$localize_data = array_merge( $localize_data, $wc_localize_data );
}
// Add variables to scripts.
wp_localize_script( 'flatsome-js', 'flatsomeVars', $localize_data );
if ( apply_filters( 'experimental_flatsome_pjax_enabled', true ) ) {
$pjax = apply_filters( 'experimental_flatsome_pjax', array(
'cache_bust' => false,
'elements' => array( '#wrapper' ),
'entries' => array(),
'scroll_to' => get_theme_mod( 'pjax_scroll_to_top' ) ? 'top' : '',
'timeout' => 5000,
) );
if ( ! empty( $pjax['entries'] ) ) {
flatsome_enqueue_asset( 'flatsome-pjax', 'flatsome-pjax', array( 'flatsome-js', 'jquery' ) );
wp_add_inline_script( 'flatsome-pjax', 'var flatsomePjax = ' . wp_json_encode( $pjax ), 'before' );
}
}
if ( is_woocommerce_activated() ) {
flatsome_enqueue_asset( 'flatsome-theme-woocommerce-js', 'woocommerce', array( 'flatsome-js', 'woocommerce' ) );
}
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
}
add_action( 'wp_enqueue_scripts', 'flatsome_scripts', 100 );
/**
* Set up UX Builder.
*/
function flatsome_ux_builder_setup() {
// Add Ux Builder to post types.
add_ux_builder_post_type( 'blocks' );
add_ux_builder_post_type( 'product' );
add_ux_builder_post_type( 'featured_item' );
}
add_action( 'init', 'flatsome_ux_builder_setup', 10 );
/**
* Enqueue UX Builder scripts.
*
* @param string $context Context is «editor» or content.
*/
function flatsome_ux_builder_scripts( $context ) {
$uri = get_template_directory_uri();
$theme = wp_get_theme( get_template() );
$version = $theme->get( 'Version' );
// Add UxBuilder assets.
if ( $context == 'editor' ) {
flatsome_enqueue_asset( 'ux-builder-flatsome', 'builder/custom/editor', array( 'ux-builder-core' ) );
wp_enqueue_style( 'ux-builder-flatsome', $uri . '/assets/css/builder/custom/builder.css', array( 'ux-builder-core' ), $version );
}
if ( $context == 'content' ) {
wp_enqueue_style( 'ux-builder-flatsome', $uri . '/assets/css/builder/custom/builder.css', null, $version );
flatsome_enqueue_asset( 'ux-builder-flatsome', 'builder/custom/content', array(
'flatsome-js',
'flatsome-masonry-js',
) );
}
}
add_action( 'ux_builder_enqueue_scripts', 'flatsome_ux_builder_scripts', 10 );
/**
* Remove jQuery migrate.
*
* @param WP_Scripts $scripts WP_Scripts object.
*/
function flatsome_remove_jquery_migrate( $scripts ) {
if ( ! get_theme_mod( 'jquery_migrate' ) ) return;
if ( ! is_admin() && isset( $scripts->registered['jquery'] ) ) {
$script = $scripts->registered['jquery'];
if ( $script->deps ) { // Check whether the script has any dependencies.
$script->deps = array_diff( $script->deps, array(
'jquery-migrate',
) );
}
}
}
add_action( 'wp_default_scripts', 'flatsome_remove_jquery_migrate' );
// Disable emoji scripts
if ( ! is_admin() && get_theme_mod( 'disable_emoji', 0 ) ) {
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
}
function flatsome_deregister_block_styles() {
if ( ! is_admin() && get_theme_mod( 'disable_blockcss', 0 ) ) {
wp_dequeue_style( 'wp-block-library' );
}
}
add_action( 'wp_print_styles', 'flatsome_deregister_block_styles', 100 );
/**
* Prefetch lazy-loaded chunks.
*/
function flatsome_prefetch_scripts( $urls, $type ) {
static $manifest;
$manifest_path = get_template_directory() . '/assets/manifest.json';
$assets_url = get_template_directory_uri() . '/assets';
$theme = wp_get_theme( get_template() );
$version = $theme->get( 'Version' );
if ( empty( $manifest ) ) {
if ( ! file_exists( $manifest_path ) ) {
return $urls;
}
$manifest = wp_json_file_decode( $manifest_path, [ 'associative' => true ] );
}
$asset_handle_map = array(
'js/flatsome' => 'flatsome-js',
'js/woocommerce' => 'flatsome-theme-woocommerce-js',
);
foreach ( $manifest as $key => $asset ) {
if ( empty( $asset_handle_map[ $key ] ) ) continue;
$handle = $asset_handle_map[ $key ];
if ( wp_script_is( $handle, 'enqueued' ) ) {
if ( $type === 'prefetch' ) {
$script = wp_scripts()->registered[ $handle ];
$urls[] = add_query_arg( 'ver', $script->ver, $script->src );
}
if ( ! empty( $asset[ $type ]['js'] ) ) {
foreach ( $asset[ $type ]['js'] as $path ) {
$urls[] = $assets_url . "/$path?ver=" . $version;
}
}
}
}
return $urls;
}
add_filter( 'wp_resource_hints', 'flatsome_prefetch_scripts', 10, 2 );
/**
* Add JSON to allowed file types.
*
* @param array $mimes Allowed file types.
*/
function flatsome_upload_mimes( $mimes ) {
if ( ! isset( $mimes['json'] ) ) {
$mimes['json'] = 'text/plain';
}
return $mimes;
}
add_filter( 'upload_mimes', 'flatsome_upload_mimes' );
/**
* Configures Flatsome PJAX.
*
* If '$args['selectors'][]' or '$args['element'][]' array is empty, PJAX does not load & activate.
*
* @param array $args The original array of arguments provided by the 'flatsome_pjax' filter.
*
* @return array The modified array of arguments.
*/
function experimental_flatsome_pjax_config( $args ) {
if ( get_theme_mod( 'blog_pagination' ) === 'ajax' ) {
if ( flatsome_is_blog_archive() ) {
$args['entries'][] = [
'selectors' => [ '.page-numbers.nav-pagination:not(.ux-relay__pagination) li a' ],
'processing_elements' => [
'#post-list' => [
'style' => 'spotlight',
'position' => 'sticky',
],
],
];
}
if ( is_single() && get_post_type() === 'post' ) {
$args['entries'][] = [
'selectors' => [ '.navigation-post a' ],
'processing_elements' => [
'.blog-single .post' => [
'style' => 'spotlight',
'position' => 'sticky',
],
],
];
}
}
if ( is_woocommerce_activated() ) {
$is_shop_archive = flatsome_is_shop_archive();
$shop_ajax_pagination = get_theme_mod( 'shop_pagination' ) === 'ajax';
$processing_elements_shop = [
'.shop-container' => [
'style' => 'spotlight',
'position' => 'sticky',
],
];
if ( $shop_ajax_pagination && $is_shop_archive ) {
$args['entries'][] = [
'selectors' => [ '.woocommerce-pagination a' ],
'processing_elements' => $processing_elements_shop,
];
}
if ( $shop_ajax_pagination && is_product() ) {
$args['entries'][] = [
'selectors' => [ '#reviews .woocommerce-pagination a' ],
'elements' => [ '#reviews #comments' ],
'processing_elements' => [ '#comments .commentlist' => [ 'position' => 'sticky' ] ],
'scroll_to' => '#reviews #comments',
];
}
if ( get_theme_mod( 'shop_filter_widgets_pjax' ) && $is_shop_archive ) {
$args['entries'][] = [
'selectors' => [
'.widget_layered_nav li',
'.widget_rating_filter li',
'.widget_layered_nav_filters li',
'.widget_product_categories ul a',
],
'processing_elements' => $processing_elements_shop,
];
add_filter( 'body_class', function ( $classes ) {
$classes[] = 'ux-shop-ajax-filters';
return $classes;
} );
}
}
return $args;
}
add_filter( 'experimental_flatsome_pjax', 'experimental_flatsome_pjax_config' );