'; } add_action( 'woocommerce_before_shop_loop_item', 'bosa_before_shop_loop_item', 9 ); /** * After shop loop item * @since Bosa 1.0.0 */ function bosa_after_shop_loop_item(){ echo ''; } add_action( 'woocommerce_after_shop_loop_item', 'bosa_after_shop_loop_item', 34 ); /** * Hide default page title * @since Bosa 1.0.0 */ function bosa_woo_show_page_title(){ return false; } add_filter( 'woocommerce_show_page_title', 'bosa_woo_show_page_title' ); /** * Change number or products per row. * @since Bosa 1.0.0 */ if ( !function_exists( 'bosa_loop_columns' ) ) { function bosa_loop_columns() { if( get_theme_mod( 'woocommerce_product_layout_type', 'product_layout_grid' ) == 'product_layout_grid' ){ return get_theme_mod( 'woocommerce_shop_product_column', 3 ); }elseif( get_theme_mod( 'woocommerce_product_layout_type', 'product_layout_grid' ) == 'product_layout_list' ){ return get_theme_mod( 'woocommerce_shop_list_column', 2 ); } } } add_filter( 'loop_shop_columns', 'bosa_loop_columns' ); /** * Add buttons in compare and wishlist * @since Bosa 1.0.0 */ if (!function_exists('bosa_compare_wishlist_buttons')) { function bosa_compare_wishlist_buttons() { $double = ''; $icon_layout = get_theme_mod( 'icon_group_layout', 'group_layout_one' ); if ( function_exists( 'yith_woocompare_constructor' ) && function_exists( 'YITH_WCWL' ) ) { $double = ' d-compare-wishlist'; } ?>
obj->add_product_url( $product_id ); ?>
'; /* .product-compare-wishlist */ } } /** * Change number of products that are displayed per page (shop page) * @since Bosa 1.0.0 */ function bosa_loop_shop_per_page( $cols ) { // $cols contains the current number of products per page based on the value stored on Options –> Reading // Return the number of products you wanna show per page. $cols = get_theme_mod( 'woocommerce_product_per_page', 9 ); return $cols; } add_filter( 'loop_shop_per_page', 'bosa_loop_shop_per_page', 20 ); /** * Check if WooCommerce is activated and is shop page. * * @return bool * @since Bosa 1.0.0 */ if( !function_exists( 'bosa_wooCom_is_shop' ) ){ function bosa_wooCom_is_shop() { if ( class_exists( 'woocommerce' ) ) { if ( is_shop() ) { return true; } }else{ return false; } } add_action( 'wp', 'bosa_wooCom_is_shop' ); } /** * Check if WooCommerce is activated and is cart page. * * @return bool * @since Bosa 1.0.0 */ if( !function_exists( 'bosa_wooCom_is_cart' ) ){ function bosa_wooCom_is_cart() { if ( class_exists( 'woocommerce' ) ) { if ( is_cart() ) { return true; } }else{ return false; } } add_action( 'wp', 'bosa_wooCom_is_cart' ); } /** * Check if WooCommerce is activated and is checkout page. * * @return bool * @since Bosa 1.0.0 */ if( !function_exists( 'bosa_wooCom_is_checkout' ) ){ function bosa_wooCom_is_checkout() { if ( class_exists( 'woocommerce' ) ) { if ( is_checkout() ) { return true; } }else{ return false; } } add_action( 'wp', 'bosa_wooCom_is_checkout' ); } /** * Check if WooCommerce is activated and is account page. * * @return bool * @since Bosa 1.0.0 */ if( !function_exists( 'bosa_wooCom_is_account_page' ) ){ function bosa_wooCom_is_account_page() { if ( class_exists( 'woocommerce' ) ) { if ( is_account_page() ) { return true; } }else{ return false; } } add_action( 'wp', 'bosa_wooCom_is_account_page' ); } /** * Modify excerpt item priority to last in product detail page. * @since Bosa 1.2.6 */ remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20 ); add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 55 ); /** * Change column number of related products in product detail page. * * @return array * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_related_products_args' ) ){ add_filter( 'woocommerce_output_related_products_args', 'bosa_related_products_args', 20 ); function bosa_related_products_args( $args ) { $args[ 'columns'] = 3; return $args; } } /** * Check if WooCommerce is activated and is product detail page. * * @return bool * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_wooCom_is_product_page' ) ){ function bosa_wooCom_is_product_page() { if ( class_exists( 'woocommerce' ) ) { if ( is_product() ) { return true; } }else{ return false; } } add_action( 'wp', 'bosa_wooCom_is_product_page' ); } /** * Adds breadcrumb before product title in product detail page. * * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_product_detail_breadcrumb' ) ){ add_action( 'woocommerce_single_product_summary', 'bosa_product_detail_breadcrumb', 1 ); function bosa_product_detail_breadcrumb(){ if( bosa_wooCom_is_product_page() ){ if( ( get_theme_mod( 'breadcrumbs_controls', 'show_in_all_page_post' ) == 'disable_in_all_pages' || get_theme_mod( 'breadcrumbs_controls', 'show_in_all_page_post' ) == 'show_in_all_page_post' ) && !get_theme_mod( 'disable_single_product_breadcrumbs', false ) ){ bosa_breadcrumb_wrap(); } } } } /** * Add left sidebar to product detail page. * * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_woo_product_detail_left_sidebar' ) ){ function bosa_woo_product_detail_left_sidebar( $sidebarColumnClass ){ if( !get_theme_mod( 'disable_sidebar_woocommerce_page', false ) ){ if ( get_theme_mod( 'sidebar_settings', 'right' ) == 'left' ){ if( is_active_sidebar( 'woocommerce-left-sidebar') ){ ?> $sidebarClass, 'sidebarColumnClass' => $sidebarColumnClass, ); return $colClasses; } } /** * Add wrapper product gallery in product detail page. * * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_woocommerce_before_single_product_summary' ) ){ add_action( 'woocommerce_before_single_product_summary', 'bosa_woocommerce_before_single_product_summary', 5 ); function bosa_woocommerce_before_single_product_summary(){ echo '
'; } } /** * Add left sidebar before tabs in product detail page. * * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_woocommerce_after_single_product_summary' ) ){ add_action( 'woocommerce_after_single_product_summary', 'bosa_woocommerce_after_single_product_summary', 5 ); function bosa_woocommerce_after_single_product_summary(){ $getSidebarClass = bosa_get_sidebar_class(); echo '
';/* .product-detail-wrapper */ echo '
'; bosa_woo_product_detail_left_sidebar( $getSidebarClass[ 'sidebarColumnClass' ] ); echo '
'; } } /** * Add right sidebar before tabs in product detail page. * * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_woocommerce_after_single_product' ) ){ add_action( 'woocommerce_after_single_product', 'bosa_woocommerce_after_single_product' ); function bosa_woocommerce_after_single_product(){ $getSidebarClass = bosa_get_sidebar_class(); bosa_woo_product_detail_right_sidebar( $getSidebarClass[ 'sidebarColumnClass' ] ); echo '
';/* col woocommerce tabs and related products */ echo '
';/* .row */ } } /** * Add icon and tooltip text for Yith Woocommerce Quick View. * * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_yith_add_quick_view_button_html' ) ){ add_filter( 'yith_add_quick_view_button_html', 'bosa_yith_add_quick_view_button_html', 10, 3 ); function bosa_yith_add_quick_view_button_html( $button, $label, $product ){ $product_id = $product->get_id(); $button = '
' . $label . '
'; return $button; } } /** * Modify $label for Yith Woocommerce Wishlist. * * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_yith_wcwl_button_label' ) ){ add_filter( 'yith_wcwl_button_label', 'bosa_yith_wcwl_button_label' ); function bosa_yith_wcwl_button_label( $label_option ){ $label_option = ''.$label_option.''; return $label_option; } } /** * Modify $browse_wishlist_text for Yith Woocommerce Wishlist. * * @since Bosa 1.2.6 */ if( !function_exists( 'bosa_yith_wcwl_browse_wishlist_label' ) ){ add_filter( 'yith_wcwl_browse_wishlist_label', 'bosa_yith_wcwl_browse_wishlist_label' ); function bosa_yith_wcwl_browse_wishlist_label( $browse_wishlist_text ){ if( strpos( $browse_wishlist_text, 'info-tooltip' ) === false ){ $browse_wishlist_text = ''.$browse_wishlist_text.''; } return $browse_wishlist_text; } } /** * Loop product structure */ function bosa_loop_product_structure() { $elements = array( 'woocommerce_template_loop_product_title', 'woocommerce_template_loop_price' ); $layout = get_theme_mod( 'woocommerce_product_card_layout', 'product_layout_one' ); if( 'product_layout_one' == $layout ) { $loop_count = 0; foreach ( $elements as $element ) { call_user_func( $element ); if( $loop_count < 1 ){ woocommerce_template_loop_rating(); } $loop_count++; } } else { $elements = array_diff( $elements, array( 'woocommerce_template_loop_price' ) ); echo '
'; echo '
'; foreach ( $elements as $element ) { call_user_func( $element ); } woocommerce_template_loop_rating(); echo '
'; echo '
'; woocommerce_template_loop_price(); echo '
'; echo '
'; } } /** * Adds cart layout div to add-to-cart loop structure. */ function bosa_cart_button_loop_structure() { $cart_button_layout = get_theme_mod( 'woocommerce_add_to_cart_button', 'cart_button_two' ); echo '
'; woocommerce_template_loop_add_to_cart(); echo '
'; } /** * Inserts the opening figure tag inside product-inner div. */ if( !function_exists( 'bosa_product_inner_figure_start' ) ){ function bosa_product_inner_figure_start(){ echo '
'; } } /** * Inserts the closing figure tag. */ if( !function_exists( 'bosa_product_inner_figure_close' ) ){ function bosa_product_inner_figure_close(){ echo '
'; } } /** * Inserts the opening div tag after product-inner div. */ if( !function_exists( 'bosa_product_inner_contents_start' ) ){ function bosa_product_inner_contents_start(){ $product_card_text_alignment = get_theme_mod( 'woocommerce_product_card_text_alignment', 'text-center' ); echo '
'; } } /** * Inserts the closing div tag for product-inner-content div. */ if( !function_exists( 'bosa_product_inner_contents_close' ) ){ function bosa_product_inner_contents_close(){ echo '
'; } } /** * Hook into Woocommerce */ add_action( 'wp', 'bosa_woocommerce_hooks' ); function bosa_woocommerce_hooks() { $cart_button_layout = get_theme_mod( 'woocommerce_add_to_cart_button', 'cart_button_two' ); remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title' ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price' ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 ); add_action( 'woocommerce_before_shop_loop_item', 'bosa_product_inner_figure_start', 9 ); add_action( 'woocommerce_after_shop_loop_item', 'bosa_product_inner_figure_close', 20 ); add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_open', 29 ); //Add elements from sortable option add_action( 'woocommerce_after_shop_loop_item', 'bosa_loop_product_structure', 30 ); add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 31 ); add_action( 'woocommerce_after_shop_loop_item', 'bosa_product_inner_contents_start', 25 ); add_action( 'woocommerce_after_shop_loop_item', 'bosa_product_inner_contents_close', 33 ); if( $cart_button_layout == 'cart_button_one' ){ remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' ); }elseif( $cart_button_layout == 'cart_button_two' ){ remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' ); add_action( 'woocommerce_after_shop_loop_item', 'bosa_cart_button_loop_structure', 32 ); }elseif( $cart_button_layout == 'cart_button_three' ){ remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' ); add_action( 'woocommerce_after_shop_loop_item', 'bosa_cart_button_loop_structure', 32 ); }elseif( $cart_button_layout == 'cart_button_four' ){ remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' ); add_action( 'woocommerce_after_shop_loop_item', 'bosa_cart_button_loop_structure', 19 ); } // Single Products if( bosa_wooCom_is_product_page() ){ $disable_single_product_tabs = get_theme_mod( 'disable_single_product_tabs', false ); if( $disable_single_product_tabs ){ remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs' ); } $disable_single_product_related_products = get_theme_mod( 'disable_single_product_related_products', false ); if( $disable_single_product_related_products ){ remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 ); } } } /** * Add to cart button html. */ function bosa_filter_loop_add_to_cart( $button, $product, $args ) { global $product; //Return if not button layout 4 $cart_button_layout = get_theme_mod( 'woocommerce_add_to_cart_button', 'cart_button_two' ); if ( $cart_button_layout != 'cart_button_four' ) { return $button; } $text = ''; $button = sprintf( '%s', esc_url( $product->add_to_cart_url() ), esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 ), esc_attr( isset( $args['class'] ) ? $args['class'] : 'button' ), isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '', $text ); return $button; } add_filter( 'woocommerce_loop_add_to_cart_link', 'bosa_filter_loop_add_to_cart', 10, 3 ); /** * Sales badge text */ function bosa_sale_badge_tag( $html, $post, $product ) { if ( !$product->is_on_sale() ) { return; } $badge_text = get_theme_mod( 'woocommerce_sale_badge_text', 'Sale!' ); $enable_sale_percent = get_theme_mod( 'enable_sale_badge_percent', false ); $percent_text = get_theme_mod( 'woocommerce_sale_badge_percent', '-{value}%' ); if( !$enable_sale_percent ){ $badge = '' . esc_html( $badge_text ) . ''; } else{ if( $product->is_type( 'variable' ) ){ $percentages = array(); // Get all variation prices $prices = $product->get_variation_prices(); // Loop through variation prices foreach( $prices['price'] as $key => $price ){ // Only on sale variations if( $prices['regular_price'][$key] !== $price ){ // Calculate and set in the array the percentage for each variation on sale $percentages[] = round( 100 - ( floatval($prices['sale_price'][$key]) / floatval($prices['regular_price'][$key]) * 100 ) ); } } $percentage = max( $percentages ); }elseif( $product->is_type('grouped') ){ $percentages = array(); $children_ids = $product->get_children(); foreach( $children_ids as $child_id ){ $child_product = wc_get_product($child_id); $regular_price = (float) $child_product->get_regular_price(); $sale_price = (float) $child_product->get_sale_price(); if ( $sale_price != 0 || ! empty($sale_price) ) { $percentages[] = round(100 - ($sale_price / $regular_price * 100)); } } $percentage = max($percentages) ; }else{ $regular_price = (float) $product->get_regular_price(); $sale_price = (float) $product->get_sale_price(); if( $sale_price != 0 || ! empty($sale_price) ){ $percentage = round(100 - ($sale_price / $regular_price * 100) ); }else{ return $html; } } $percent_text = str_replace( '{value}', $percentage, $percent_text ); $badge = '' . esc_html( $percent_text ) . ''; } return $badge; } add_filter( 'woocommerce_sale_flash', 'bosa_sale_badge_tag', 10, 3 ); if( !function_exists('bosa_add_woocommerce_product_class') ){ /** * WooCommerce Post Class filter. * */ function bosa_add_woocommerce_product_class( $classes, $product ){ if( !bosa_wooCom_is_shop() ){ return $classes; } if( get_theme_mod( 'woocommerce_product_layout_type', 'product_layout_grid' ) == 'product_layout_grid' ){ $classes[] = 'product-grid'; }elseif( get_theme_mod( 'woocommerce_product_layout_type', 'product_layout_grid' ) == 'product_layout_list' ){ $classes[] = 'product-list'; } return $classes; } } add_filter( 'woocommerce_post_class', 'bosa_add_woocommerce_product_class', 10, 2 ); add_filter( 'woocommerce_single_product_zoom_options', 'bosa_single_product_zoom_options' ); if( !function_exists('bosa_single_product_zoom_options') ){ /** * WooCommerce single product zoom magnification level. * */ function bosa_single_product_zoom_options( $zoom_options ) { // Changing the magnification level: $magnification = get_theme_mod( 'single_product_iamge_magnify', 1 ); $zoom_options['magnify'] = $magnification; return $zoom_options; } }