File "tf-function.php"

Full Path: /home/bytebmoc/tideswithin.com/wp-content/plugins/themesflat-addons-for-elementor/tf-function.php
File size: 30.27 KB
MIME-type: text/x-php
Charset: utf-8

<?php 
if(!function_exists('tf_header_enabled')){
    function tf_header_enabled() {
        $header_id = ThemesFlat_Addon_For_Elementor_Free::get_settings( 'type_header', '' );
        $status    = false;

        if ( '' !== $header_id ) {
            $status = true;
        }

        return apply_filters( 'tf_header_enabled', $status );
    }
}

if(!function_exists('tf_footer_enabled')){
    function tf_footer_enabled() {
        $header_id = ThemesFlat_Addon_For_Elementor_Free::get_settings( 'type_footer', '' );
        $status    = false;

        if ( '' !== $header_id ) {
            $status = true;
        }

        return apply_filters( 'tf_footer_enabled', $status );
    }
}

if(!function_exists('get_header_content')){
    function get_header_content() {
        $tf_get_header_id = ThemesFlat_Addon_For_Elementor_Free::tf_get_header_id();
        echo \Elementor\Plugin::instance()->frontend->get_builder_content_for_display($tf_get_header_id);
    }
}


/*WOO
==============================================================================*/
if( !function_exists('themesflat_product_mini_add_to_cart_fragment')){
    add_filter( 'woocommerce_add_to_cart_fragments', 'themesflat_product_mini_add_to_cart_fragment' );
    function themesflat_product_mini_add_to_cart_fragment( $fragments ) { 
        if ( class_exists( 'woocommerce' ) ) {
            if (!function_exists('themesflat_header_add_to_cart_fragment')) {
                $product_id = (int) apply_filters('woocommerce_add_to_cart_product_id', $_POST['product_id']);
                $fragments['added_product'] = get_post($product_id)->post_title;
                ob_start();
                $count = WC()->cart->get_cart_contents_count();
                ?>               
                <?php if ( $count > 0 ): ?>
                    <span class="cart-contents-count"><?php echo esc_attr( $count ); ?></span>
                <?php else: ?>
                    <span class="cart-contents-count">0</span>
                <?php endif; ?>                           
                <?php
                $fragments['.wrap-count-content .cart-contents-count'] = ob_get_clean();
                ob_end_clean();
                return $fragments;
            }
        }
    }
}

if( !function_exists('tf_woo_custom_product_data_badge_tab')){
    function tf_woo_custom_product_data_badge_tab($tabs) {
        $tabs['tf_custom_product_settings'] = array(
            'label' => esc_html__( 'TF Product Badge', 'themesflat-addons-for-elementor' ),
            'target' => 'tf_custom_product_options_badge',
            'class' => '',
            'priority' => '80'
        );

        return $tabs;
    }
    add_filter('woocommerce_product_data_tabs', 'tf_woo_custom_product_data_badge_tab');
}
if( !function_exists('tf_woo_add_metabox_to_general_tab')){
    function tf_woo_add_metabox_to_general_tab(){
        echo '<div id="tf_custom_product_options_badge" class="panel woocommerce_options_panel">';
            woocommerce_wp_text_input( array(
                'id'          => '_tf_flashsale_text',
                'label'       => esc_html__( 'Custom Product Badge: ', 'themesflat-addons-for-elementor' ),
                'placeholder' => esc_html__( 'Enter your badge text. Ex: New / Free etc', 'themesflat-addons-for-elementor' ),
            ) );
            woocommerce_wp_text_input( array(
                'id'          => '_tf_flashsale_text_2',
                'label'       => esc_html__( 'Custom Product Badge: ', 'themesflat-addons-for-elementor' ),
                'placeholder' => esc_html__( 'Enter your badge text. Ex: Hot / Free etc', 'themesflat-addons-for-elementor' ),
            ) );
        echo '</div>';
    }
    add_action( 'woocommerce_product_data_panels', 'tf_woo_add_metabox_to_general_tab' );
}
if( !function_exists('tf_save_metabox_of_general_tab') ){
    function tf_save_metabox_of_general_tab( $post_id ){
        $tf_flashsale_text = wp_kses_post( stripslashes( $_POST['_tf_flashsale_text'] ) );
        $tf_flashsale_text_2 = wp_kses_post( stripslashes( $_POST['_tf_flashsale_text_2'] ) );
        update_post_meta( $post_id, '_tf_flashsale_text', $tf_flashsale_text);
        update_post_meta( $post_id, '_tf_flashsale_text_2', $tf_flashsale_text_2);
    }
    add_action( 'woocommerce_process_product_meta', 'tf_save_metabox_of_general_tab');
}

