'; } add_action( 'woocommerce_before_shop_loop_item', 'virtue_add_product_loop_open', 1 ); // Elementor Builder. add_action( 'kadence_woocommerce_loop_builder_before', 'virtue_add_product_loop_open', 1 ); /** * Product Class output * * @param mixed $class the added classes. * @param mixed $product the product object or ID. */ function virtue_get_product_class( $class = null, $product = null ) { if ( version_compare( WC_VERSION, '3.4', '>' ) ) { $classes = wc_get_product_class( '', $product ); } else { $classes = array(); } if ( $class ) { if ( ! is_array( $class ) ) { $class = preg_split( '#\s+#', $class ); } $classes = array_map( 'esc_attr', $class ); } return array_filter( array_unique( $classes ) ); } /** * Woocommerce_after_shop_loop_item */ function virtue_add_product_loop_close() { echo ''; } add_action( 'woocommerce_after_shop_loop_item', 'virtue_add_product_loop_close', 100 ); add_action( 'kadence_woocommerce_loop_builder_after', 'virtue_add_product_loop_close', 100 ); function virtue_woocommerce_archive_content_wrap_start() { echo '
'; } add_action( 'woocommerce_shop_loop_item_title', 'virtue_woocommerce_archive_content_wrap_start', 5 ); function virtue_woocommerce_archive_title_wrap_start() { echo '
'; } add_action( 'woocommerce_shop_loop_item_title', 'virtue_woocommerce_archive_title_wrap_start', 6 ); // Wrap the title in a link add_action( 'woocommerce_shop_loop_item_title', 'virtue_woocommerce_archive_title_link_start', 7 ); function virtue_woocommerce_archive_title_link_start() { echo ''; } // Remove the woocommerce added title remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 ); // Add the virtue product title add_action( 'woocommerce_shop_loop_item_title', 'virtue_woocommerce_template_loop_product_title', 10); function virtue_woocommerce_template_loop_product_title() { echo '
' . get_the_title() . '
'; } // Close out the title wapped link add_action( 'woocommerce_shop_loop_item_title', 'virtue_woocommerce_archive_title_link_end', 15 ); function virtue_woocommerce_archive_title_link_end() { echo '
'; } function virtue_woocommerce_archive_excerpt() { if ( apply_filters( 'kadence_product_archive_excerpt', true ) ) : global $post ?>
post_excerpt ){ echo apply_filters( 'archive_woocommerce_short_description', $post->post_excerpt ); } else { the_excerpt(); } ?>
'; } add_action( 'woocommerce_shop_loop_item_title', 'virtue_woocommerce_archive_title_wrap_end', 50 ); function virtue_after_shop_loop_wrap_end() { echo '
'; } add_action( 'woocommerce_after_shop_loop_item', 'virtue_after_shop_loop_wrap_end', 50 ); // Shop Page Image link open add_action( 'woocommerce_before_shop_loop_item_title', 'virtue_woocommerce_image_link_open', 5 ); function virtue_woocommerce_image_link_open() { echo ''; } // Shop Page Image link Close add_action( 'woocommerce_before_shop_loop_item_title', 'virtue_woocommerce_image_link_close', 50 ); function virtue_woocommerce_image_link_close() { echo ''; } // Remove woocommerce added archive image remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 ); // Add virtue archive image add_action( 'woocommerce_before_shop_loop_item_title', 'virtue_woocommerce_template_loop_product_thumbnail', 10 ); function virtue_woocommerce_template_loop_product_thumbnail() { global $virtue, $woocommerce_loop, $post; // Store column count for displaying the grid if ( empty( $woocommerce_loop['columns'] ) ) { $woocommerce_loop['columns'] = apply_filters( 'loop_shop_columns', 4 ); } if ($woocommerce_loop['columns'] == '3'){ $productimgwidth = 365; $productimgheight = 365; } else { $productimgwidth = 268; $productimgheight = 268; } if(isset($virtue[ 'product_img_resize' ]) && $virtue[ 'product_img_resize' ] == 0) { $resizeimage = 0; } else { $resizeimage = 1; } if($resizeimage == 1) { if ( has_post_thumbnail() ) { $image_id = get_post_thumbnail_id( $post->ID ); $img = virtue_get_image_array( $productimgwidth, $productimgheight, true, null, null, $image_id ); if( empty( $img[ 'alt' ] ) ) { $img[ 'alt' ] = get_the_title(); } ob_start(); ?> class="attachment-shop_catalog size- wp-post-image" alt=""> ID, $image_id, array($productimgwidth, $productimgheight), $attr = ''); // WPCS: XSS ok. } elseif ( woocommerce_placeholder_img_src() ) { echo woocommerce_placeholder_img( 'shop_catalog' ); // WPCS: XSS ok. } } else { echo '
'; echo woocommerce_template_loop_product_thumbnail(); // WPCS: XSS ok. echo '
'; } } // Remove woocommerce archive product links (theme adds these) remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 ); // define the woocommerce_loop_add_to_cart_link callback add_filter('woocommerce_loop_add_to_cart_args', 'virtue_add_class_woocommerce_loop_add_to_cart_link', 10, 2); function virtue_add_class_woocommerce_loop_add_to_cart_link( $array, $product ) { $array['class'] .= ' kad-btn headerfont kad_add_to_cart'; return $array; } // Remove woocommerce category title remove_action( 'woocommerce_shop_loop_subcategory_title', 'woocommerce_template_loop_category_title', 10 ); // Add woocommerce category title: add_action( 'woocommerce_shop_loop_subcategory_title', 'virtue_woocommerce_template_loop_category_title', 10 ); function virtue_woocommerce_template_loop_category_title( $category ) { ?>
name ); if ( $category->count > 0 ) { echo wp_kses_post( apply_filters( 'woocommerce_subcategory_count_html', ' (' . $category->count . ')', $category ) ); } ?>
slug, 'product_cat' ) ) . '" class="kt-woo-category-links">'; } add_action( 'woocommerce_after_subcategory', 'virtue_woocommerce_template_loop_category_link_close', 10 ); function virtue_woocommerce_template_loop_category_link_close() { echo ''; } // Remove woo output of category images remove_action( 'woocommerce_before_subcategory_title', 'woocommerce_subcategory_thumbnail', 10 ); // Add theme output of category images add_action( 'woocommerce_before_subcategory_title', 'virtue_woocommerce_subcategory_thumbnail', 10 ); function virtue_woocommerce_subcategory_thumbnail( $category ) { global $woocommerce_loop, $virtue; if ( empty( $woocommerce_loop[ 'columns' ] ) ) { $woocommerce_loop[ 'columns' ] = apply_filters( 'loop_shop_columns', 4 ); } $product_cat_column = $woocommerce_loop['columns']; if ( $product_cat_column == '3' ){ $catimgwidth = 380; } else { $catimgwidth = 270; } if( isset( $virtue[ 'product_cat_img_ratio' ] ) ) { $img_ratio = $virtue[ 'product_cat_img_ratio' ]; } else { $img_ratio = 'widelandscape'; } if($img_ratio == 'portrait') { $tempcatimgheight = $catimgwidth * 1.35; $catimgheight = floor($tempcatimgheight); } else if($img_ratio == 'landscape') { $tempcatimgheight = $catimgwidth / 1.35; $catimgheight = floor($tempcatimgheight); } else if($img_ratio == 'square') { $catimgheight = $catimgwidth; } else { $tempcatimgheight = $catimgwidth / 2; $catimgheight = floor( $tempcatimgheight ); } if ( 'off' == $img_ratio ) { woocommerce_subcategory_thumbnail( $category ); } else { $thumbnail_id = get_term_meta( $category->term_id, 'thumbnail_id', true ); if ( ! empty( $thumbnail_id ) ) { $img = virtue_get_image_array( $catimgwidth, $catimgheight, true, null, null, $thumbnail_id, false ); echo '
'; echo '' . esc_attr( $img['alt'] ) . ''; echo '
'; } else { $cat_image = array( virtue_img_placeholder(), $catimgwidth, $catimgheight ); if ( $cat_image[0] ) { echo '
'; echo '' . esc_attr( $category->name ) . ''; echo '
'; } } } } /** * Add support for pre woo 3.3 */ function virtue_woo_cat_loop() { if ( version_compare( WC_VERSION, '3.3', '<' ) ) { if ( ! is_search() ) { echo '
'; woocommerce_product_subcategories(); echo '
'; } } } add_action( 'woocommerce_before_shop_loop', 'virtue_woo_cat_loop', 60 ); }