[Back] <?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
class Tmpcoder_Main_Class
{
/*
* Call All The Functions Using add_filter and add_action
*/
public function __construct()
{
/**
* 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.
*/
add_action( 'after_setup_theme', array($this,'tmpcoder_setup') );
add_action( 'after_setup_theme', array($this,'tmpcoder_content_width'), 0 );
/*
* Enqueue css and js files
*/
add_action( 'wp_enqueue_scripts', array($this,'tmpcoder_enqueue_styles_scripts') );
/* For Menu Section */
add_filter( 'walker_nav_menu_start_el', array($this,'tmpcoder_add_plus_icon_menu'),10,4);
add_filter('wp_nav_menu',array($this,'tmpcoder_add_class_in_submenu'));
// When activate theme follow wizard process - only admin access
if ( !isset($_GET['page']) || (isset($_GET['page']) && 'tmpcoder-plugin-wizard' != $_GET['page'] && 'tmpcoder-theme-wizard' != $_GET['page'] && 'tmpcoder-setup-wizard' != $_GET['page'] ) ){// phpcs:ignore WordPress.Security.NonceVerification.Recommended
add_action( 'tgmpa_register', array($this,'tmpcoder_require_plugins') );
}
add_filter( 'body_class', array($this, 'tmpcoder_import_demo_body_class') );
add_action( 'tmpcoder_wp_body_open', array($this,'tmpcoder_load_preloder') );
add_action( 'widgets_init', [$this, 'tmpcoder_register_sidebar'] );
add_action( 'customize_register', [$this, 'tmpcoder_customize_register'] );
add_action('wp_enqueue_scripts', [$this, 'tmpcoder_enqueue_custom_js']);
}
public function tmpcoder_enqueue_custom_js() {
wp_register_script('tmpcoder-custom-js-head', '', ['jquery'], null, false); // Load in head
wp_register_script('tmpcoder-custom-js-footer', '', ['jquery'], null, true); // Load in footer
wp_enqueue_script('tmpcoder-custom-js-head');
wp_enqueue_script('tmpcoder-custom-js-footer');
// Head JS injection
if (Tmpcoder_Site_Settings::tmpcoder_has('tmpcoder_custom_js_head')) {
$js_head = Tmpcoder_Site_Settings::tmpcoder_get('tmpcoder_custom_js_head');
if (!empty($js_head)) {
wp_add_inline_script('tmpcoder-custom-js-head', $js_head);
}
}
// Footer JS injection
if (Tmpcoder_Site_Settings::tmpcoder_has('tmpcoder_custom_js_footer')) {
$js_footer = Tmpcoder_Site_Settings::tmpcoder_get('tmpcoder_custom_js_footer');
if (!empty($js_footer)) {
wp_add_inline_script('tmpcoder-custom-js-footer', $js_footer);
}
}
}
function tmpcoder_customize_register( $wp_customize ) {
$wp_customize->add_section( 'tmpcoder_sidebar_settings', array(
'title' => __( 'Sidebar Settings', 'spexo' ),
'priority' => 30,
) );
$wp_customize->add_setting( 'tmpcoder_sidebar_position', array(
'default' => 'no',
'sanitize_callback' => 'sanitize_text_field',
) );
$wp_customize->add_control( 'tmpcoder_sidebar_position', array(
'label' => __( 'Single Blog Sidebar Position', 'spexo' ),
'section' => 'tmpcoder_sidebar_settings',
'settings' => 'tmpcoder_sidebar_position',
'type' => 'select',
'choices' => array(
'no' => __( 'No Sidebar', 'spexo' ),
'right' => __( 'Right Sidebar', 'spexo' ),
'left' => __( 'Left Sidebar', 'spexo' ),
),
) );
// Archive Page Sidebar Position (new)
$wp_customize->add_setting( 'tmpcoder_archive_sidebar_position', array(
'default' => 'no',
'sanitize_callback' => 'sanitize_text_field',
) );
$wp_customize->add_control( 'tmpcoder_archive_sidebar_position', array(
'label' => __( 'Archive Page Sidebar Position', 'spexo' ),
'section' => 'tmpcoder_sidebar_settings',
'settings' => 'tmpcoder_archive_sidebar_position',
'type' => 'select',
'choices' => array(
'no' => __( 'No Sidebar', 'spexo' ),
'right' => __( 'Right Sidebar', 'spexo' ),
'left' => __( 'Left Sidebar', 'spexo' ),
),
) );
// Search Page Sidebar Position (new)
$wp_customize->add_setting( 'tmpcoder_search_sidebar_position', array(
'default' => 'no',
'sanitize_callback' => 'sanitize_text_field',
) );
$wp_customize->add_control( 'tmpcoder_search_sidebar_position', array(
'label' => __( 'Search Page Sidebar Position', 'spexo' ),
'section' => 'tmpcoder_sidebar_settings',
'settings' => 'tmpcoder_search_sidebar_position',
'type' => 'select',
'choices' => array(
'no' => __( 'No Sidebar', 'spexo' ),
'right' => __( 'Right Sidebar', 'spexo' ),
'left' => __( 'Left Sidebar', 'spexo' ),
),
) );
}
function tmpcoder_register_sidebar() {
register_sidebar( array(
'name' => __( 'Main Sidebar', 'spexo' ),
'id' => 'main-sidebar',
'description' => __( 'Sidebar for blog detail pages.', 'spexo' ),
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
}
function tmpcoder_load_preloder(){
if ( Tmpcoder_Site_Settings::tmpcoder_has('tmpcoder_pre_loder') && Tmpcoder_Site_Settings::tmpcoder_get('tmpcoder_pre_loder') == 1) { ?>
<div id="preloader" class="parent-preloader">
<div class="preloader">
<?php
if (Tmpcoder_Site_Settings::tmpcoder_has('tmpcoder_preloder_custom_html'))
{
echo wp_kses_post(Tmpcoder_Site_Settings::tmpcoder_get('tmpcoder_preloder_custom_html'));
}
?>
</div>
</div>
<?php }
}
function tmpcoder_import_demo_body_class( $classes ) {
$import_demo_class = get_option('tmpcoder_current_active_demo', '');
return array_merge( $classes, array( $import_demo_class ) );
}
/**
* 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 tmpcoder_setup()
{
/*
* Make theme available for translation.
* Translations can be filed in the /languages/ directory.
* If you're building a theme based on Spexo, use a find and replace
* to change 'spexo' to the name of your theme in all the template files.
*/
load_theme_textdomain( 'spexo', get_template_directory() . '/languages' );
// Add default posts and comments RSS feed links to head.
add_theme_support( 'automatic-feed-links' );
add_theme_support( 'title-tag' );
add_theme_support( 'post-thumbnails' );
// Add support for starter content ( wp preview ).
if ( class_exists( 'Spexo_Starter_Content', false ) ) {
$tmpcoder_starter_content = new Spexo_Starter_Content();
add_theme_support( 'starter-content', $tmpcoder_starter_content->get() );
}
add_theme_support(
'html5',
array(
'search-form',
'comment-form',
'comment-list',
'gallery',
'caption',
'script',
'style',
)
);
add_theme_support( 'responsive-embeds' );
add_theme_support( 'align-wide' );
add_theme_support( 'wp-block-styles' );
add_theme_support( 'woocommerce' );
add_theme_support( 'wc-product-gallery-zoom' );
add_theme_support( 'wc-product-gallery-lightbox' );
add_theme_support( 'wc-product-gallery-slider' );
add_theme_support( 'custom-line-height' );
if ( is_admin() ) {
add_action('current_screen', function () {
$screen = get_current_screen();
$action = isset( $_GET['action'] ) ? sanitize_text_field( wp_unslash($_GET['action']) ) : '';
if (
( $screen && method_exists( $screen, 'is_block_editor' ) && $screen->is_block_editor() ) ||
( $screen && $screen->id === 'site-editor' )
) {
if ( ( !class_exists('Elementor\Plugin') || !Elementor\Plugin::instance()->editor->is_edit_mode() ) && $action !== 'elementor' ) {
add_theme_support( 'editor-styles' );
add_editor_style( get_template_directory_uri() . '/editor-style' . tmpcoder_min_suffix() . '.css?v=' . TMPCODER_THEME_CORE_VERSION );
add_editor_style( 'https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap' );
}
}
});
}
/* Add dynamic fonts to the block editor - START */
$tmpcoderThemeMods = get_theme_mods();
$site_fonts = isset($tmpcoderThemeMods['site_fonts_options_font-family']) ? json_decode($tmpcoderThemeMods['site_fonts_options_font-family'], true) : [];
$button_fonts = isset($tmpcoderThemeMods['button_style_font-family']) ? json_decode($tmpcoderThemeMods['button_style_font-family'], true) : [];
$heading_fonts = [];
for ($i = 1; $i <= 6; $i++) {
$heading_fonts[] = isset($tmpcoderThemeMods["heading_{$i}_font-family"]) ? json_decode($tmpcoderThemeMods["heading_{$i}_font-family"], true)['font'] : '';
}
$fonts = array_unique(array_merge([
isset($site_fonts['font']) ? $site_fonts['font'] : '',
isset($button_fonts['font']) ? $button_fonts['font'] : ''
], $heading_fonts));
// Filter out 'Poppins'
$fonts = array_filter($fonts, fn($font) => strtolower($font) !== 'poppins');
foreach ($fonts as $font) {
if ($font) {
$weights = "100,200,300,400,500,600,700,800,900";
$font_url = "https://fonts.googleapis.com/css?family=" . urlencode($font) . ":" . $weights . "&display=swap";
add_editor_style($font_url);
}
}
/* Add dynamic fonts to the block editor - END */
// This theme uses wp_nav_menu() in one location.
register_nav_menus(
array(
'primary' => esc_html__( 'Primary','spexo' ),
'footer_menu' => __( 'Footer Menu','spexo' ),
)
);
/*
* Switch default core markup for search form, comment form, and comments
* to output valid HTML5.
*/
// Set up the WordPress core custom background feature.
add_theme_support(
'custom-background',
apply_filters(
'tmpcoder_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,
)
);
}
/**
* 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 tmpcoder_content_width() {
$GLOBALS['content_width'] = apply_filters( 'tmpcoder_content_width', 640 );
}
/* Class Over */
/*
* Enqueue Scripts and styles
*/
function tmpcoder_enqueue_styles_scripts()
{
if ( is_rtl() ){
wp_enqueue_style( 'tmpcoder-style-rtl', get_template_directory_uri().'/assets/css/tmpcoder-style-rtl'.tmpcoder_min_suffix().'.css', array(), TMPCODER_THEME_CORE_VERSION );
}
if (!class_exists( 'ReduxFramework') ) {
wp_enqueue_style('tmpcoder-google-fonts', 'https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap');
}
wp_enqueue_style('tmpcoder-theme', get_template_directory_uri().'/assets/css/tmpcoder-theme'.tmpcoder_min_suffix().'.css', array(), TMPCODER_THEME_CORE_VERSION, false);
wp_enqueue_style( 'tmpcoder-style', get_template_directory_uri().'/assets/css/style'.tmpcoder_min_suffix().'.css', array(), TMPCODER_THEME_CORE_VERSION );
$tmpcoder_custom_css_option = get_option(TMPCODER_THEME_OPTION_NAME);
$tmpcoder_custom_css = isset($tmpcoder_custom_css_option['tmpcoder_custom_css']) ? $tmpcoder_custom_css_option['tmpcoder_custom_css'] : '';
$sanitized_custom_css = wp_strip_all_tags($tmpcoder_custom_css);
if (!empty($sanitized_custom_css)) {
wp_add_inline_style('tmpcoder-style', $sanitized_custom_css);
}
wp_enqueue_style('tmpcoder-wc-style', get_template_directory_uri() . '/assets/css/tmpcoder-wc-style'.tmpcoder_min_suffix().'.css', array(), TMPCODER_THEME_CORE_VERSION, false );
wp_enqueue_script('tmpcoder-theme-script-js', get_template_directory_uri().'/assets/js/tmpcoder-theme-script'.tmpcoder_min_suffix().'.js', array('jquery'), TMPCODER_THEME_CORE_VERSION,true);
wp_localize_script( 'tmpcoder-theme-script-js', 'tmpcoderAjaxObject', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
}
/* Add Required Or RECOMMENDED Plugins And Active */
function tmpcoder_require_plugins() {
$plugins = array(
array(
'name' => esc_html__( 'Elementor','spexo' ),
'slug' => 'elementor',
),
array(
'name' => esc_html__('Spexo Addons for Elementor','spexo'),
'slug' => 'sastra-essential-addons-for-elementor',
),
array(
'name' => esc_html__( 'Redux Framework','spexo' ),
'slug' => 'redux-framework',
),
);
$config = array(
'id' => 'tgmpa', // Unique ID for hashing notices for multiple instances of TGMPA.
'default_path' => '', // Default absolute path to bundled plugins.
'menu' => 'tgmpa-install-plugins', // Menu slug.
'has_notices' => true, // Show admin notices or not.
'dismissable' => true, // If false, a user cannot dismiss the nag message.
'dismiss_msg' => '', // If 'dismissable' is false, this message will be output at top of nag.
'is_automatic' => false, // Automatically activate plugins after installation or not.
'message' => '', // Message to output right before the plugins table.
);
tgmpa( $plugins, $config );
}
/*
*
* Add plus icon in menu for mobile view
*
*/
function tmpcoder_add_plus_icon_menu( $output, $item, $depth, $args ){
if (in_array("menu-item-has-children", $item->classes)) {
$output .='<span class="opener plus"></span>';
}
return $output;
}
/* Add or change class on Sub Menu */
function tmpcoder_add_class_in_submenu($menu) {
$menu = preg_replace('/class="sub-menu"/','class="transition"',$menu);
return $menu;
}
}
$obj = new Tmpcoder_Main_Class();
if ( ! class_exists( 'Tmpcoder_Site_Settings' ) ):
class Tmpcoder_Site_Settings {
static public function tmpcoder_is( $key, $compare ) {
$value = self::tmpcoder_get( $key );
return $value === $compare;
}
static public function tmpcoder_not( $key, $compare ) {
$value = self::tmpcoder_get( $key );
return $value !== $compare;
}
static public function tmpcoder_has( $key ) {
$value = self::tmpcoder_get( $key );
return ! empty( $value );
}
static public function tmpcoder_get( $key ) {
global $tmpcoder_global_theme_options_spexo;
if ( ! isset( $tmpcoder_global_theme_options_spexo ) ) {
return null;
}
return isset( $tmpcoder_global_theme_options_spexo[ $key ] ) ? $tmpcoder_global_theme_options_spexo[ $key ] : null;
}
static public function tmpcoder_get_all_data() {
global $tmpcoder_global_theme_options_spexo;
if ( ! isset( $tmpcoder_global_theme_options_spexo ) ) {
return null;
}
return $tmpcoder_global_theme_options_spexo;
}
}
endif;
function tmpcoder_get_blog_list()
{
$comments = get_comments_number();
?>
<div class="blog-list-box tmpcoder-blog-list">
<?php
if ( has_post_thumbnail() ):
?>
<div class="blog-list-img">
<a href="<?php echo esc_url( get_permalink() ) ?>"><?php the_post_thumbnail('full',array('class' => 'transition')) ?>
</a>
</div>
<?php
endif;
?>
<div class="blog-list-content">
<h3 class="entry-title"><a href="<?php echo esc_url( get_permalink() ) ?>" class="blog-list-title"><?php the_title(); ?></a></h3>
<ul class="blog-date blog-meta-options">
<?php
$comments = get_comments_number();
if ($comments) { ?>
<li class="post-meta-item"><?php tmpcoder_posted_comments() ?></li>
<?php } ?>
<li class="post-meta-item"><?php tmpcoder_posted_by() ?></li>
<li class="post-meta-item"><?php tmpcoder_posted_on() ?></li>
</ul>
<p class="blog-des"><?php echo esc_html(get_the_excerpt()); ?></p>
<a href="<?php echo esc_url( get_permalink() ) ?>" class="read-more"><?php esc_html_e('Read More','spexo') ?></a>
</div>
</div>
<?php
}
function tmpcoder_get_single_blog()
{
$sidebar_position = get_theme_mod( 'tmpcoder_sidebar_position', 'on' );
?>
<div class="page-content tmpcoder-blog-sidebar-<?php echo esc_attr( $sidebar_position ); ?>">
<?php if ( $sidebar_position === 'left' ) : ?>
<div class="tmpcoder-single-blog-sidebar-part">
<aside class="sidebar">
<?php dynamic_sidebar( 'main-sidebar' ); ?>
</aside>
</div>
<?php endif; ?>
<div class="tmpcoder-single-blog-content-part">
<div class="blog-detail-img">
<?php the_post_thumbnail('full') ?>
</div>
<div class="blog-detail-content">
<h1><?php the_title() ?></h1>
<ul class="blog-date blog-meta-options">
<?php
$comments = get_comments_number();
if ($comments) { ?>
<li class="post-meta-item"><?php tmpcoder_posted_comments() ?></li>
<?php } ?>
<li class="post-meta-item"><?php tmpcoder_posted_by() ?></li>
<li class="post-meta-item"><?php tmpcoder_posted_on() ?></li>
<?php
$categories = get_the_category();
if ( ! empty( $categories ) ) {
$output = '';
foreach ( $categories as $key => $category ) {
$output .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '">'
. esc_html( $category->name ) . '</a>';
if ( $key !== array_key_last( $categories ) ) {
$output .= ', ';
}
}
echo '<li>' . wp_kses_post($output) . '</li>';
}
?>
</ul>
<div class="blog-detail-description">
<?php the_content() ?>
</div>
<?php
$tags_list = tmpcoder_show_tags();
if ( $tags_list != "" ){ ?>
<div class="wp-post-tags">
<span class="wp-tag-label"><?php echo esc_html('Tags:'); ?></span>
<?php echo wp_kses_post($tags_list); ?>
</div>
<?php } ?>
<div class="post-authr-box">
<?php
$post_id = get_the_ID();
$author_id = get_post_field( 'post_author', $post_id );
$avatar = get_avatar( $author_id, 264 );
$name = get_the_author_meta( 'display_name', $author_id);
$title = '';
$biography = get_the_author_meta( 'description', $author_id );
$website = '';
echo '<div class="tmpcoder-author-box">';
// Avatar
if ( false !== $avatar ) {
echo '<div class="tmpcoder-author-box-image">';
if ( $website != '' ) {
echo '<a href="'. esc_url( $website ) .'">'. wp_kses_post($avatar) .'</a>';
} else {
echo wp_kses_post($avatar);
}
echo '</div>';
}
// Wrap All Text Blocks
echo '<div class="tmpcoder-author-box-text">';
// Author Name
if ( '' !== $name ) {
echo '<h3 class="tmpcoder-author-box-name">';
if ( $website != '' ) {
echo '<a href="'. esc_url( $website ) .'">'. esc_html($name) .'</a>';
} else {
echo esc_html($name);
}
echo '</h3>';
}
if ( '' !== $biography ) {
echo '<p class="tmpcoder-author-box-bio">'. wp_kses_post($biography) .'</p>';
}
echo '</div>'; // End .tmpcoder-author-box-text
echo '</div>';
?>
</div>
<?php
if ( comments_open() || get_comments_number() ) :
comments_template();
endif;
do_action('tmpcoder_blog_related_posts');
echo "</div>";
echo "</div>";
if ( $sidebar_position === 'right' ) : ?>
<div class="tmpcoder-single-blog-sidebar-part">
<aside class="sidebar">
<?php dynamic_sidebar( 'main-sidebar' ); ?>
</aside>
</div>
<?php endif;
echo '</div>';
}
/*
* Custom pagination
*/
function tmpcoder_posts_pagination() {
// Don't print empty markup if there's only one page.
if ( $GLOBALS['wp_query']->max_num_pages < 2 ) {
return;
}
$paged = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
$pagenum_link = get_pagenum_link();
$query_args = array();
$url_parts = explode( '?', $pagenum_link );
if ( isset( $url_parts[1] ) ) {
wp_parse_str( $url_parts[1], $query_args );
}
$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';
$format = $GLOBALS['wp_rewrite']->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
$format .= $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit( 'page/%#%', 'paged' ) : '?paged=%#%';
// Set up paginated links.
$links = paginate_links( array(
'base' => $pagenum_link,
'format' => $format,
'total' => $GLOBALS['wp_query']->max_num_pages,
'current' => $paged,
'aria_current' => 'page',
'mid_size' => 3,
'add_args' => array_map( 'urlencode', $query_args ),
'prev_text' => __( '<i class="fa fa-angle-left" aria-hidden="true"></i>','spexo' ),
'next_text' => __( '<i class="fa fa-angle-right" aria-hidden="true"></i>','spexo' ),
'type' => 'list',
));
if ( $links ) :
?>
<div class="blog-list-pagination" role="navigation">
<?php echo wp_kses_post(str_replace('<span aria-current="page" class="page-numbers current">'.esc_html($paged).'</span>','<a aria-current="page" class="page-numbers active">'.esc_html($paged).'</a>', $links )); ?>
</div>
<?php
endif;
}
/**
* Block Styles
*/
function tmpcoder_register_block_styles() {
if ( function_exists( 'register_block_style' ) ) {
register_block_style(
'core/image',
array(
'name' => 'bottom-right',
'label' => __( 'Bottom Right','spexo' ),
)
);
register_block_style(
'core/image',
array(
'name' => 'bottom-left',
'label' => __( 'Bottom Left','spexo' ),
)
);
register_block_style(
'core/image',
array(
'name' => 'center',
'label' => __( 'Center','spexo' ),
)
);
}
}
add_action( 'after_setup_theme', 'tmpcoder_register_block_styles' );
if ( !function_exists('tmpcoder_get_theme_logo') ){
function tmpcoder_get_theme_logo(){
if ( class_exists('Tmpcoder_Site_Settings') ){
$tmpcoder_logo_image = Tmpcoder_Site_Settings::tmpcoder_get('tmpcoder_logo_image');
$site_logo = ( Tmpcoder_Site_Settings::tmpcoder_has('tmpcoder_logo_image') ) ? $tmpcoder_logo_image['url'] : '';
return $site_logo;
}else{
return '';
}
}
}
if ( !function_exists('tmpcoder_get_theme_text') ){
function tmpcoder_get_theme_text(){
if ( class_exists('Tmpcoder_Site_Settings') ){
$site_logo = ( Tmpcoder_Site_Settings::tmpcoder_has('tmpcoder_get_theme_text') ) ? Tmpcoder_Site_Settings::tmpcoder_get('tmpcoder_get_theme_text') : '';
return $site_logo;
}else{
return '';
}
}
}