if( !function_exists('get_flash_sale')){
    function get_flash_sale($show = 'yes') {  
        global $product;
        $text_flash_sale = get_post_meta(get_the_ID(), '_tf_flashsale_text', true);
        $text_flash_sale_2 = get_post_meta(get_the_ID(), '_tf_flashsale_text_2', true);
        if( $show == 'yes' ){
            $badge = '';
            $badge = '<span class="wrap-badge">';
            if( !empty( $text_flash_sale ) && $product->is_in_stock() ){
                
                if( $product->is_featured() ){                
                    $badge .= '<span class="badge badge01 flash-sale hot">'.$text_flash_sale.'</span>';              
                }else{
                    $badge .= '<span class="badge badge01 flash-sale flash-sale-right">'.$text_flash_sale.'</span>';
                }
            }

            if( !empty( $text_flash_sale_2 ) && $product->is_in_stock() ){
                
                if( $product->is_featured() ){                
                    $badge .= '<span class="badge badge02 flash-sale hot">'.$text_flash_sale_2.'</span>';              
                }else{
                    $badge .= '<span class="badge badge02 flash-sale flash-sale-right">'.$text_flash_sale_2.'</span>';
                }
            }
            $badge .= '</span>';

            return $badge;
        }
    }
}

if( !function_exists('get_sale_price')){
    function get_sale_price($show = 'yes', $sale_style='sale_text', $text_sale='Sale!', $prefix_percent='-') {  
        if( function_exists('get_product') ){    
            if ($show == 'yes') {
                $sale_price = get_post_meta( get_the_ID(), '_sale_price', true);            
                $regular_price = get_post_meta( get_the_ID(), '_regular_price', true);
                $sale_price = intval($sale_price);
                $regular_price = intval($regular_price);
                $percentage = 0;
                if ($regular_price > 0 && $sale_price > 0) {
                    $percentage = round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 );
                }
                
                if ($sale_style == 'sale_percent') {
                    if ($percentage != 0 && $percentage != 100 ) {
                        return '<span class="onsale sale-percent">'.$prefix_percent.$percentage.'%</span>';
                    }                
                }else {
                    if ($percentage != 0 && $percentage != 100 ) {
                        return '<span class="onsale">'.$text_sale.'</span>';
                    } 
                } 
            }     
        }  
    }
}

