get_type(); } else { $prod_type = $product->product_type; } $prod_in_stock = $product->is_in_stock(); if ( function_exists( 'method_exists' ) && method_exists( $product, 'get_stock_status' ) ) { $prod_in_stock = $product->get_stock_status(); } if ( $product ) { $args = array(); $defaults = array( 'quantity' => 1, 'class' => implode( ' ', array_filter( array( 'button', 'product_type_' . $prod_type, $product->is_purchasable() && $prod_in_stock ? 'add_to_cart_button' : '', $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '', ) ) ), ); $args = apply_filters( 'woocommerce_loop_add_to_cart_args', wp_parse_args( $args, $defaults ), $product ); wc_get_template( 'inc/compatibility/woocommerce/add-to-cart.php', $args ); } } endif; /** * Refresh WooCommerce cart count instantly. * * @since Hestia 1.0 */ function hestia_woocommerce_header_add_to_cart_fragment( $fragments ) { global $woocommerce; $fragments['a.cart-contents'] = ''; $fragments['a.cart-contents'] .= ''; $fragments['a.cart-contents'] .= sprintf( /* translators: %d is number of items */ _n( '%d item', '%d items', absint( $woocommerce->cart->cart_contents_count ), 'hestia' ), absint( $woocommerce->cart->cart_contents_count ) ); $fragments['a.cart-contents'] .= ' - '; $fragments['a.cart-contents'] .= wp_kses( $woocommerce->cart->get_cart_total(), array( 'span' => array( 'class' => array(), ), ) ); $fragments['a.cart-contents'] .= ''; return $fragments; } /** * Change the layout before the shop page main content */ function hestia_woocommerce_before_main_content() { do_action( 'hestia_before_woocommerce_wrapper' ); $sidebar_layout = hestia_get_shop_sidebar_layout(); $wrapper_class = apply_filters( 'hestia_filter_woocommerce_content_classes', 'content-full col-md-12' ); ?>
'; do_action( 'hestia_woocommerce_custom_reposition_left_shop_elements' ); ?>
'; } /** * Change the layout after each single product listing */ function hestia_woocommerce_after_shop_loop_item() { echo ''; } /** * Change the layout of the thumbnail on single product listing */ function hestia_woocommerce_template_loop_product_thumbnail() { $thumbnail = function_exists( 'woocommerce_get_product_thumbnail' ) ? woocommerce_get_product_thumbnail() : ''; if ( empty( $thumbnail ) && function_exists( 'wc_placeholder_img' ) ) { $thumbnail = wc_placeholder_img(); } if ( ! empty( $thumbnail ) ) { ?>
ID, 'product_cat' ); $i = false; if ( ! empty( $product_categories ) && apply_filters( 'hestia_show_category_on_product_card', true ) ) { /** * Show only the first $nb_of_cat words. If the value is modified in hestia_shop_category_words filter with * something lower than 0 then it will display all categories. */ $nb_of_cat = apply_filters( 'hestia_shop_category_words', 2 ); $nb_of_cat = intval( $nb_of_cat ); $index = 0; if ( $nb_of_cat !== 0 ) { echo '
'; foreach ( $product_categories as $product_category ) { if ( $index < $nb_of_cat || $nb_of_cat < 0 ) { $product_cat_id = $product_category->term_id; $product_cat_name = $product_category->name; if ( ! empty( $product_cat_id ) && ! empty( $product_cat_name ) ) { if ( $i ) { echo ' , '; } echo '' . esc_html( $product_cat_name ) . ''; $i = true; } $index ++; } } echo '
'; } } ?>

- 1 ? hestia_limit_content( $title_in_words, $title_limit, ' ' ) : $title; ?>

post_excerpt ) : /** * Explode the excerpt in words by ' ' separator and show only the first 60 words. If the value is modified to -1 or lower in * a function hooked at hestia_shop_excerpt_words, then use the normal behavior from woocommece ( show post excerpt ) */ $excerpt_in_words = explode( ' ', $post->post_excerpt ); $excerpt_limit = apply_filters( 'hestia_shop_excerpt_words', 60 ); $excerpt_limit = intval( $excerpt_limit ); $limited_excerpt = $excerpt_limit > - 1 ? hestia_limit_content( $excerpt_in_words, $excerpt_limit, ' ' ) : $post->post_excerpt; ?>
'; } /** * Get shop sidebar layout. * * @return string */ function hestia_get_shop_sidebar_layout() { $hestia_page_sidebar_layout = apply_filters( 'hestia_sidebar_layout', get_theme_mod( 'hestia_page_sidebar_layout', 'full-width' ) ); if ( is_shop() ) { $pid = get_option( 'woocommerce_shop_page_id' ); if ( ! empty( $pid ) ) { $values = get_post_custom( $pid ); if ( array_key_exists( 'hestia_layout_select', $values ) ) { if ( $values['hestia_layout_select'][0] !== 'default' ) { $hestia_page_sidebar_layout = esc_attr( $values['hestia_layout_select'][0] ); } } } } return $hestia_page_sidebar_layout; } /** * Function to display sidebar on shop. * * @since 1.1.24 * @access public */ function hestia_shop_sidebar() { $hestia_page_sidebar_layout = hestia_get_shop_sidebar_layout(); $class_to_add = ''; if ( $hestia_page_sidebar_layout === 'sidebar-right' ) { $class_to_add = 'hestia-has-sidebar'; } if ( is_active_sidebar( 'sidebar-woocommerce' ) && ! is_singular( 'product' ) ) { ?> cart->get_cart_contents_count() > 0 ) ? '' . WC()->cart->get_cart_contents_count() . '' : '' ); ?>
'; } /** * Add after cart totals code for card. */ function hestia_woocommerce_after_cart_totals() { echo '
'; } /** * Add compatibility with WooCommerce Product Images customizer controls. * * Because there are no filters in WooCommerce to change the default values of those controls, * we have to update those controls in order to have the same image size as it was until now. * This function runs only once to update those controls. * * Even if there were filters, woocommerce does update_options in their plugin so if we change * the defaults it's equal with 0. */ function hestia_woocommerce_product_images_compatibility() { $execute = get_option( 'hestia_update_woocommerce_customizer_controls', false ); if ( $execute !== false ) { return; } update_option( 'woocommerce_thumbnail_cropping', 'custom' ); update_option( 'woocommerce_thumbnail_cropping_custom_width', '23' ); update_option( 'woocommerce_thumbnail_cropping_custom_height', '35' ); if ( class_exists( 'WC_Regenerate_Images' ) ) { $regenerate_obj = new WC_Regenerate_Images(); $regenerate_obj::init(); if ( method_exists( $regenerate_obj, 'maybe_regenerate_images' ) ) { $regenerate_obj::maybe_regenerate_images(); } elseif ( method_exists( $regenerate_obj, 'maybe_regenerate_images_option_update' ) ) { // Force woocommerce 3.3.1 to regenerate images $regenerate_obj::maybe_regenerate_images_option_update( 1, 2, '' ); } } update_option( 'hestia_update_woocommerce_customizer_controls', true ); } add_action( 'after_setup_theme', 'hestia_woocommerce_product_images_compatibility' ); /** * Move added to cart/view cart notice inside the product on product page */ function hestia_view_cart_notice() { if ( function_exists( 'woocommerce_output_all_notices' ) ) { remove_action( 'woocommerce_before_single_product', 'woocommerce_output_all_notices', 10 ); add_action( 'woocommerce_before_single_product_summary', 'woocommerce_output_all_notices', 10 ); /* Move notices position */ } else { remove_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 ); add_action( 'woocommerce_before_single_product_summary', 'wc_print_notices', 10 ); /* Move notices position */ } } add_action( 'after_setup_theme', 'hestia_view_cart_notice', 15 );