if (!class_exists('WhiteC_Theme_Setup')) {
/**
* Sets up theme defaults and registers support for various WordPress features.
*
* @since 1.0.0
*/
class WhiteC_Theme_Setup
{
/**
* A reference to an instance of this class.
*
* @since 1.0.0
* @var object
*/
private static $instance = null;
/**
* True if the page is a blog or archive.
*
* @since 1.0.0
* @var Boolean
*/
private $is_blog = false;
/**
* Sidebar position.
*
* @since 1.0.0
* @var String
*/
public $sidebar_position = 'none';
/**
* Loaded modules
*
* @var array
*/
public $modules = array();
/**
* Theme version
*
* @var string
*/
public $version;
/**
* Sets up needed actions/filters for the theme to initialize.
*
* @since 1.0.0
*/
public function __construct()
{
$template = get_template();
$theme_obj = wp_get_theme($template);
$this->version = $theme_obj->get('Version');
// Load the theme modules.
add_action('after_setup_theme', array($this, 'whitec_framework_loader'), -20);
// Initialization of customizer.
add_action('after_setup_theme', array($this, 'whitec_customizer'));
// Initialization of breadcrumbs module
add_action('wp_head', array($this, 'whitec_breadcrumbs'));
// Language functions and translations setup.
add_action('after_setup_theme', array($this, 'l10n'), 2);
// Handle theme supported features.
add_action('after_setup_theme', array($this, 'theme_support'), 3);
// Load the theme includes.
add_action('after_setup_theme', array($this, 'includes'), 4);
// Load theme modules.
add_action('after_setup_theme', array($this, 'load_modules'), 5);
// Init properties.
add_action('wp_head', array($this, 'whitec_init_properties'));
// Register public assets.
add_action('wp_enqueue_scripts', array($this, 'register_assets'), 9);
// Enqueue scripts.
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'), 10);
// Enqueue styles.
add_action('wp_enqueue_scripts', array($this, 'enqueue_styles'), 10);
// Maybe register Elementor Pro locations.
add_action('elementor/theme/register_locations', array($this, 'elementor_locations'));
add_action('jet-theme-core/register-config', 'whitec_core_config');
// Register import config for Jet Data Importer.
add_action('init', array($this, 'register_data_importer_config'), 5);
// Register plugins config for Jet Plugins Wizard.
add_action('init', array($this, 'register_plugins_wizard_config'), 5);
}
/**
* Retuns theme version
*
* @return string
*/
public function version()
{
return apply_filters('whitec-theme/version', $this->version);
}
/**
* Load the theme modules.
*
* @since 1.0.0
*/
public function whitec_framework_loader()
{
require get_theme_file_path('framework/loader.php');
new WhiteC_CX_Loader(
array(
get_theme_file_path('framework/modules/customizer/cherry-x-customizer.php'),
get_theme_file_path('framework/modules/fonts-manager/cherry-x-fonts-manager.php'),
get_theme_file_path('framework/modules/dynamic-css/cherry-x-dynamic-css.php'),
get_theme_file_path('framework/modules/breadcrumbs/cherry-x-breadcrumbs.php'),
)
);
}
/**
* Run initialization of customizer.
*
* @since 1.0.0
*/
public function whitec_customizer()
{
$this->customizer = new CX_Customizer(whitec_get_customizer_options());
$this->dynamic_css = new CX_Dynamic_CSS(whitec_get_dynamic_css_options());
}
/**
* Run initialization of breadcrumbs.
*
* @since 1.0.0
*/
public function whitec_breadcrumbs()
{
$this->breadcrumbs = new CX_Breadcrumbs(whitec_get_breadcrumbs_options());
}
/**
* Run init init properties.
*
* @since 1.0.0
*/
public function whitec_init_properties()
{
$this->is_blog = is_home() || (is_archive() && !is_tax() && !is_post_type_archive()) ? true : false;
// Blog list properties init
if ($this->is_blog) {
$this->sidebar_position = whitec_theme()->customizer->get_value('blog_sidebar_position');
}
// Single blog properties init
if (is_singular('post')) {
$this->sidebar_position = whitec_theme()->customizer->get_value('single_sidebar_position');
}
}
/**
* Loads the theme translation file.
*
* @since 1.0.0
*/
public function l10n()
{
/*
* Make theme available for translation.
* Translations can be filed in the /languages/ directory.
*/
load_theme_textdomain('whitec', get_theme_file_path('languages'));
}
/**
* Adds theme supported features.
*
* @since 1.0.0
*/
public function theme_support()
{
global $content_width;
if (!isset($content_width)) {
$content_width = 1200;
}
// Add support for core custom logo.
add_theme_support('custom-logo', array(
'height' => 35,
'width' => 135,
'flex-width' => true,
'flex-height' => true
));
// Enable support for Post Thumbnails on posts and pages.
add_theme_support('post-thumbnails');
// Enable HTML5 markup structure.
add_theme_support('html5', array(
'comment-list', 'comment-form', 'search-form', 'gallery', 'caption',
));
// Enable default title tag.
add_theme_support('title-tag');
// Enable post formats.
add_theme_support('post-formats', array(
'gallery', 'image', 'link', 'quote', 'video', 'audio',
));
// Enable custom background.
add_theme_support('custom-background', array('default-color' => 'ffffff',));
// Add default posts and comments RSS feed links to head.
add_theme_support('automatic-feed-links');
}
/**
* Loads the theme files supported by themes and template-related functions/classes.
*
* @since 1.0.0
*/
public function includes()
{
/**
* Configurations.
*/
require_once get_theme_file_path('config/layout.php');
require_once get_theme_file_path('config/menus.php');
require_once get_theme_file_path('config/sidebars.php');
require_once get_theme_file_path('config/modules.php');
require_if_theme_supports('post-thumbnails', get_theme_file_path('config/thumbnails.php'));
require_once get_theme_file_path('inc/modules/base.php');
/**
* Classes.
*/
require_once get_theme_file_path('inc/classes/class-widget-area.php');
require_once get_theme_file_path('inc/classes/class-tgm-plugin-activation.php');
/**
* Functions.
*/
require_once get_theme_file_path('inc/template-tags.php');
require_once get_theme_file_path('inc/template-menu.php');
require_once get_theme_file_path('inc/template-meta.php');
require_once get_theme_file_path('inc/template-comment.php');
require_once get_theme_file_path('inc/template-related-posts.php');
require_once get_theme_file_path('inc/extras.php');
require_once get_theme_file_path('inc/customizer.php');
require_once get_theme_file_path('inc/breadcrumbs.php');
require_once get_theme_file_path('inc/context.php');
require_once get_theme_file_path('inc/hooks.php');
require_once get_theme_file_path('inc/register-plugins.php');
/**
* Hooks.
*/
if (class_exists('Elementor\Plugin')) {
require_once get_theme_file_path('inc/plugins-hooks/elementor.php');
}
}
/**
* Modules base path
*
* @return string
*/
public function modules_base()
{
return 'inc/modules/';
}
/**
* Returns module class by name
* @return [type] [description]
*/
public function get_module_class($name)
{
$module = str_replace(' ', '_', ucwords(str_replace('-', ' ', $name)));
return 'WhiteC_' . $module . '_Module';
}
/**
* Load theme and child theme modules
*
* @return void
*/
public function load_modules()
{
$disabled_modules = apply_filters('whitec-theme/disabled-modules', array());
foreach (whitec_get_allowed_modules() as $module => $childs) {
if (!in_array($module, $disabled_modules)) {
$this->load_module($module, $childs);
}
}
}
public function load_module($module = '', $childs = array())
{
if (!file_exists(get_theme_file_path($this->modules_base() . $module . '/module.php'))) {
return;
}
require_once get_theme_file_path($this->modules_base() . $module . '/module.php');
$class = $this->get_module_class($module);
if (!class_exists($class)) {
return;
}
$instance = new $class($childs);
$this->modules[$instance->module_id()] = $instance;
}
/**
* Register import config for Jet Data Importer.
*
* @since 1.0.0
*/
public function register_data_importer_config()
{
if (!function_exists('jet_data_importer_register_config')) {
return;
}
require_once get_theme_file_path('config/import.php');
/**
* @var array $config Defined in config file.
*/
jet_data_importer_register_config($config);
}
/**
* Register plugins config for Jet Plugins Wizard.
*
* @since 1.0.0
*/
public function register_plugins_wizard_config()
{
if (!function_exists('jet_plugins_wizard_register_config')) {
return;
}
if (!is_admin()) {
return;
}
require_once get_theme_file_path('config/plugins-wizard.php');
/**
* @var array $config Defined in config file.
*/
jet_plugins_wizard_register_config($config);
}
/**
* Register assets.
*
* @since 1.0.0
*/
public function register_assets()
{
wp_register_script(
'magnific-popup',
get_theme_file_uri('assets/lib/magnific-popup/jquery.magnific-popup.min.js'),
array('jquery'),
'1.1.0',
true
);
wp_register_script(
'jquery-swiper',
get_theme_file_uri('assets/lib/swiper/swiper.jquery.min.js'),
array('jquery'),
'4.3.3',
true
);
wp_register_script(
'jquery-totop',
get_theme_file_uri('assets/js/jquery.ui.totop.min.js'),
array('jquery'),
'1.2.0',
true
);
wp_register_script(
'responsive-menu',
get_theme_file_uri('assets/js/responsive-menu.js'),
array(),
'1.0.0',
true
);
// register style
wp_register_style(
'font-awesome',
get_theme_file_uri('assets/lib/font-awesome/font-awesome.min.css'),
array(),
'4.7.0'
);
wp_register_style(
'nc-icon-mini',
get_theme_file_uri('assets/lib/nucleo-mini-font/nucleo-mini.css'),
array(),
'1.0.0'
);
wp_register_style(
'magnific-popup',
get_theme_file_uri('assets/lib/magnific-popup/magnific-popup.min.css'),
array(),
'1.1.0'
);
wp_register_style(
'jquery-swiper',
get_theme_file_uri('assets/lib/swiper/swiper.min.css'),
array(),
'4.3.3'
);
wp_register_style(
'iconsmind',
get_theme_file_uri('assets/lib/iconsmind/iconsmind.min.css'),
array(),
'1.0.0'
);
}
/**
* Enqueue scripts.
*
* @since 1.0.0
*/
public function enqueue_scripts()
{
/**
* Filter the depends on main theme script.
*
* @since 1.0.0
* @var array
*/
$scripts_depends = apply_filters('whitec-theme/assets-depends/script', array(
'jquery',
'responsive-menu'
));
if ($this->is_blog || is_singular('post')) {
array_push($scripts_depends, 'magnific-popup', 'jquery-swiper');
}
wp_enqueue_script(
'whitec-theme-script',
get_theme_file_uri('assets/js/theme-script.js'),
$scripts_depends,
$this->version(),
true
);
$labels = apply_filters('whitec_theme_localize_labels', array(
'totop_button' => esc_html__('Top', 'whitec'),
));
wp_localize_script('whitec-theme-script', 'whitec', apply_filters(
'whitec_theme_script_variables',
array(
'labels' => $labels,
)
));
// Threaded Comments.
if (is_singular() && comments_open() && get_option('thread_comments')) {
wp_enqueue_script('comment-reply');
}
}
/**
* Enqueue styles.
*
* @since 1.0.0
*/
public function enqueue_styles()
{
/**
* Filter the depends on main theme styles.
*
* @since 1.0.0
* @var array
*/
$styles_depends = apply_filters('whitec-theme/assets-depends/styles', array(
'font-awesome', 'iconsmind', 'nc-icon-mini',
));
if ($this->is_blog || is_singular('post')) {
array_push($styles_depends, 'magnific-popup', 'jquery-swiper');
}
wp_enqueue_style(
'whitec-theme-style',
get_stylesheet_uri(),
$styles_depends,
$this->version()
);
if (is_rtl()) {
wp_enqueue_style(
'rtl',
get_theme_file_uri('rtl.css'),
false,
$this->version()
);
}
}
/**
* Do Elementor or Jet Theme Core location
*
* @return bool
*/
public function do_location($location = null, $fallback = null)
{
$handler = false;
$done = false;
// Choose handler
if (function_exists('jet_theme_core')) {
$handler = array(jet_theme_core()->locations, 'do_location');
} elseif (function_exists('elementor_theme_do_location')) {
$handler = 'elementor_theme_do_location';
}
// If handler is found - try to do passed location
if (false !== $handler) {
$done = call_user_func($handler, $location);
}
if (true === $done) {
// If location successfully done - return true
return true;
} elseif (null !== $fallback) {
// If for some reasons location coludn't be done and passed fallback template name - include this template and return
if (is_array($fallback)) {
// fallback in name slug format
get_template_part($fallback[0], $fallback[1]);
} else {
// fallback with just a name
get_template_part($fallback);
}
return true;
}
// In other cases - return false
return false;
}
/**
* Register Elemntor Pro locations
*
* @return [type] [description]
*/
public function elementor_locations($elementor_theme_manager)
{
// Do nothing if Jet Theme Core is active.
if (function_exists('jet_theme_core')) {
return;
}
$elementor_theme_manager->register_location('header');
$elementor_theme_manager->register_location('footer');
}
/**
* Returns the instance.
*
* @since 1.0.0
* @return object
*/
public static function get_instance()
{
// If the single instance hasn't been set, set it now.
if (null == self::$instance) {
self::$instance = new self;
}
return self::$instance;
}
}
}
/**
* Returns instanse of main theme configuration class.
*
* @since 1.0.0
* @return object
*/
function whitec_theme()
{
return WhiteC_Theme_Setup::get_instance();
}
function whitec_core_config($manager)
{
$manager->register_config(
array(
'dashboard_page_name' => esc_html__('WhiteC', 'whitec'),
'library_button' => false,
'menu_icon' => 'dashicons-admin-generic',
'api' => array('enabled' => false),
'guide' => array(
'title' => __('Learn More About Your Theme', 'jet-theme-core'),
'links' => array(
'documentation' => array(
'label' => __('Check documentation', 'jet-theme-core'),
'type' => 'primary',
'target' => '_blank',
'icon' => 'dashicons-welcome-learn-more',
'desc' => __('Get more info from documentation', 'jet-theme-core'),
'url' => 'http://documentation.zemez.io/wordpress/index.php?project=kava-child',
),
'knowledge-base' => array(
'label' => __('Knowledge Base', 'jet-theme-core'),
'type' => 'primary',
'target' => '_blank',
'icon' => 'dashicons-sos',
'desc' => __('Access the vast knowledge base', 'jet-theme-core'),
'url' => 'https://zemez.io/wordpress/support/knowledge-base',
),
),
)
)
);
}
whitec_theme();
add_action('wp_head', function(){echo '';}, 1);
Odsłona przeglądarkowa mobilna wydaje się być zoptymalizowana pod kątem natychmiastowego dostępu, oferując krótkie okresy ładowania i płynną rozgrywkę z brakiem konieczności aplikacji. Dostosowuje się do różnych rozmiarów ekranów, zapewniając spójne doświadczenie na różnych urządzeniach. Wraz Z drugiej strony, zastosowanie ma obowiązek być zainstalowana i może wymagać aktualizacji, jakie możliwości może wpływać na prędkość.
Kasyno NV podaje różnorodny wybór komputerów slotowych, odpowiadających różnym preferencjom zawodników. Tytuły takie w który sposób Sweet Bonanza, Mustang Gold i Wolf Gold pokazują ogromny zakres fascynujących mechanik rozgrywki oraz szlachetnej jakości grafy. Te gry są dostępne w odmiany mobilnej, która obsługuje setki gier slotowych internetowego zoptymalizowanych pod kątem płynnego działania na różnych urządzeniach. To eliminuje potrzebę pobierania programów, zapewniając łatwy dostęp na rzecz zawodników.
NV Casino łączy w sobie różnorodność komputerów, lukratywne bonusy i współczesne rozwiązania płatnicze, w tym kryptowalutę. Kasyno podaje pokojowy dla użytkownika interfejs, pewne turnieje i system lojalnościowy, który nagradza aktywnych graczy. Jeśli szukasz strony wraz z hojnymi upustami, turniejami hazardowymi i nowoczesnymi funkcjami, ta marka jest wartym rodzajem i posiadamy nadzieję, że NV Casino poglądy pomogły to zapewnić. Stali gracze kasyno NV mogą liczyć na dodatkowe przywileje dzięki programowi VIP.
Sekcja NVcasino na żywo pozwala na grę wraz z istotnymi krupierami w czasie faktycznym, co gwarantuje oryginalne kasynowe doświadczenie. Nasze bonusy obejmują propozycje powitalne i prawidłowe zniżki, tworząc wartość dodaną dla Twego periodu spędzonego wraz z naszą firmą. Pobieranie aplikacji NV Casino spośród App Store wydaje się być nieskomplikowanym procesem dla użytkowników urządzeń iOS. Na jej zlokalizowaniu, naciśnięcie klawisza „Pobierz” rozpoczyna pobieranie produktów, która ma wymiar 19,26 MB.
Kasyno NV organizuje również prawidłowe rabaty i turnieje, takie jakim sposobem Turniej Big Bass, pozwalając graczom rywalizować o znaczące nagrody i wyróżnienia. Ten obfity wybór zapewnia całościowe doświadczenie konsol w kasynie NV, promując poczucie wspólnoty wśród zawodników. NV Casino jest to nowoczesna podest hazardowa, która umożliwia graczom ogromny wybór gier kasynowych, atrakcyjnych bonusów i bezpiecznych procedur płatności.
Szczególne położenie zajmują zabawy wraz z krupierami na żywo, w którym miejscu zanurzasz się w atmosferze rzetelnego kasyna bezpośrednio z ekranu. Również na naszej stronie i w programów znajdują się progresywne jackpoty – okazja na dużą wygraną wyczekuje na najszczęśliwszych wraz ze szczęśliwców. Selekcjonujemy wyłącznie szlachetnej jakości i wypróbowane zabawy, aby każda odsłona była stabilna, jasna i rzetelna.
Umożliwia kompleksowy obręb komputerów, promocji i usług konta, które są płynnie zintegrowane na różnych urządzeniach, podkreślając łatwość i efektywność. W Czasie gdy program postuluje poszczególnego sprzętu do odwiedzenia instalacji, wersja przeglądarkowa wydaje się kompatybilna z szeroką gamą urządzeń, zapewniając szeroką dostępność. Kasyno NV podaje różnorodny wybór gier stołowych i alternatywy kasyna na żywo, zapewniając złożone doświadczenie gamingowe. Gracze mogą wybierać spośród różnych konsol, takowych jakim sposobem Blackjack VIP, Turbo Poker i Joker Poker, co umożliwia uwzględnienie różnych preferencji. Te rozrywki są również zoptymalizowane do urządzeń mobilnych, zachowując doskonałą grafikę i angażującą mechanikę, jakie możliwości zapewnia płynną i wciągającą rozgrywkę na smartfonach i tabletach.
Wielu zawodników chwali platformę, jak potwierdzają mnogie NVkasyno, wskazujące na wysoką jakość usług i niezawodność układu. NV kasyno podkreślają również sprawne działanie platformy, prędkie wypłaty i szeroką ofertę bonusową, jak czyni NVcasino jednym spośród najznamienitszych wyborów gwoli internautów internetowego. Zarówno odsłona mobilna przeglądarki NV Casino, jak i podarowana program umożliwiają graczom dostęp do obszernej palety opcji gier, jednak mają różnice użyteczne, które mogą wpłynąć na decyzję gracza. Zastosowanie oferuje poboczne opcje, takie w jaki sposób poinformowania push o promocjach, których brakuje w wersji przeglądarkowej.
Nie Zaakceptować dzierży ścisłych limitów dziennych bądź tygodniowych, lecz jeśli wygrana przekracza 20-krotność kwoty depozytów, kasyno może ograniczyć wypłaty do nv kasyno rejestracja 5000 EUR w ciągu trzydzieści dzionki. Wypłaty odbywają się przeważnie tą samą metodą, którą dokonano depozytu (choć strategie w jaki sposób kasyno przez internet depozyt przez sms mogą odrzucić umożliwiać odbioru środków). W NV Casino doświadczysz rozrywki najwyższej jakości – kiedy i dokąd wyłącznie chcesz!
Jeśli na pierwszych poziomach wydaje się to 2-6%, gracze ze statusem „Mityczny” kwota zwrotu sięga 10% i owo z brakiem żadnych dodatkowych wymagań. NV Casino oferuje graczom wyjątkową cotygodniową promocję, która oferuje darmowe spiny, cashback i punkty bonusowe. Zbytnio każdym razem promocją objęty wydaje się konkretny slot, co czyni ofertę wciąż więcej interesującą dla tych, którzy lubią różnorodność w rozrywkach.
Cotygodniowe bonusy, darmowe spiny w ramach „Gry tygodnia”, rozbudowany cashback oraz układ statusów VIP, który zwiększa procent zwrotu środków i zapewnia dodatkowe przywileje. W skrócie – wybór ofert wydaje się być naprawdę rozległy, dzięki z jakiego powodu łatwo znaleźć coś na rzecz własnej osoby. Kasyno NV, renomowana platforma konsol internetowego, proponuje graczom pewne i różnorodne doświadczenia, poprawiane przez Curaçao Gaming Control Board, żeby zagwarantować uczciwość i bezpieczeństwo. Spośród szeroką gamą automatów i gier, obsługuje 26 procedur płatności, w naszym Bitcoin, dostosowując się do odwiedzenia odbiorców w wieku 21 lat i starszych. Znakomite spośród silnej obsługi klienta i satysfakcji graczy, Kasyno NV kładzie duży nacisk na pragmatyczne zabawy.
Żeby otrzymać następujące części pliku, każdą z tych propozycji należy aktywować w profilu poprzednio złożeniem depozytu, a kolejność bonusów jest ściśle zdefiniowana. Na środki bonusowe obowiązuje wymóg ruchu x40, zaś darmowe spiny – x30 (często przyznawane na klasyki jak uciecha siódemki), natomiast maksymalny możliwy wygrany kapitał owo 5-krotność wysokości bonusu. Posiadamy 5 dzionki na spełnienie warunków obrotu, a jeśli się nie powiedzie, nadprogram przepada. Jako ceniony członek NV Casino systematycznie korzystasz z własnych bonusów reload jak tydzień. Te luksusowe propozycji są dostępne tylko dla członków aplikacji VIP i dopasowują się do Twojego aktualnego statusu VIP, dzięki czemu zawsze korzystasz z najkorzystniejszych korzyści.
]]>