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;
?>
';
}
/**
* 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 );