' . implode(' ', $components) . ''; } return ''; } function blocksy_get_product_card_categories() { if ( get_theme_mod('has_product_categories', 'no') === 'yes' ) { return blocksy_post_meta([ [ 'id' => 'categories', 'enabled' => true ] ], [ 'attr' => get_theme_mod( 'has_product_categories', 'no' ) !== 'yes' ? ['data-customize-hide' => ''] : [] ]); } return ''; } $action_to_hook = 'wp'; if (wp_doing_ajax()) { $action_to_hook = 'init'; } add_action($action_to_hook, function () { if (! get_option('woocommerce_thumbnail_cropping', null)) { update_option('woocommerce_thumbnail_cropping', 'custom'); update_option('woocommerce_thumbnail_cropping_custom_width', 3); update_option('woocommerce_thumbnail_cropping_custom_height', 4); } $products_layout = blocksy_get_products_listing_layout(); if ( get_theme_mod('has_star_rating', 'yes') !== 'yes' && !is_product() ) { add_filter( 'woocommerce_product_get_rating_html', function ($html) { return str_replace( 'class="star-rating"', 'class="star-rating" data-customize-hide', $html ); } ); } remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5); if ($products_layout !== 'type-1') { // Products cards remove_action('woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10); remove_action('woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10); remove_action('woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10); remove_action('woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10); remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10); remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5); remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10); // Category cards remove_action('woocommerce_before_subcategory_title', 'woocommerce_subcategory_thumbnail'); } // Cards type 1 if ($products_layout === 'type-1') { // Products cards remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail' ); remove_action('woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10); if (get_theme_mod('has_product_action_button', 'yes') === 'no') { remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 ); } if (get_theme_mod('has_star_rating', 'yes') === 'yes') { add_action('woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_rating', 20); } add_action( 'woocommerce_before_shop_loop_item_title', function () { global $product; if ($product->is_in_stock()) { if (get_theme_mod('has_sale_badge', 'yes') === 'yes') { woocommerce_show_product_loop_sale_flash(); } } else { echo blocksy_get_woo_out_of_stock_badge([ 'location' => 'archive' ]); } $gallery_images = blocksy_product_get_gallery_images( $product ); $hover_value = get_theme_mod('product_image_hover', 'none'); $has_archive_video_thumbnail = get_theme_mod( 'has_archive_video_thumbnail', 'no' ); $image = blocksy_image([ 'no_image_type' => 'woo', 'attachment_id' => $product->get_image_id(), 'post_id' => $product->get_id(), 'other_images' => count($gallery_images) > 1 && $hover_value === 'swap' ? [ $gallery_images[1] ] : [], 'size' => 'woocommerce_thumbnail', 'ratio' => blocksy_get_woocommerce_ratio(), 'tag_name' => 'span', 'display_video' => $has_archive_video_thumbnail === 'yes' ]); echo apply_filters( 'woocommerce_product_get_image', $image, $product, 'woocommerce_thumbnail', [], '', $image ); do_action('blocksy:woocommerce:product-card:title:before'); } ); add_action('woocommerce_shop_loop_item_title', function () { do_action('blocksy:woocommerce:product-card:title:after'); }, 20); add_action('woocommerce_after_shop_loop_item_title', function () { do_action('blocksy:woocommerce:product-card:price:before'); }, 1); add_action('woocommerce_after_shop_loop_item_title', function () { do_action('blocksy:woocommerce:product-card:price:after'); }, 50); add_action( 'woocommerce_after_shop_loop_item', function () { echo blocksy_get_product_card_categories(); do_action('blocksy:woocommerce:product-card:actions:before'); echo '
'; }, 6 ); add_action( 'woocommerce_after_shop_loop_item', function () { echo '
'; do_action('blocksy:woocommerce:product-card:actions:after'); echo blocksy_output_product_toolbar(); }, 20 ); // Categories cards remove_action('woocommerce_before_subcategory_title', 'woocommerce_subcategory_thumbnail'); add_action( 'woocommerce_before_subcategory_title', function ($category) { $thumbnail_id = get_term_meta( $category->term_id, 'thumbnail_id', true ); echo blocksy_image([ 'attachment_id' => $thumbnail_id, 'size' => 'woocommerce_thumbnail', 'ratio' => blocksy_get_woocommerce_ratio(), 'tag_name' => 'span', 'no_image_type' => 'woo' ]); } ); } // Cards type 2 if ($products_layout === 'type-2') { add_action( 'woocommerce_before_shop_loop_item', function () { global $product; echo '
'; do_action('blocksy:woocommerce:product-card:thumbnail:start'); if ($product->is_in_stock()) { if (get_theme_mod('has_sale_badge', 'yes') === 'yes') { woocommerce_show_product_loop_sale_flash(); } } else { echo blocksy_get_woo_out_of_stock_badge([ 'location' => 'archive' ]); } echo blocksy_output_product_toolbar(); $gallery_images = blocksy_product_get_gallery_images( $product ); $hover_value = get_theme_mod('product_image_hover', 'none'); $has_archive_video_thumbnail = get_theme_mod( 'has_archive_video_thumbnail', 'no' ); $image = blocksy_image([ 'no_image_type' => 'woo', 'attachment_id' => $product->get_image_id(), 'post_id' => $product->get_id(), 'other_images' => count($gallery_images) > 1 && $hover_value === 'swap' ? [ $gallery_images[1] ] : [], 'size' => 'woocommerce_thumbnail', 'ratio' => blocksy_get_woocommerce_ratio(), 'tag_name' => 'a', 'html_atts' => [ 'href' => apply_filters( 'woocommerce_loop_product_link', get_permalink($product->get_id()), $product ), 'aria-label' => $product->get_name(), ], 'display_video' => $has_archive_video_thumbnail === 'yes' ]); echo apply_filters( 'woocommerce_product_get_image', $image, $product, 'woocommerce_thumbnail', [], '', $image ); do_action('blocksy:woocommerce:product-card:thumbnail:end'); echo '
'; do_action('blocksy:woocommerce:product-card:title:before'); woocommerce_template_loop_product_link_open(); woocommerce_template_loop_product_title(); woocommerce_template_loop_product_link_close(); do_action('blocksy:woocommerce:product-card:title:after'); echo blocksy_get_product_card_categories(); if ( get_theme_mod('has_star_rating', 'yes') === 'yes' ) { woocommerce_template_loop_rating(); } do_action('blocksy:woocommerce:product-card:actions:before'); echo '
'; woocommerce_template_loop_price(); if (get_theme_mod('has_product_action_button', 'yes') === 'yes') { woocommerce_template_loop_add_to_cart(); } echo '
'; do_action('blocksy:woocommerce:product-card:actions:after'); } ); add_action( 'woocommerce_before_subcategory', function ($category) { $thumbnail_id = get_term_meta($category->term_id, 'thumbnail_id', true); echo '
'; echo blocksy_image([ 'no_image_type' => 'woo', 'attachment_id' => $thumbnail_id, 'size' => 'woocommerce_thumbnail', 'ratio' => blocksy_get_woocommerce_ratio(), 'tag_name' => 'a', 'html_atts' => [ 'href' => get_term_link($category, 'product_cat') ] ]); echo '
'; }, 5 ); } });