<?php if ( ! defined( 'WOODMART_THEME_DIR' ) ) exit( 'No direct script access allowed' ); /** * ------------------------------------------------------------------------------------------------ * Categories grid shortcode * ------------------------------------------------------------------------------------------------ */ if( ! function_exists( 'woodmart_shortcode_categories' ) ) { function woodmart_shortcode_categories( $atts, $content ) { $extra_class = $carousel_classes = ''; $parsed_atts = shortcode_atts( array_merge( woodmart_get_owl_atts(), array( // Query. 'data_source' => 'custom_query', 'number' => null, 'orderby' => '', 'order' => 'ASC', 'ids' => '', 'type' => 'grid', 'images' => 'yes', 'product_count' => 'yes', 'mobile_accordion' => 'yes', 'shop_categories_ancestors' => 'no', 'show_categories_neighbors' => 'no', // Layout. 'columns' => '4', 'hide_empty' => 'yes', 'parent' => '', 'style' => 'default', 'title' => esc_html__( 'Categories', 'woodmart' ), // Design. 'categories_design' => woodmart_get_opt( 'categories_design' ), 'color_scheme' => woodmart_get_opt( 'categories_color_scheme' ), 'categories_with_shadow' => woodmart_get_opt( 'categories_with_shadow' ), 'nav_alignment' => 'left', 'nav_color_scheme' => '', 'img_size' => '', 'image_container_width' => '', // Extra. 'spacing' => 30, 'lazy_loading' => 'no', 'scroll_carousel_init' => 'no', 'el_class' => '', 'css' => '', 'woodmart_css_id' => '', // Width option. 'width_desktop' => '', 'width_tablet' => '', 'width_mobile' => '', 'slides_per_view' => '3', 'slides_per_view_tablet' => 'auto', 'slides_per_view_mobile' => 'auto', ) ), $atts ); extract( $parsed_atts ); $extra_class = ''; $carousel_classes = ''; $extra_wrapper_classes = 'wd-categories-wrap wd-wpb'; $extra_wrapper_classes .= apply_filters( 'vc_shortcodes_css_class', '', '', $parsed_atts ); if ( $parsed_atts['css'] ) { $extra_wrapper_classes .= ' ' . vc_shortcode_custom_css_class( $parsed_atts['css'] ); } if ( ! empty( $img_size ) ) { woodmart_set_loop_prop( 'product_categories_image_size', $img_size ); } if ( 'default' === $categories_design || 'alt' === $categories_design || 'center' === $categories_design || 'replace-title' === $categories_design ) { woodmart_set_loop_prop( 'old_structure', true ); } if ( 'alt' === $categories_design && ! empty( $image_container_width ) ) { $extra_class .= ' wd-img-width'; } if ( isset( $ids ) ) { $ids = explode( ',', $ids ); $ids = array_map( 'trim', $ids ); } else { $ids = array(); } $hide_empty = ( $hide_empty == 'yes' || $hide_empty == 1 ) ? 1 : 0; // get terms and workaround WP bug with parents/pad counts. $args = array( 'taxonomy' => 'product_cat', 'order' => $order, 'hide_empty' => $hide_empty, 'include' => $ids, 'pad_counts' => true, 'child_of' => $parent, ); if ( $orderby ) $args['orderby'] = $orderby; if ( 'navigation' === $type ) { $wrapper_classes = ' text-' . woodmart_vc_get_control_data( $nav_alignment, 'desktop' ); $wrapper_classes .= ' wd-nav-product-cat-wrap'; if ( 'yes' === $mobile_accordion ) { woodmart_enqueue_inline_style( 'woo-categories-loop-nav-mobile-accordion' ); $wrapper_classes .= ' wd-nav-accordion-mb-on'; } if ( $nav_color_scheme ) { $wrapper_classes .= ' color-scheme-' . $nav_color_scheme; } ob_start(); ?> <div class="<?php echo esc_attr( $extra_wrapper_classes ); ?>"> <div class="<?php echo esc_attr( $wrapper_classes ); ?>"> <?php woodmart_product_categories_nav( $args, $parsed_atts ); ?> </div> </div> <?php return ob_get_clean(); } if ( 'wc_query' === $data_source ) { if ( 'yes' !== $hide_empty ) { add_filter( 'woocommerce_product_subcategories_hide_empty', '__return_false' ); } $product_categories = woocommerce_get_product_subcategories( is_product_category() ? get_queried_object_id() : 0 ); } else { $product_categories = get_terms( 'product_cat', $args ); } if ( '' !== $parent ) { $product_categories = wp_list_filter( $product_categories, array( 'parent' => $parent ) ); } if ( $hide_empty ) { foreach ( $product_categories as $key => $category ) { if ( $category->count == 0 ) { unset( $product_categories[ $key ] ); } } } if ( $number ) { $product_categories = array_slice( $product_categories, 0, $number ); } if ( woodmart_is_compressed_data( $columns ) ) { $columns_desktop = woodmart_vc_get_control_data( $columns, 'desktop' ); $columns_tablet = woodmart_vc_get_control_data( $columns, 'tablet' ); $columns_mobile = woodmart_vc_get_control_data( $columns, 'mobile' ); } else { $columns_desktop = absint( $columns ); } if ( 'masonry' === $style ) { $extra_class .= ' categories-masonry'; wp_enqueue_script( 'imagesloaded' ); woodmart_enqueue_js_library( 'isotope-bundle' ); woodmart_enqueue_js_script( 'shop-masonry' ); } woodmart_set_loop_prop( 'product_categories_color_scheme', $color_scheme ); woodmart_set_loop_prop( 'product_categories_is_element', true ); woodmart_set_loop_prop( 'products_different_sizes', false ); if ( 'masonry-first' === $style ) { woodmart_set_loop_prop( 'products_different_sizes', array( 1 ) ); $extra_class .= ' categories-masonry'; $columns_desktop = 4; wp_enqueue_script( 'imagesloaded' ); woodmart_enqueue_js_library( 'isotope-bundle' ); woodmart_enqueue_js_script( 'shop-masonry' ); } if ( 'carousel' === $style ) { $extra_class .= ' wd-carousel-spacing-' . $spacing; } else { $extra_class .= ' wd-spacing-' . $spacing; } $extra_class .= $el_class ? ' ' . $el_class : ''; if ( empty( $categories_design ) || $categories_design == 'inherit' ) $categories_design = woodmart_get_opt( 'categories_design' ); woodmart_set_loop_prop( 'product_categories_design', $categories_design ); woodmart_set_loop_prop( 'product_categories_shadow', $categories_with_shadow ); woodmart_set_loop_prop( 'product_categories_style', $style ); if ( isset( $columns_desktop ) ) { woodmart_set_loop_prop( 'products_columns', $columns_desktop ); } if ( isset( $columns_tablet ) ) { woodmart_set_loop_prop( 'products_columns_tablet', $columns_tablet ); } if ( isset( $columns_mobile ) ) { woodmart_set_loop_prop( 'products_columns_mobile', $columns_mobile ); } $carousel_id = 'carousel-' . rand( 100, 999 ); ob_start(); if ( $lazy_loading == 'yes' ) { woodmart_lazy_loading_init( true ); woodmart_enqueue_inline_style( 'lazy-loading' ); } if ( 'alt' !== $categories_design && 'inherit' !== $categories_design ) { woodmart_enqueue_inline_style( 'categories-loop-' . $categories_design ); } if ( 'center' === $categories_design ) { woodmart_enqueue_inline_style( 'categories-loop-center' ); } if ( 'replace-title' === $categories_design ) { woodmart_enqueue_inline_style( 'categories-loop-replace-title' ); } if ( 'mask-subcat' === $categories_design ) { woodmart_enqueue_inline_style( 'woo-categories-loop-mask-subcat' ); } if ( 'masonry' === $style || 'masonry-first' === $style || 'carousel' === $style ) { woodmart_enqueue_inline_style( 'woo-categories-loop-layout-masonry' ); } if ( woodmart_loop_prop( 'old_structure' ) ) { woodmart_enqueue_inline_style( 'categories-loop' ); } else { woodmart_enqueue_inline_style( 'woo-categories-loop' ); } if ( $product_categories ) { if ( 'alt' !== $categories_design && 'inherit' !== $categories_design ) { woodmart_enqueue_inline_style( 'categories-loop-' . $categories_design ); } if ( $style == 'carousel' ) { woodmart_enqueue_inline_style( 'owl-carousel' ); $custom_sizes = apply_filters( 'woodmart_categories_shortcode_custom_sizes', false ); $parsed_atts['carousel_id'] = $carousel_id; $parsed_atts['post_type'] = 'product'; $parsed_atts['custom_sizes'] = $custom_sizes; if ( $scroll_carousel_init == 'yes' ) { woodmart_enqueue_js_library( 'waypoints' ); $carousel_classes .= ' scroll-init'; } if ( woodmart_get_opt( 'disable_owl_mobile_devices' ) ) { $carousel_classes .= ' disable-owl-mobile'; } if ( ( 'auto' !== $slides_per_view_tablet && ! empty( $slides_per_view_tablet ) ) || ( 'auto' !== $slides_per_view_mobile && ! empty( $slides_per_view_mobile ) ) ) { $parsed_atts['custom_sizes'] = array( 'desktop' => $slides_per_view, 'tablet_landscape' => $slides_per_view_tablet, 'tablet' => $slides_per_view_mobile, 'mobile' => $slides_per_view_mobile, ); } $carousel_classes .= ' categories-style-' . $style; ?> <div class="<?php echo esc_attr( $extra_wrapper_classes ); ?>"> <div id="<?php echo esc_attr( $carousel_id ); ?>" class="products woocommerce wd-carousel-container <?php echo esc_attr( $carousel_classes ); ?> <?php echo esc_attr( $extra_class ); ?>" <?php echo woodmart_get_owl_attributes( $parsed_atts ); ?>> <div class="owl-carousel wd-owl carousel-items <?php echo woodmart_owl_items_per_slide( $slides_per_view, array(), 'product', false, $parsed_atts['custom_sizes'] ); ?>"> <?php foreach ( $product_categories as $category ): ?> <?php wc_get_template( 'content-product-cat.php', array( 'category' => $category ) ); ?> <?php endforeach; ?> </div> </div> <!-- end #<?php echo esc_html( $carousel_id ); ?> --> </div> <?php } else { ?> <div class="<?php echo esc_attr( $extra_wrapper_classes ); ?>"> <div class="products woocommerce row categories-style-<?php echo esc_attr( $style . $extra_class ); ?> columns-<?php echo esc_attr( $columns_desktop ); ?>"> <?php foreach ( $product_categories as $category ) { wc_get_template( 'content-product-cat.php', array( 'category' => $category ) ); } ?> </div> </div> <?php } } woodmart_reset_loop(); if ( function_exists( 'woocommerce_reset_loop' ) ) woocommerce_reset_loop(); if ( $lazy_loading == 'yes' ) { woodmart_lazy_loading_deinit(); } return ob_get_clean(); } }