/* Pagination Woo */
if(!function_exists('tf_custom_pagination_woo')){
    function tf_custom_pagination_woo($query_products='', $paged='', $style='', $align='') {

        if($style == 'numeric'){
            ?>
            <nav class="navigation navigation-numeric" role="navigation">
                <div class="pagination loop-pagination <?php echo esc_attr($align); ?>">
                <?php   
                if (  $query_products->max_num_pages > 1 ){        
                    echo paginate_links( array(
                    'base' => str_replace( $query_products->max_num_pages, '%#%', esc_url( get_pagenum_link( $query_products->max_num_pages ) ) ),
                    'format' => '?paged=%#%',
                    'current' => max( 1, $paged ),
                    'total' => $query_products->max_num_pages,
                    'prev_next' => false
                    ));
                }
                ?>
                </div>
            </nav>
            <?php
        }elseif ($style == 'numeric-link') {
            ?>
            <nav class="navigation navigation-numeric-link" role="navigation">
                <div class="pagination loop-pagination <?php echo esc_attr($align); ?>">
                <?php
                if (  $query_products->max_num_pages > 1 ){
                    echo paginate_links( array(
                    'base' => str_replace( $query_products->max_num_pages, '%#%', esc_url( get_pagenum_link( $query_products->max_num_pages ) ) ),
                    'format' => '?paged=%#%',
                    'current' => max( 1, $paged ),
                    'total' => $query_products->max_num_pages,               
                    'prev_text' => ( '<i class="fas fa-angle-left"></i>' ),
                    'next_text' => ( '<i class="fas fa-angle-right"></i>' ),
                    ));
                }
                ?>
                </div>
            </nav>
            <?php
        }elseif ($style == 'link') {
            ?>
            <nav class="navigation navigation-link" role="navigation">
                <div class="pagination loop-pagination clearfix">
                <?php
                if (  $query_products->max_num_pages > 1 ){
                    echo paginate_links( array(
                    'base' => str_replace( $query_products->max_num_pages, '%#%', esc_url( get_pagenum_link( $query_products->max_num_pages ) ) ),
                    'format' => '?paged=%#%',
                    'current' => max( 1, $paged ),
                    'total' => $query_products->max_num_pages,
                    'prev_text' => esc_html__( 'Previous', 'themesflat-addons-for-elementor' ),
                    'next_text' => esc_html__( 'Next', 'themesflat-addons-for-elementor' ),
                    ));
                }
                ?>
                </div>
            </nav>
            <?php
        }elseif ($style == 'loadmore') {
            if ( \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
                ?>
                <nav class="navigation loadmore" role="navigation">
                    <div class="pagination loop-pagination <?php echo esc_attr($align); ?>">            
                    <a href=" <?php echo esc_url( get_next_posts_page_link() ); ?> "><?php echo esc_html__('Load More', 'themesflat-addons-for-elementor'); ?></a>
                    </div>
                </nav>
                <?php
            }else {
                ?>
                <nav class="navigation loadmore" role="navigation">
                    <div class="pagination loop-pagination <?php echo esc_attr($align); ?>">
                        <div class="wrap-text">
                            <span class="loading-icon">
                                <span class="bubble">
                                    <span class="dot"></span>
                                </span>
                                <span class="bubble">
                                    <span class="dot"></span>
                                </span>
                                <span class="bubble">
                                    <span class="dot"></span>
                                </span>
                            </span>
                            <span class="text"><?php echo next_posts_link( esc_html__( 'Load More', 'themesflat-addons-for-elementor' ), $query_products->max_num_pages ); ?></span>                            
                        </div>
                    </div>
                </nav>
                <?php
            }
        }else {
            ?>
            <nav class="navigation navigation-numeric-link" role="navigation">
                <div class="pagination loop-pagination <?php echo esc_attr($align); ?>">
                <?php
                if (  $query_products->max_num_pages > 1 ){
                    echo paginate_links( array(
                    'base' => str_replace( $query_products->max_num_pages, '%#%', esc_url( get_pagenum_link( $query_products->max_num_pages ) ) ),
                    'format' => '?paged=%#%',
                    'current' => max( 1, $paged ),
                    'total' => $query_products->max_num_pages,               
                    'prev_text' => ( '<i class="fas fa-angle-left"></i>' ),
                    'next_text' => ( '<i class="fas fa-angle-right"></i>' ),
                    ));
                }
                ?>
                </div>
            </nav>
            <?php
        }      
    }
}

/* Wishlist Woo */
if ( defined( 'YITH_WCWL' ) && ! function_exists( 'tf_yith_wcwl_ajax_update_count' ) ) {
  function tf_yith_wcwl_ajax_update_count() {
    wp_send_json( array(
      'count' => yith_wcwl_count_all_products()
    ) );
  }
  add_action( 'wp_ajax_yith_wcwl_update_wishlist_count', 'tf_yith_wcwl_ajax_update_count' );
  add_action( 'wp_ajax_nopriv_yith_wcwl_update_wishlist_count', 'tf_yith_wcwl_ajax_update_count' );
}

if ( defined( 'YITH_WCWL' ) && ! function_exists( 'tf_yith_wcwl_enqueue_custom_script' ) ) {
    function tf_yith_wcwl_enqueue_custom_script() {
        wp_add_inline_script(
            'jquery-yith-wcwl',
            "jQuery( function( $ ) {
                    $( document ).on( 'added_to_wishlist removed_from_wishlist', function() {
                        $.get( yith_wcwl_l10n.ajax_url, {
                            action: 'yith_wcwl_update_wishlist_count'
                        }, function( data ) {
                            $('.wishlist-counter').html( data.count );
                        } );
                    } );
            } );"
        );
    }
    add_action( 'wp_enqueue_scripts', 'tf_yith_wcwl_enqueue_custom_script', 20 );
}

