File: /var/www/ecom/wp-content/themes/electro/inc/woocommerce/functions.php
<?php
/**
* WooCommerce functions
*
* @package Electro/WooCommerce
*/
if ( ! function_exists( 'electro_change_breadcrumb_delimiter' ) ) {
/**
* Change the default breadcrumb separator
*/
function electro_change_breadcrumb_delimiter( $defaults ) {
$defaults[ 'delimiter' ] = '<span class="delimiter"><i class="fa fa-angle-right"></i></span>';
return $defaults;
}
}
if ( ! function_exists( 'electro_reset_woocommerce_loop' ) ) {
/**
* Resets WooCommerce loop so that the subcategories and products can have different number of columns
*/
function electro_reset_woocommerce_loop() {
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '3.3', '<' ) ) {
global $woocommerce_loop;
$woocommerce_loop[ 'columns' ] = '';
$woocommerce_loop[ 'loop' ] = '';
$woocommerce_loop[ 'type' ] = '';
$woocommerce_loop[ 'columns_wide'] = '';
}
}
}
if ( ! function_exists( 'electro_set_loop_shop_columns' ) ) {
/**
* Sets Shop Loop Columns
*/
function electro_set_loop_shop_columns() {
$columns = apply_filters( 'electro_shop_loop_products_columns', 3 );
return $columns;
}
}
if ( ! function_exists( 'electro_shopping_cart_summary' ) ) {
/**
* Display Off Canvas Shopping Cart Summary
*/
function electro_shopping_cart_summary() {
electro_get_template( 'sections/shopping-cart-summary.php' );
}
}
if ( ! function_exists( 'electro_set_loop_shop_columns_wide' ) ) {
/**
* Sets Shop Loop Columns Wide
*/
function electro_set_loop_shop_columns_wide() {
$columns_wide = apply_filters( 'electro_shop_loop_products_columns_wide', 5 );
return $columns_wide;
}
}
if ( ! function_exists( 'electro_set_loop_shop_subcategories_columns' ) ) {
function electro_set_loop_shop_subcategories_columns() {
return apply_filters( 'electro_shop_loop_subcategories_columns', 4 );
}
}
if ( ! function_exists( 'electro_set_pagination_args' ) ) {
/**
* Sets arguments for pagination
*/
function electro_set_pagination_args( $args ) {
$args[ 'end_size' ] = 1;
$args[ 'mid_size' ] = 2;
return $args;
}
}
if ( ! function_exists( 'electro_set_loop_shop_per_page' ) ) {
/**
* Sets no of products per page
*/
function electro_set_loop_shop_per_page() {
$per_page = electro_set_loop_shop_columns() * 4;
$per_page = apply_filters( 'electro_loop_shop_per_page', $per_page );
// Bail if there is no session.
if ( empty( WC()->session ) ) {
return $per_page;
}
if ( isset( $_REQUEST['wppp_ppp'] ) ) :
$per_page = intval( $_REQUEST['wppp_ppp'] );
WC()->session->set( 'products_per_page', intval( $_REQUEST['wppp_ppp'] ) );
elseif ( isset( $_REQUEST['ppp'] ) ) :
$per_page = intval( $_REQUEST['ppp'] );
WC()->session->set( 'products_per_page', intval( $_REQUEST['ppp'] ) );
elseif ( WC()->session->get( 'products_per_page' ) ) :
$per_page = intval( WC()->session->get( 'products_per_page' ) );
endif;
return $per_page;
}
}
if ( ! function_exists( 'electro_before_product_archive_content' ) ) {
/**
* Before Product Archive Content
*/
function electro_before_product_archive_content() {
if ( is_shop() ) {
/**
* @hooked electro_featured_products_carousel - 10
*/
do_action( 'electro_before_product_archive_content' );
}
}
}
if ( ! function_exists( 'woocommerce_product_loop_start' ) ) {
/**
* Output the start of a product loop. By default this is a UL.
*
* @param bool $echo Should echo?.
* @return string
*/
function woocommerce_product_loop_start( $echo = true ) {
ob_start();
$loop_classes = '';
$product_loop_classes_arr = apply_filters( 'electro_product_loop_additional_classes', array( 'products', 'list-unstyled', 'row', 'g-0', 'row-cols-2', 'row-cols-md-3' ) );
$columns = apply_filters( 'loop_shop_columns', 3 );
$columns_wide = apply_filters( 'loop_shop_columns_wide', 5 );
wc_set_loop_prop( 'loop', 0 );
$columns = wc_get_loop_prop( 'columns', $columns );
$columns_wide = wc_get_loop_prop( 'columns_wide', $columns_wide );
$product_loop_classes_arr[] = 'row-cols-lg-' . $columns;
$product_loop_classes_arr[] = 'row-cols-xl-' . $columns;
$product_loop_classes_arr[] = 'row-cols-xxl-' . $columns_wide;
$data_attr = 'regular-products';
$data_view = 'grid';
if ( is_shop() || is_product_category() || is_product_tag() || is_tax( get_object_taxonomies( 'product' ) ) || ( is_dokan_activated() && dokan_is_store_page() ) ) {
$data_attr = 'shop-products';
$shop_views = electro_get_shop_views();
foreach( $shop_views as $shop_view => $shop_view_args) {
if ( $shop_view_args['active'] ) {
$data_view = $shop_view;
break;
}
}
}
if( is_array( $product_loop_classes_arr ) ) {
$loop_classes = implode( ' ', $product_loop_classes_arr );
}
echo '<ul data-view="' . esc_attr( $data_view ) . '" data-bs-toggle="' . esc_attr( $data_attr ) . '" class="products ' . esc_attr( $loop_classes ) . '">';
if ( $echo )
echo ob_get_clean();
else
return ob_get_clean();
}
}
if ( ! function_exists( 'electro_get_price_html_from_to' ) ) {
/**
* Overwrites the sale price in html format
*/
function electro_get_price_html_from_to( $price, $from, $to, $product ) {
$style = electro_get_single_product_style();
if ( ! ( is_product() && 'extended' === $style ) ){
$price = '<ins>' . ( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) . '</ins> <del>' . ( ( is_numeric( $from ) ) ? wc_price( $from ) : $from ) . '</del>';
}
return apply_filters( 'electro_get_price_html_from_to', $price, $from, $to, $product );
}
}
if( ! function_exists( 'electro_wc_format_sale_price' ) ) {
/**
* Format a sale price for display.
*
* @param string $regular_price
* @param string $sale_price
* @return string
*/
function electro_wc_format_sale_price( $price, $regular_price, $sale_price ) {
$price = '<ins>' . ( is_numeric( $sale_price ) ? wc_price( $sale_price ) : $sale_price ) . '</ins> <del>' . ( is_numeric( $regular_price ) ? wc_price( $regular_price ) : $regular_price ) . '</del>';
return apply_filters( 'electro_wc_format_sale_price', $price, $regular_price, $sale_price );
}
}
if ( ! function_exists( 'electro_mini_cart_fragment' ) ) {
/**
* Cart Fragments
* Ensure cart contents update when products are added to the cart via AJAX
* @param array $fragments Fragments to refresh via AJAX
* @return array Fragments to refresh via AJAX
*/
function electro_mini_cart_fragment( $fragments ) {
global $woocommerce;
$fragments['span.cart-items-count'] = '<span class="cart-items-count count header-icon-counter">' . WC()->cart->get_cart_contents_count() . '</span>';
$fragments['span.cart-items-total-price'] = '<span class="cart-items-total-price total-price">' . WC()->cart->get_cart_subtotal() . '</span>';
return $fragments;
}
}
if ( ! function_exists( 'electro_wrap_price_html' ) ) {
/**
* Wraps price HTML with <span class="price"></span>
*/
function electro_wrap_price_html( $html ) {
return apply_filters( 'electro_price_html', '<span class="electro-price">' . $html . '</span>' );
}
}
if ( ! function_exists( 'electro_get_shop_views' ) ) {
/**
* Get shop views available by electro
*/
function electro_get_shop_views() {
$shop_views = apply_filters( 'electro_shop_views_args', array(
'grid' => array(
'label' => esc_html__( 'Grid View', 'electro' ),
'icon' => 'fa fa-th',
'enabled' => true,
'active' => true,
'template' => array( 'slug' => 'content', 'name' => 'product' ),
),
'grid-extended' => array(
'label' => esc_html__( 'Grid Extended View', 'electro' ),
'icon' => 'fa fa-align-justify',
'enabled' => true,
'active' => false,
'template' => array( 'slug' => 'templates/contents/content', 'name' => 'product-grid-extended' ),
),
'list-view' => array(
'label' => esc_html__( 'List View', 'electro' ),
'icon' => 'fa fa-list',
'enabled' => true,
'active' => false,
'template' => array( 'slug' => 'templates/contents/content', 'name' => 'product-list-view' ),
),
'list-view-small' => array(
'label' => esc_html__( 'List View Small', 'electro' ),
'icon' => 'fa fa-th-list',
'enabled' => true,
'active' => false,
'template' => array( 'slug' => 'templates/contents/content', 'name' => 'product-list-small' ),
)
) );
return $shop_views;
}
}
if ( ! function_exists( 'electro_wc_products_per_page' ) ) {
/**
* Outputs a dropdown for user to select how many products to show per page
*/
function electro_wc_products_per_page() {
global $wp_query;
$action = '';
$cat = '';
$cat = $wp_query->get_queried_object();
$method = apply_filters( 'electro_wc_ppp_method', 'post' );
$return_to_first = apply_filters( 'electro_wc_ppp_return_to_first', false );
$total = $wp_query->found_posts;
$per_page = $wp_query->get( 'posts_per_page' );
$_per_page = electro_set_loop_shop_columns() * 4;
// Generate per page options
$products_per_page_options = array();
while( $_per_page < $total ) {
$products_per_page_options[] = $_per_page;
$_per_page = $_per_page * 2;
}
if ( empty( $products_per_page_options ) ) {
return;
}
$products_per_page_options[] = -1;
// Set action url if option behaviour is true
// Paste QUERY string after for filter and orderby support
$query_string = ! empty( $_SERVER['QUERY_STRING'] ) ? '?' . add_query_arg( array( 'ppp' => false ), $_SERVER['QUERY_STRING'] ) : null;
if ( isset( $cat->term_id ) && isset( $cat->taxonomy ) && $return_to_first ) :
$action = get_term_link( $cat->term_id, $cat->taxonomy ) . $query_string;
elseif ( $return_to_first ) :
$action = get_permalink( wc_get_page_id( 'shop' ) ) . $query_string;
endif;
// Only show on product categories
if ( ! woocommerce_products_will_display() ) :
return;
endif;
do_action( 'electro_wc_ppp_before_dropdown_form' );
?><form method="POST" action="<?php echo esc_url( $action ); ?>" class="form-electro-wc-ppp"><?php
do_action( 'electro_wc_ppp_before_dropdown' );
?><select name="ppp" onchange="this.form.submit()" class="electro-wc-wppp-select c-select"><?php
$products_per_page_options = apply_filters( 'electro_products_per_page_options', $products_per_page_options );
foreach( $products_per_page_options as $key => $value ) :
?><option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, $per_page ); ?>><?php
$ppp_text = apply_filters( 'electro_wc_ppp_text', __( 'Show %s', 'electro' ), $value );
esc_html( printf( $ppp_text, $value == -1 ? __( 'All', 'electro' ) : $value ) ); // Set to 'All' when value is -1
?></option><?php
endforeach;
?></select><?php
// Keep query string vars intact
foreach ( $_GET as $key => $val ) :
if ( 'ppp' === $key || 'submit' === $key ) :
continue;
endif;
if ( is_array( $val ) ) :
foreach( $val as $inner_val ) :
?><input type="hidden" name="<?php echo esc_attr( $key ); ?>[]" value="<?php echo esc_attr( $inner_val ); ?>" /><?php
endforeach;
else :
?><input type="hidden" name="<?php echo esc_attr( $key ); ?>" value="<?php echo esc_attr( $val ); ?>" /><?php
endif;
endforeach;
do_action( 'electro_wc_ppp_after_dropdown' );
?></form><?php
do_action( 'electro_wc_ppp_after_dropdown_form' );
}
}
if ( ! function_exists( 'electro_advanced_pagination' ) ) {
/**
* Displays an advanced pagination
*/
function electro_advanced_pagination() {
global $wp_query, $wp_rewrite;
if ( $wp_query->max_num_pages <= 1 ) {
return;
}
// Setting up default values based on the current URL.
$pagenum_link = html_entity_decode( get_pagenum_link() );
$url_parts = explode( '?', $pagenum_link );
// Get max pages and current page out of the current query, if available.
$total = isset( $wp_query->max_num_pages ) ? $wp_query->max_num_pages : 1;
$current = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
// Append the format placeholder to the base URL.
$pagenum_link = trailingslashit( $url_parts[0] ) . '%_%';
// URL base depends on permalink settings.
$format = $wp_rewrite->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
$format .= $wp_rewrite->using_permalinks() ? user_trailingslashit( $wp_rewrite->pagination_base . '/%#%', 'paged' ) : '?paged=%#%';
$base = esc_url_raw( str_replace( 999999999, '%#%', remove_query_arg( 'add-to-cart', get_pagenum_link( 999999999, false ) ) ) );
$add_args = false;
$output = '';
$prev_arrow = is_rtl() ? '→' : '←';
$next_arrow = is_rtl() ? '←' : '→';
if ( $current && 1 < $current ) :
$link = str_replace( '%_%', 2 == $current ? '' : $format, $base );
$link = str_replace( '%#%', $current - 1, $link );
$output .= '<a class="prev page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $prev_arrow . '</a>';
endif;
$number_input = '<form method="post" class="form-adv-pagination"><input id="goto-page" size="2" min="1" max="' . esc_attr( $total ) . '" step="1" type="number" class="form-control" value="' . esc_attr( $current ) . '" /></form>';
$output .= sprintf( esc_html__( '%s of %s', 'electro' ), $number_input, $total );
if ( $current && ( $current < $total || -1 == $total ) ) :
$link = str_replace( '%_%', $format, $base );
$link = str_replace( '%#%', $current + 1, $link );
$output .= '<a class="next page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $next_arrow . '</a>';
endif;
$link = str_replace( '%_%', $format, $base );
?>
<nav class="electro-advanced-pagination">
<?php echo $output; ?>
<script>
jQuery(document).ready(function($){
$( '.form-adv-pagination' ).on( 'submit', function() {
var link = '<?php echo esc_url( apply_filters( 'paginate_links', $link ) ); ?>',
goto_page = $( '#goto-page' ).val(),
new_link = link.replace( '%#%', goto_page ).replace(/&/g, '&');
window.location.href = new_link;
return false;
});
});
</script>
</nav>
<?php
}
}
if ( ! function_exists( 'electro_template_loop_hover' ) ) {
/**
* Calls electro loop hover
*/
function electro_template_loop_hover() {
?><div class="hover-area"><?php
/**
* @hooked electro_loop_action_buttons - 10
*/
do_action( 'electro_product_item_hover_area' );
?></div><?php
}
}
if ( ! function_exists( 'electro_loop_action_buttons' ) ) {
/**
*
*/
function electro_loop_action_buttons() {
?><div class="action-buttons"><?php
do_action( 'electro_loop_action_buttons' );
?></div><?php
}
}
if ( ! function_exists( 'electro_default_wc_footer_widgets' ) ) {
/**
* Displays default Footer Widgets when there are no widgets in the array.
*/
function electro_default_wc_footer_widgets( $args ) {
if( class_exists( 'WC_Widget_Products' ) ) {
$args['widget_id'] = 'featured-products-footer';
the_widget( 'WC_Widget_Products', array( 'title' => __( 'Featured Products', 'electro' ), 'show' => 'featured', 'number' => '3', 'orderby' => 'DESC', 'order' => 'date', 'id' => 'featured-products-footer' ), $args );
$args['widget_id'] = 'onsale-products-footer';
the_widget( 'WC_Widget_Products', array( 'title' => __( 'Onsale Products', 'electro' ), 'show' => 'onsale', 'number' => '3', 'orderby' => 'DESC', 'order' => 'date', 'id' => 'onsale-products-footer' ), $args );
}
if( class_exists( 'WC_Widget_Top_Rated_Products' ) ) {
$args['widget_id'] = 'top-rated-products-footer';
the_widget( 'WC_Widget_Top_Rated_Products', array( 'title' => __( 'Top Rated Products', 'electro' ), 'number' => '3', 'id' => 'top-rated-products-footer' ), $args );
}
}
}
if ( ! function_exists( 'electro_default_wc_fb_widgets' ) ) {
/**
* Displays default footer bottom widgets
*/
function electro_default_wc_fb_widgets( $args ) {
?>
<div class="columns">
<aside class="widget clearfix">
<div class="body">
<h4 class="widget-title">
<?php echo esc_html__( 'Find it Fast', 'electro' ); ?>
</h4>
<ul class="menu-find-it-fast menu">
<?php
echo wp_list_categories(
array(
'title_li' => '',
'hide_empty' => 1 ,
'taxonomy' => 'product_cat',
'hierarchical' => 1 ,
'echo' => 0 ,
'depth' => 1 ,
)
);
?>
</ul>
</div>
</aside>
</div>
<?php
}
}
if( ! function_exists( 'electro_get_product_attr_taxonomies' ) ) {
/**
* Get All Product Attribute Taxonomies
*
* @return array
*/
function electro_get_product_attr_taxonomies() {
$product_taxonomies = array();
$attribute_taxonomies = wc_get_attribute_taxonomies();
if ( $attribute_taxonomies ) {
foreach ( $attribute_taxonomies as $tax ) {
$product_taxonomies[wc_attribute_taxonomy_name( $tax->attribute_name )] = $tax->attribute_label;
}
}
return $product_taxonomies;
}
}
if ( ! function_exists( 'electro_product_category_taxonomy_fields' ) ) {
/**
* Sets up Product categories metaboxes
*/
function electro_product_category_taxonomy_fields() {
require_once get_template_directory() . '/inc/woocommerce/class-electro-categories.php';
}
}
if ( ! function_exists( 'electro_setup_brands_taxonomy' ) ) {
/**
* Sets up Brands Taxonomy from Product attributes
*/
function electro_setup_brands_taxonomy() {
$brand_taxonomy = electro_get_brands_taxonomy();
if ( ! empty( $brand_taxonomy ) ) {
require_once get_template_directory() . '/inc/woocommerce/class-electro-brands.php';
}
}
}
if ( ! function_exists( 'electro_get_brands_taxonomy' ) ) {
/**
* Products Brand Taxonomy
*
* @return string
*/
function electro_get_brands_taxonomy() {
return apply_filters( 'electro_product_brand_taxonomy', '' );
}
}
if ( ! function_exists( 'electro_get_brand_attr' ) ) {
function electro_get_brand_attr() {
$brand_taxonomy = electro_get_brands_taxonomy();
return apply_filters( 'electro_product_brand_attr', str_replace( 'pa_', '', $brand_taxonomy ) );
}
}
if ( ! function_exists( 'electro_get_shop_layout' ) ) {
function electro_get_shop_layout() {
if ( is_product() ) {
$layout = electro_get_single_product_layout();
} else {
$layout = apply_filters( 'electro_shop_layout', 'left-sidebar' );
}
return $layout;
}
}
if ( ! function_exists( 'electro_get_shop_catalog_mode' ) ) {
/**
* Shop Catelog Mode
*
* @return bool
*/
function electro_get_shop_catalog_mode() {
return apply_filters( 'electro_shop_catalog_mode', false );
}
}
if( ! function_exists( 'electro_shop_archive_jumbotron' ) ) {
function electro_shop_archive_jumbotron() {
$static_block_id = '';
$brands_taxonomy = electro_get_brands_taxonomy();
if( is_shop() ) {
$static_block_id = apply_filters( 'electro_shop_jumbotron_id', '' );
} else if ( is_product_category() || is_tax( $brands_taxonomy ) ) {
$term = get_queried_object();
$term_id = $term->term_id;
$static_block_id = defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '3.6', '<' ) ? absint( get_woocommerce_term_meta( $term_id, 'static_block_id', true ) ) : absint( get_term_meta( $term_id, 'static_block_id', true ) );
}
if( ! empty( $static_block_id ) ) {
if ( is_elementor_activated() ) {
$content = \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $static_block_id );
}
if( empty( $content ) ) {
$static_block = get_post( $static_block_id );
$content = do_shortcode( $static_block->post_content );
}
echo $content;
}
}
}
if( ! function_exists( 'electro_shop_bottom_archive_jumbotron' ) ) {
function electro_shop_bottom_archive_jumbotron() {
$static_block_id = '';
$brands_taxonomy = electro_get_brands_taxonomy();
if( is_shop() ) {
$static_block_id = apply_filters( 'electro_shop_bottom_jumbotron_id', '' );
} else if ( is_product_category() || is_tax( $brands_taxonomy ) ) {
$term = get_queried_object();
$term_id = $term->term_id;
$static_block_id = defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '3.6', '<' ) ? absint( get_woocommerce_term_meta( $term_id, 'static_block_bottom_id', true ) ) : absint( get_term_meta( $term_id, 'static_block_bottom_id', true ) );
}
if( ! empty( $static_block_id ) ) {
if ( is_elementor_activated() ) {
$content = \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $static_block_id );
}
if( empty( $content ) ) {
$static_block = get_post( $static_block_id );
$content = do_shortcode( $static_block->post_content );
}
echo '<div class="shop-archive-bottom">' . $content . '</div>';
}
}
}
if( ! function_exists( 'electro_products_live_search' ) ) {
function electro_products_live_search() {
if ( isset( $_REQUEST['fn'] ) && 'get_ajax_search' == $_REQUEST['fn'] ) {
if( isset( $_REQUEST['terms'] ) ) {
$term = $_REQUEST['terms'];
}
if ( empty( $term ) ) {
echo json_encode( array() );
die();
}
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.7', '<' ) ) {
$query_args = apply_filters( 'electro_live_search_query_args', array(
'posts_per_page' => 10,
'no_found_rows' => true,
'post_type' => 'product',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => '_visibility',
'value' => array( 'search', 'visible' ),
'compare' => 'IN'
)
)
) );
$query_args['s'] = $term;
$search_query = new WP_Query( $query_args );
$ids = wp_list_pluck( $search_query->posts, 'ID' );
$product_objects = array_map( 'wc_get_product', $ids );
} else {
$product_objects = wc_get_products( apply_filters( 'electro_wc_live_search_query_args', array(
's' => $term,
'orderby' => 'relevance',
'order' => 'DESC',
'limit' => 10,
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'exclude-from-catalog',
'operator' => 'NOT IN',
),
)
) ) );
}
$results = array();
if( ! empty( $product_objects ) ) {
foreach ( $product_objects as $product_object ) {
$id = electro_wc_get_product_id( $product_object );
$title = get_the_title( $id );
$title = html_entity_decode( $title , ENT_QUOTES, 'UTF-8' );
$price = $product_object->get_price_html();
$brand = '';
if ( has_post_thumbnail( $id ) ) {
$post_thumbnail_ID = get_post_thumbnail_id( $id );
$post_thumbnail_src = wp_get_attachment_image_src( $post_thumbnail_ID, 'thumbnail' );
} else{
$dimensions = wc_get_image_size( 'thumbnail' );
$post_thumbnail_src = array(
wc_placeholder_img_src(),
esc_attr( $dimensions['width'] ),
esc_attr( $dimensions['height'] )
);
}
$brand_taxonomy = electro_get_brands_taxonomy();
if( ! empty( $brand_taxonomy ) ) {
$terms = wc_get_product_terms( $id, $brand_taxonomy, array( 'fields' => 'names' ) );
if ( $terms && ! is_wp_error( $terms ) ) {
$brand_links = array();
foreach ( $terms as $term ) {
if( isset($term->name) ) {
$brand_links[] = $term->name;
}
}
$brand = join( ", ", $brand_links );
}
}
$results[] = apply_filters( 'electro_live_search_results_args', array(
'value' => $title,
'url' => get_permalink( $id ),
'tokens' => explode( ' ', $title ),
'image' => $post_thumbnail_src[0],
'price' => $price,
'brand' => $brand,
'id' => $id
), $product_object );
}
}
wp_reset_postdata();
echo json_encode( $results );
}
die();
}
}
if( ! function_exists( 'electro_wc_get_product_id' ) ) {
function electro_wc_get_product_id( $product ) {
if ( ! ( $product instanceof WC_Product ) ) { return 0; }
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.7', '<' ) ) {
return isset( $product->id ) ? $product->id : 0;
}
return $product->get_id();
}
}
if( ! function_exists( 'electro_wc_get_product_type' ) ) {
function electro_wc_get_product_type( $product ) {
if ( ! ( $product instanceof WC_Product ) ) { return 'simple'; }
if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.7', '<' ) ) {
return isset( $product->product_type ) ? $product->product_type : 'simple';
}
return $product->get_type();
}
}
if ( ! function_exists( 'electro_get_savings_on_sale' ) ) {
function electro_get_savings_on_sale( $product, $in = 'amount' ) {
if ( ! ( $product instanceof WC_Product ) ) { return 0; }
if( ! $product->is_on_sale() ) {
return 0;
}
if( $product->is_type( 'variable' ) ) {
$var_regular_price = array();
$var_sale_price = array();
$var_diff_price = array();
$available_variations = $product->get_available_variations();
foreach ( $available_variations as $key => $available_variation ) {
$variation_id = $available_variation['variation_id']; // Getting the variable id of just the 1st product. You can loop $available_variations to get info about each variation.
$variable_product = new WC_Product_Variation( $variation_id );
$variable_product_regular_price = $variable_product->get_regular_price();
$variable_product_sale_price = $variable_product->get_sale_price();
if( ! empty( $variable_product_regular_price ) ) {
$var_regular_price[] = $variable_product_regular_price;
} else {
$var_regular_price[] = 0;
}
if( ! empty( $variable_product_sale_price ) ) {
$var_sale_price[] = $variable_product_sale_price;
} else {
$var_sale_price[] = 0;
}
}
foreach( $var_regular_price as $key => $reg_price ) {
if( isset( $var_sale_price[$key] ) && $var_sale_price[$key] !== 0 ) {
$var_diff_price[] = $reg_price - $var_sale_price[$key];
} else {
$var_diff_price[] = 0;
}
}
$best_key = array_search( max( $var_diff_price ), $var_diff_price );
$regular_price = $var_regular_price[$best_key];
$sale_price = $var_sale_price[$best_key];
} else {
$regular_price = $product->get_regular_price();
$sale_price = $product->get_sale_price();
}
$regular_price = wc_get_price_to_display( $product, array( 'qty' => 1, 'price' => $regular_price ) );
$sale_price = wc_get_price_to_display( $product, array( 'qty' => 1, 'price' => $sale_price ) );
if ( 'amount' === $in ) {
$savings = wc_price( $regular_price - $sale_price );
} elseif ( 'percentage' === $in ) {
$savings = '<span class="percentage">' . round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 ) . '%</span>';
}
return $savings;
}
}
if ( ! function_exists( 'electro_get_sale_flash' ) ) {
/**
* Functions for getting sale flash with sale amount.
*/
function electro_get_sale_flash( $html, $post, $product ) {
$html = '<span class="onsale">-' . electro_get_savings_on_sale( $product, 'percentage' ) . '</span>';
return apply_filters( 'electro_get_sale_flash', $html, $post, $product );
}
}
/**
* Track product views.
*/
if( ! function_exists( 'electro_wc_track_product_view' ) ) {
function electro_wc_track_product_view() {
if ( ! is_singular( 'product' ) ) {
return;
}
global $post;
if ( empty( $_COOKIE['electro_wc_recently_viewed'] ) ) {
$viewed_products = array();
} else {
$viewed_products = (array) explode( '|', $_COOKIE['electro_wc_recently_viewed'] );
}
if ( ! in_array( $post->ID, $viewed_products ) ) {
$viewed_products[] = $post->ID;
}
if ( sizeof( $viewed_products ) > 15 ) {
array_shift( $viewed_products );
}
// Store for session only
wc_setcookie( 'electro_wc_recently_viewed', implode( '|', $viewed_products ) );
}
}
/**
* Get viewed products
*
*/
if( ! function_exists( 'electro_get_viewed_products' ) ) {
function electro_get_viewed_products() {
$viewed_products = ! empty( $_COOKIE['electro_wc_recently_viewed'] ) ? (array) explode( '|', $_COOKIE['electro_wc_recently_viewed'] ) : array();
$viewed_products = array_reverse( array_filter( array_map( 'absint', $viewed_products ) ) );
return $viewed_products;
}
}
require get_template_directory() . '/inc/woocommerce/functions/shop-loop.php';
/**
* Electro Wide. Set Columns Wide attribute
*/
add_action( 'woocommerce_shortcode_before_products_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_sale_products_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_best_selling_products_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_top_rated_products_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_product_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_product_cat_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_product_category_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_recent_products_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_featured_products_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_product_attribute_loop', 'electro_set_columns_wide_loop_prop' );
add_action( 'woocommerce_shortcode_before_related_products_loop', 'electro_set_columns_wide_loop_prop' );
add_filter( 'shortcode_atts_products', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_sale_products', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_best_selling_products', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_top_rated_products', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_product', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_product_category', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_recent_products', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_featured_products', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_product_attribute', 'electro_add_columns_wide_atts', 10, 4 );
add_filter( 'shortcode_atts_related_products', 'electro_add_columns_wide_atts', 10, 4 );
function electro_set_columns_wide_loop_prop( $attr ) {
if ( isset( $attr['columns_wide'] ) ) {
wc_set_loop_prop( 'columns_wide', $attr['columns_wide'] );
}
}
function electro_add_columns_wide_atts( $out, $pairs, $atts, $shortcode ) {
if ( isset( $atts['columns_wide'] ) ) {
$out['columns_wide'] = $atts['columns_wide'];
}
return $out;
}