/**
* Bloglex functions and definitions
*
* @link https://developer.wordpress.org/themes/basics/theme-functions/
*
* @package BlogLex
*/
if (!defined('BLOGLEX_VERSION')) {
// Replace the version number of the theme on each release.
define('BLOGLEX_VERSION', '1.0.0');
}
/**
* 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 bloglex_setup()
{
/*
* Make theme available for translation.
* Translations can be filed in the /languages/ directory.
* If you're building a theme based on Bloglex, use a find and replace
* to change 'bloglex' to the name of your theme in all the template files.
*/
load_theme_textdomain('bloglex', get_template_directory() . '/languages');
// 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');
/**
* Register navigation menus uses wp_nav_menu in five places.
*
* @since Bloglex Bloglex 1.0.0
*/
function bloglex_menus()
{
$locations = array(
'primary' => __('Desktop Horizontal Menu', 'bloglex'),
'expanded' => __('Desktop Expanded Menu', 'bloglex'),
'mobile' => __('Mobile Menu', 'bloglex'),
'footer' => __('Footer Menu', 'bloglex'),
'social' => __('Social Menu', 'bloglex'),
);
register_nav_menus($locations);
}
add_action('init', 'bloglex_menus');
/*
* 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',
)
);
// Set up the WordPress core custom background feature.
add_theme_support(
'custom-background',
apply_filters(
'bloglex_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,
)
);
add_theme_support('align-wide');
add_theme_support('responsive-embeds');
add_theme_support('wp-block-styles');
}
add_action('after_setup_theme', 'bloglex_setup');
/**
* 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 bloglex_content_width()
{
$GLOBALS['content_width'] = apply_filters('bloglex_content_width', 640);
}
add_action('after_setup_theme', 'bloglex_content_width', 0);
/**
* Enqueue scripts and styles.
*/
function bloglex_scripts()
{
$min = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
$fonts_url = bloglex_load_fonts_url();
if ($fonts_url) {
require_once get_theme_file_path('assets/webfont/class-theme-webfont-loader.php');
wp_enqueue_style(
'bloglex-load-google-fonts',
wptt_get_webfont_url($fonts_url),
array(),
BLOGLEX_VERSION
);
}
wp_enqueue_style('swiper', get_template_directory_uri() . '/assets/css/swiper-bundle' . $min . '.css');
wp_enqueue_style('bloglex-style', get_stylesheet_uri(), array(), BLOGLEX_VERSION);
wp_style_add_data('bloglex-style', 'rtl', 'replace');
wp_add_inline_style('bloglex-style', bloglex_get_inline_css());
wp_enqueue_script('bloglex-navigation', get_template_directory_uri() . '/assets/js/navigation' . $min . '.js', array(), BLOGLEX_VERSION, true);
// Scripts
$dependencies = array('swiper');
wp_enqueue_script('swiper', get_template_directory_uri() . '/assets/js/swiper-bundle' . $min . '.js', array(), BLOGLEX_VERSION, true);
wp_enqueue_script('bloglex-script', get_template_directory_uri() . '/assets/js/script' . $min . '.js', $dependencies, BLOGLEX_VERSION, true);
//Ajax Load Posts Scripts
wp_enqueue_script('bloglex-load-posts', get_template_directory_uri() . '/template-parts/pagination/pagination.js', array(), BLOGLEX_VERSION, true);
// Localized variables.
global $wp_query;
wp_localize_script(
'bloglex-load-posts',
'BloglexVars',
array(
'load_post_nonce_wp' => wp_create_nonce('bloglex-load-posts-nonce'),
'ajaxurl' => admin_url('admin-ajax.php'),
'query_vars' => wp_json_encode($wp_query->query_vars),
)
);
if (is_singular() && (comments_open() || '0' != get_comments_number())) {
wp_enqueue_style('bloglex-comments', get_template_directory_uri() . '/assets/css/comments' . $min . '.css', array(), BLOGLEX_VERSION);
}
if (is_singular() && comments_open() && get_option('thread_comments')) {
wp_enqueue_script('comment-reply');
}
}
add_action('wp_enqueue_scripts', 'bloglex_scripts');
/**
* Implement the Custom Header feature.
*/
require get_template_directory() . '/inc/custom-header.php';
/**
* Implement the Dynamic Style.
*/
require get_template_directory() . '/inc/dynamic-style.php';
require get_template_directory() . '/template-parts/pagination/pagination-option.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/admin/customizer/customizer-init.php';
// Custom page walker.
require get_template_directory() . '/classes/class-walker-page.php';
// Handle SVG icons.
require get_template_directory() . '/classes/class-svg-icons.php';
require get_template_directory() . '/inc/svg-icons.php';
//widget-initialization.
require get_template_directory() . '/inc/admin/widgets/widget-init.php';
// category-meta-box
require get_template_directory() . '/inc/admin/meta-box/category-meta-box.php';
// single-meta-box
require get_template_directory() . '/inc/admin/meta-box/meta-box.php';
/**
* Calling in the admin area for the Welcome Page as well as for the new theme notice too.
*/
if (is_admin()) {
require get_template_directory() . '/inc/admin/dashboard/class-admin.php';
require get_template_directory() . '/inc/admin/dashboard/class-dashboard.php';
require get_template_directory() . '/inc/admin/dashboard/class-welcome-notice.php';
require get_template_directory() . '/inc/admin/dashboard/class-theme-review-notice.php';
}
require get_template_directory() . '/inc/admin/dashboard/class-changelog-parser.php';
/**
* Enqueue scripts and styles.
*/
function bloglex_preloader_scripts()
{
$preloader_style = bloglex_get_option('bloglex_preloader_style');
wp_enqueue_style('bloglex-preloader', get_template_directory_uri() . '/assets/css/preloader-' . $preloader_style . '.css');
}
add_action('wp_enqueue_scripts', 'bloglex_preloader_scripts');
if (!class_exists('Bloglex_Constants')) {
/**
* Bloglex_Constants class.
*/
class Bloglex_Constants
{
/**
* The single instance of the class.
*
* @var Bloglex_Constants
*/
private static $instance = null;
/**
* Constants array.
*
* @var array
*/
private $constants = array();
/**
* Constructor.
*/
private function __construct()
{
// Define constants here.
$this->constants = array(
/**
* Define URL Location Constants
*/
'BLOGLEX_PARENT_URL' => get_template_directory_uri(),
);
foreach ($this->constants as $name => $value) {
$this->define_constant($name, $value);
}
}
/**
* Gets the single instance of the class.
*
* @return Bloglex_Constants
*/
public static function get_instance()
{
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Define constant safely.
*
* @param string $name Constant name.
* @param mixed $value Constant value.
*
* @return void
*/
private function define_constant($name, $value)
{
if (!defined($name)) {
define($name, $value);
}
}
}
}
// Initialize the class instance.
Bloglex_Constants::get_instance();
add_action('wp_ajax_install_plugin', 'bloglex_plugin_action_callback');
add_action('wp_ajax_activate_plugin', 'bloglex_plugin_action_callback');
function bloglex_plugin_action_callback()
{
if (!isset($_POST['security']) || !wp_verify_nonce($_POST['security'], 'bloglex_demo_import_nonce')) {
wp_send_json_error(array('message' => 'Security check failed.'));
}
if (!current_user_can('install_plugins')) {
wp_send_json_error(array('message' => 'You are not allowed to perform this action.'));
}
$plugin = sanitize_text_field($_POST['plugin']);
$plugin_slug = sanitize_text_field($_POST['slug']);
if (bloglex_is_plugin_installed($plugin)) {
if (is_plugin_active($plugin)) {
wp_send_json_success(array('message' => 'Plugin is already activated.'));
} else {
// Activate the plugin
$result = activate_plugin($plugin);
if (is_wp_error($result)) {
wp_send_json_error(array('message' => 'Error activating the plugin.'));
} else {
wp_send_json_success(array('message' => 'Plugin activated successfully!'));
}
}
} else {
// Install and activate the plugin
include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
$plugin_info = plugins_api('plugin_information', array('slug' => $plugin_slug));
$upgrader = new Plugin_Upgrader(new WP_Ajax_Upgrader_Skin());
$result = $upgrader->install($plugin_info->download_link);
if (is_wp_error($result)) {
wp_send_json_error(array('message' => 'Error installing the plugin.'));
}
$result = activate_plugin($plugin);
if (is_wp_error($result)) {
wp_send_json_error(array('message' => 'Error activating the plugin.'));
} else {
wp_send_json_success(array('message' => 'Plugin installed and activated successfully!'));
}
}
}
function bloglex_is_plugin_installed($plugin_path)
{
$plugins = get_plugins();
return isset($plugins[$plugin_path]);
}
/**
* Load Jetpack compatibility file.
*/
if (defined('JETPACK__VERSION')) {
require get_template_directory() . '/inc/compatibility/jetpack/jetpack.php';
}
/** Add the WooCommerce plugin support */
if (class_exists('WooCommerce')) {
require get_template_directory() . '/inc/compatibility/woocommerce/woocommerce.php';
}
/** Add the Elementor compatibility file */
if (defined('ELEMENTOR_VERSION')) {
require get_template_directory() . '/inc/compatibility/elementor/elementor.php';
require get_template_directory() . '/inc/compatibility/elementor/elementor-functions.php';
}