/* Compare Woo */
if( !function_exists('tf_yith_compare_button')){
    function tf_yith_compare_button(){
        if( !class_exists('YITH_Woocompare') ) return;
        global $product;
        $product_id = $product->get_id();
        $comp_link = home_url() . '?action=yith-woocompare-add-product';
        $comp_link = add_query_arg('id', $product_id, $comp_link);    
        $output = '<div class="woocommerce product compare-button tf-compare-button"><a href="'. esc_url( $comp_link ) .'" class="compare button" data-product_id="'. esc_attr( $product_id ) .'" rel="nofollow" title="'.esc_html__( 'Compare', 'themesflat-addons-for-elementor' ).'">'.esc_html__( 'Compare', 'themesflat-addons-for-elementor' ).'</a></div>';
        return $output;
    }
}

/* QuickView Woo */
if( !function_exists('tf_yith_quick_view_button')){
    function tf_yith_quick_view_button(){
        if( !class_exists('YITH_WCQV') ) return;
        global $product;
        $product_id = $product->get_id();
        $output = '<div class="woocommerce product tf-quick-view-button"><a href="'.esc_url( $product->get_permalink()).'" class="button yith-wcqv-button" data-product_id="'. esc_attr( $product_id ) .'" title="'.esc_html__( 'Quick View', 'themesflat-addons-for-elementor' ).'">'.esc_html__( 'Quick View', 'themesflat-addons-for-elementor' ).'</a></div>';
        return $output;
    }
}

/* Get All ID Product */
if( !function_exists('tf_get_all_id_product')){
    function tf_get_all_id_product() {
        $list_products = get_posts( array(
            'post_type' => 'product',
            'numberposts' => -1,
            'post_status' => 'publish',
            'fields' => 'ids,post_title',
       ) );
       foreach ( $list_products as $product ) {
            $select_product[$product->ID] = $product->post_title; 
       }
       return $select_product;
    }
}

