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);
Lembrando la cual este é o único método de pagamento admitido por plataforma neste momento. Apesar de uma ausência de 1 cassino ao vivo, a BETesporte sony ericsson destaca tais como alguma organizacion segura e de qualidade, sendo alguma ótima decisão pra qualquer forma de jogador. O internet site exibe primeiramente os eventos cependant conocidos do dia, o o qual torna a desea por games interessantes cependant capaz. Está interessado pela força das chances oferecidas pela BETesporte simply no mercado? Confira a tabela com algumas dasjenige cotações afin de eventos de futebol que acontecerão ao longo 2 próximos dias.
1 de illustres diferenciais de uma casa de apostas é permitir la cual sejam realizadas apostas ao palpitante em tua organizacion. As apostas ao palpitante dão o dinamismo ainda maior às apostas e é possível realizar apostas na BETesporte de maneira ao vivo. As retiradas são rápidas e con seguridad, garantindo o qual operating-system jogadores possam desfrutar de seus lucro sem problemas. O betesporte oferece uma série de promoções e bônus para compensar seus jogadores e incentivar a fidelidade.
Simply No site, você tem a possibilidade de analisar as estatísticas do jogo em tempo real, e limitar o melhor dia de entrar com a tua aposta. Na BETesporte, você tem an op??o de fazer a tua ex profeso aproveitando as probabilities em 1 nível sportivo, que está simply no nível das principais casas de apostas brasileiras. Nesse site, portanto, o teu recurso financeiro acaba valendo também – tendo em windows vista la cual operating system ganhos seguem a probabilidade real do suceso esportivo. Vale ressaltar la cual, ao contrário de uma grande parte dieses viviendas de apostas, o cassino weil BETesporte não tem alguma seção concesión pra o cassino ao vivo. Portanto, caso o jogador deseje uma opção que sony ericsson encaixaria nessa clase, ele precisa procurá-la simply no único catálogo disponível. Nossa trampolín de games de expresamente online proporciona opções la cual atendem todos os gostos, desde operating system jogos clássicos até as apostas em cependant emocionantes eventos esportivos.
O funcionamento é de um campi?a minado, zero que o apostador deve selecionar operating system locais sem clicar na bomba. As informações são apresentando base na nossa apuração e devem seguir apenas tais como guia. A decisão de se cadastrar e avaliar quais as prioridades ao selecionar uma odaie é subjetiva. Porém, veja a adoptar as características de destaque weil BETesporte apostas.
Desta Forma https://betesportex.com.br, nestes games você sony ericsson sente em Todas las Las vegas, contudo tem a possibilidade de produzir as apostas on-line em qualquer lugar e a qualquer hora. Para começar a apostar na betesporte o jogador tem a possibilidade de fazer o depósito de qualquer canon, começando apresentando R $1. Porém, vale a lembrança de o qual afin de ter a possibilidade de comunicar da promoção e receber o bônus de boas-vindas esse depósito deve servir de zero mínimo R$ twenty. O Betesporte Online Casino valoriza seus jogadores fiéis apresentando um libro VIP personal la cual oferece recompensas personalizadas e privilégios especiais.
Permitindo la cual você place decisões mais informadas antes de realizar suas apostas. Para utilizar o Cash away, assim que disponível, acesse o teu bilhete de ex profeso, e obtain por opção “Encerrar aposta”. Não se esqueça de repasar os termos e condições de cada promoção afin de maximizar tua experiência no Betesporte On Range Casino. Sim, a BETesporte é ótima, sendo alguma organizacion confiável e autorizada pelo Governo National, operando de acordo possuindo as normas estabelecidas através do Ministério weil Fazenda.
Tente a emoção de jackpots progressivos e sinta-se em 1 Cassino actual apresentando nosso Cassino ao Palpitante, tudo isso em o lugar en paz e confiável. Conforme o ministro, a squadra econômica vai banir determinadas formas de deposito pra as apostas on-line, tais como os cartões de crédito e, também, o cartão carry out Bolsa Família. O Ministério de uma Fazenda divulgou nesta terça-feira (1º) a referencia das empresas de apostas on the internet, renomadas como “bets”, que estão aptas a subsistir operando em território nacional. Somente pessoas principais de 20 anos podem ze registrar na BETesporte. É preciso também residir em o país o qual permita as apostas esportivas.
Para arriesgar em esporte na BETesporte é necesario conseguir cependant de 18 anos, alguma conta criada na operadora e balance em sua carteira online. Cumprindo com estes requisitos, basta acessar o site weil operadora, realizar seu sign in na BETesporte e escolher a modalidade esportiva de tua preferência para realizar seu palpite. Você pode contarse em contato apresentando o suporte ao cliente de uma empresa em problema de dúvidas ou qualquer caso. O mail possuindo tua mensagem tem a possibilidade de se tornar emisario para email protected, porém a resposta pode não ser imediata.
Na tua oferta de chances, portanto, a BETesporte ze mantém em 1 nível elevado, oferecendo as cotações em o patamar competitivo apresentando outras viviendas de apostas. Para possuir o spectacle completo 2 termos e condições carry out bônus, procure através da página de “Regras” weil BETesporte, e em seguida, navegue para a seção “Termos carry out bônus”. Comprobante dizer que o site também impõe requisitos de aposta afin de depósitos hechos search motor marketing o bônus. A BETesporte conta com um único bônus de boas-vindas, que tem a possibilidade de se tornar utilizado através de los dos operating-system novos usuários perform site. Ao fazer o teu 1º depósito, você ganha 200% perform canon investido, apresentando um théatre de R$ one.200,00. O valor bônus tem que servir utilizado na seção de Esportes, seguindo operating-system termos de uma promoção.
Desta Forma, acessando a trampolín pelo browser de teu aparelho é possível fazer seu cadastro, navegar por categorias de apostas; jogar em cassino systems realizar 1 palpite. Estas possibilidades são possíveis gra?as à visualização adaptável a telas menores do internet site móvel. Porém, vale a pena ficar de olho pra ter o noção de inova??es sobre o venidero app de uma BETesporte. Zero método ao festón carry out online casino da BETesporte é possível jogar títulos de roleta, black jack, baccarat, poker, dentre diversos. Apesar de operating-system jogos de cassino ao festón não estarem separados em alguma seção própria, não é difícil encontrá-los, já o qual a navegação no internet site é bem intuitiva.
Consideramos a aposta responsável o argomento sério e buscamos agir possuindo transparência possuindo o nosso leitor. Isto de forma uma afeta na análise feita através do nosso time de especialistas, que produz conteúdo de qualidade, justo e confiável sobre os operadores de apostas. Sim, a BetEsporte é confiável e conta com as características mais buscados dentre os apostadores brasileiros, mercados em eventos exclusivos e cash out there overall. Zero betbetesporte apresentando, operating-system jogadores têm a opção de sony ericsson tornarem agentes carry out game, o o qual lhes accede ganhar comissões ao indicar o cassino pra colegas e amig@s.
El setor também considera somente o speed regulamentar da partida. No Brasil, é possível realizar apostas zero Brasileirão dieses séries A, M e C, além de uma Copa carry out País e carry out mundo. A operadora ainda oferece a chance de apostas em campeonatos de países tais como Inglaterra, Itália, Espanha, Holanda, Spain, dentre diversos.
]]>