if( !function_exists('tf_product_render')){
    //add_action('wp_ajax_tf_product_filter', 'tf_product_render'); 
    //add_action('wp_ajax_nopriv_tf_product_filter', 'tf_product_render');
    function tf_product_render(){   
        $settings = unserialize(base64_decode($_POST['settings']), ['allowed_classes' => false]); 

        $args = array(
            'post_type'             => 'product',
            'post_status'           => 'publish',
            'ignore_sticky_posts'   => 1,
            'posts_per_page' => -1,
        ); 

        $tax_query_tab[] = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'name',
            'terms'    => 'featured',
            'operator' => 'IN',
        );
        if ( isset( $_POST['product_cats'] ) && isset( $_POST['product_tab_badge'] ) && $_POST['product_tab_badge'] == 'sale') {
            if ($_POST['product_cats'] == 'all') {
                $args = array(
                    'post_type' => 'product',
                    'post_status' => 'publish',
                    'tax_query' => $tax_query_tab,
                    'meta_query'    => array(
                        'relation'  => 'AND',
                        array(
                            'key'       => '_sale_price',
                            'value'     => 0,
                            'compare'   => '!='
                        ),
                        array(
                            'key'       => '_sale_price',
                            'value'     => 0,
                            'compare'   => '>'
                        )
                    )
                );
            }else {
                $args = array(
                    'post_type' => 'product',
                    'post_status' => 'publish',
                    'meta_query'    => array(
                        'relation'  => 'AND',
                        array(
                            'key'       => '_sale_price',
                            'value'     => 0,
                            'compare'   => '!='
                        ),
                        array(
                            'key'       => '_sale_price',
                            'value'     => 0,
                            'compare'   => '>'
                        )
                    ),
                    'tax_query' => array(
                        'relation'  => 'AND',
                        array(
                            'taxonomy' => 'product_cat',
                            'field' => 'slug',
                            'terms' => $_POST['product_cats']
                        ),
                        array(
                            'taxonomy' => 'product_visibility',
                            'field' => 'name',
                            'terms'    => 'featured',
                            'operator' => 'IN',
                        )
                    ),
                );
            }            
        } elseif( isset( $_POST['product_cats'] ) && isset( $_POST['product_tab_badge'] ) ) {        
            if ($_POST['product_cats'] == 'all' && $_POST['product_tab_badge'] == 'all') {
                $args = array(  
                    'post_type' => 'product',
                    'post_status' => 'publish',
                    'posts_per_page' => -1,
                    'ignore_sticky_posts'   => 1,
                    'tax_query' => $tax_query_tab,             
                );
            } elseif ($_POST['product_cats'] == 'all') {
                $args = array(
                    'post_type' => 'product',
                    'post_status' => 'publish',
                    'tax_query' => $tax_query_tab,
                    'meta_query'    => array(
                        'relation'  => 'OR',
                        array(
                            'key'       => '_tf_flashsale_text',
                            'value'     => $_POST['product_tab_badge'],
                            'compare'   => '='
                        ),
                        array(
                            'key'       => '_tf_flashsale_text_2',
                            'value'     => $_POST['product_tab_badge'],
                            'compare'   => '='
                        )
                    )
                );
            } elseif ($_POST['product_tab_badge'] == 'all') {
                $args = array(  
                    'post_type' => 'product',
                    'post_status' => 'publish',
                    'posts_per_page' => -1,      
                    'tax_query' => array(
                        'relation'  => 'AND',
                        array(
                            'taxonomy' => 'product_cat',
                            'field' => 'slug',
                            'terms' => $_POST['product_cats']
                        ),
                        array(
                            'taxonomy' => 'product_visibility',
                            'field' => 'name',
                            'terms'    => 'featured',
                            'operator' => 'IN',
                        )
                    ),                
                );
            } else {
                $args = array(
                    'meta_query'    => array(
                        'relation'  => 'OR',
                        array(
                            'key'       => '_tf_flashsale_text',
                            'value'     => $_POST['product_tab_badge'],
                            'compare'   => '='
                        ),
                        array(
                            'key'       => '_tf_flashsale_text_2',
                            'value'     => $_POST['product_tab_badge'],
                            'compare'   => '='
                        )
                    ),
                    'tax_query' => array(
                        'relation'  => 'AND',
                        array(
                            'taxonomy' => 'product_cat',
                            'field' => 'slug',
                            'terms' => $_POST['product_cats']
                        ),
                        array(
                            'taxonomy' => 'product_visibility',
                            'field' => 'name',
                            'terms'    => 'featured',
                            'operator' => 'IN',
                        )
                    ),
                );  
            }  
        } else {
            if( isset( $_POST['product_cats'] ) ){
                $args = array(  
                    'post_type' => 'product',
                    'post_status' => 'publish',
                    'posts_per_page' => -1,      
                    'tax_query' => array(
                        'relation'  => 'AND',
                        array(
                            'taxonomy' => 'product_cat',
                            'field' => 'slug',
                            'terms' => $_POST['product_cats']
                        ),
                        array(
                            'taxonomy' => 'product_visibility',
                            'field' => 'name',
                            'terms'    => 'featured',
                            'operator' => 'IN',
                        )
                    ),                
                );
            }
        }    
        

        $query_products = new WP_Query( $args );
        if( $query_products->have_posts() ):
            while( $query_products->have_posts() ): $query_products->the_post(); ?>
                <div class="product-item">
                    <div class="product-inner">
                        <?php if( has_post_thumbnail() ): ?>
                            <div class="product-thumb">
                                <a href="<?php the_permalink();?>" class="image">
                                    <?php 
                                    if ($settings['custom_sale'] == 'yes') {
                                        echo get_sale_price($settings['product_sale'] ,$settings['sale_style'], $settings['enter_sale_text'], $settings['prefix_sale_percent']);
                                    }else {
                                        woocommerce_show_product_loop_sale_flash();
                                    }
                                    echo get_flash_sale($settings['badge']);
                                    
                                    $get_post_thumbnail = get_post_thumbnail_id();
                                    if ( !empty( wc_get_product()->get_gallery_image_ids() ) ){
                                        $image_id = wc_get_product()->get_gallery_image_ids()[1]; 
                                        $image_src = wp_get_attachment_image_src ($image_id, 'full');
                                    }                                               
                                    if ( !empty( wc_get_product()->get_gallery_image_ids() ) && $image_src != '' && $settings['image_hover_gallery'] == 'yes' ):
                                        $image_id = wc_get_product()->get_gallery_image_ids()[1];                                       
                                        ?>
                                        <img src="<?php echo \Elementor\Group_Control_Image_Size::get_attachment_image_src( $get_post_thumbnail, 'thumbnail', $settings ); ?>" alt="image" class="image_on">    
                                        <img src="<?php echo \Elementor\Group_Control_Image_Size::get_attachment_image_src( $image_id, 'thumbnail', $settings ); ?>" alt="image" class="image_off">
                                        <?php
                                    else: ?>                                            
                                        <img src="<?php echo \Elementor\Group_Control_Image_Size::get_attachment_image_src( $get_post_thumbnail, 'thumbnail', $settings ); ?>" alt="image" class="<?php echo 'elementor-animation-'.esc_attr($settings['hover_animation']); ?>">    
                                    <?php endif ?>
                                </a>

                                <?php if ( $settings['product_layout'] == 'layout-2' ): ?>
                                    <div class="product-actions">
                                        <?php woocommerce_template_loop_add_to_cart(); ?>
                                        <?php 
                                        if ( class_exists( 'YITH_WCWL' ) && shortcode_exists( 'yith_wcwl_add_to_wishlist') && $settings['wishlist'] == 'yes' ){
                                            echo do_shortcode( '[yith_wcwl_add_to_wishlist]' );
                                        }
                                        if ( class_exists( 'YITH_Woocompare' ) && $settings['compare'] == 'yes' ){
                                            echo tf_yith_compare_button();
                                        }
                                        if ( class_exists( 'YITH_WCQV' ) && $settings['quickview'] == 'yes' ){
                                            echo tf_yith_quick_view_button();
                                        }                                   
                                        ?>
                                    </div>  
                                <?php endif; ?>

                                <?php if ( $settings['product_layout'] == 'layout-3' ): ?>
                                    <div class="product-actions">
                                        <?php 
                                        if ( class_exists( 'YITH_WCWL' ) && shortcode_exists( 'yith_wcwl_add_to_wishlist') && $settings['wishlist'] == 'yes' ){
                                            echo do_shortcode( '[yith_wcwl_add_to_wishlist]' );
                                        }
                                        if ( class_exists( 'YITH_Woocompare' ) && $settings['compare'] == 'yes' ){
                                            echo tf_yith_compare_button();
                                        }
                                        if ( class_exists( 'YITH_WCQV' ) && $settings['quickview'] == 'yes' ){
                                            echo tf_yith_quick_view_button();
                                        }                                   
                                        ?>
                                    </div>  
                                <?php endif; ?>

                            </div>
                        <?php endif; ?>
                        <div class="product-content">
                            <h4 class="title"><a href="<?php the_permalink();?>"><?php echo get_the_title();?></a></h4>
                            <?php woocommerce_template_loop_price();?>  

                            <?php if ($settings['product_layout'] == 'layout-1'): ?>                            
                                <div class="product-actions">
                                    <?php woocommerce_template_loop_add_to_cart(); ?>
                                    <?php 
                                    if ( class_exists( 'YITH_WCWL' ) && shortcode_exists( 'yith_wcwl_add_to_wishlist') && $settings['wishlist'] == 'yes' ){
                                        echo do_shortcode( '[yith_wcwl_add_to_wishlist]' );
                                    }
                                    if ( class_exists( 'YITH_Woocompare' ) && $settings['compare'] == 'yes' ){
                                        echo tf_yith_compare_button();
                                    }
                                    if ( class_exists( 'YITH_WCQV' ) && $settings['quickview'] == 'yes' ){
                                        echo tf_yith_quick_view_button();
                                    }                                   
                                    ?>
                                </div>  
                            <?php endif; ?>

                            <?php if ($settings['product_layout'] == 'layout-3'): ?>                            
                                <div class="product-actions">
                                    <?php woocommerce_template_loop_add_to_cart(); ?>
                                </div>  
                            <?php endif; ?>  

                        </div>
                    </div>
                </div>
            <?php endwhile;
            wp_reset_postdata();
            wp_die(); 
        else:
            echo '<div class="no-found">';
                esc_html_e('No product found', 'themesflat-addons-for-elementor');
            echo '</div>';
            wp_die();
        endif;
        wp_reset_postdata();
    }
}