Tag Archives: WooCommerce

Add "Read more" to Product Short Description in WooCommerce

add_filter( 'woocommerce_short_description', 'wpcb_add_read_more_to_short_description' );
if ( ! function_exists( 'wpcb_add_read_more_to_short_description' ) ) {
    /**
     * wpcb_add_read_more_to_short_description.
     */
    function wpcb_add_read_more_to_short_description( $short_description ) {
        $words     = explode( ' ', $short_description );
        $num_words = 55;
        return ( sizeof( $words ) > $num_words ?
            implode( ' ', array_slice( $words, 0, $num_words ) ) .
                '<details><summary>Read more...</summary>' .
                    implode( ' ', array_slice( $words, $num_words, sizeof( $words ) ) ) . '</details>' :
            $short_description );
    }
}

Hide regular price for products on sale in WooCommerce

add_filter( 'woocommerce_get_price_html', 'wpcb_hide_regular_price_for_sale_products', 10, 2 );
if ( ! function_exists( 'wpcb_hide_regular_price_for_sale_products' ) ) {
    /**
     * wpcb_hide_regular_price_for_sale_products.
     *
     * @see  https://wpcodebook.com/snippets/hide-regular-price-for-products-on-sale-in-woocommerce/
     */
    function wpcb_hide_regular_price_for_sale_products( $price, $product ) {
        if ( $product->is_on_sale() ) {
            if ( $product->is_type( 'variable' ) ) {
                // Variable products
                $prices = $product->get_variation_prices( true );
                if ( ! empty( $prices['price'] ) ) {
                    $min_price     = current( $prices['price'] );
                    $max_price     = end( $prices['price'] );
                    $min_reg_price = current( $prices['regular_price'] );
                    $max_reg_price = end( $prices['regular_price'] );
                    if ( $min_price === $max_price && $min_reg_price === $max_reg_price ) {
                        return wc_price( $min_price ) . $product->get_price_suffix();
                    }
                }
            } elseif ( ! $product->is_type( 'grouped' ) ) {
                // Simple etc. products (i.e. all except grouped)
                return wc_price( wc_get_price_to_display( $product ) ) . $product->get_price_suffix();
            }
        }
        // No changes
        return $price;
    }
}

Hide some product sorting option from the frontend in WooCommerce

if ( ! function_exists( 'wpcb_hide_sorting_option_from_frontend' ) ) {
    /**
     * wpcb_hide_sorting_option_from_frontend.
     *
     * @see https://wpcodebook.com/snippets/hide-some-product-sorting-option-from-the-frontend-in-woocommerce/
     */
    function wpcb_hide_sorting_option_from_frontend( $sorting_options ) {
        if ( isset( $sorting_options['popularity'] ) ) {
            // This will hide "Sort by popularity" option
            // All default WooCommerce sorting options: 'menu_order', 'popularity', 'rating', 'date', 'price', 'price-desc'
            unset( $sorting_options['popularity'] );
        }
        return $sorting_options;
    }
    add_filter( 'woocommerce_catalog_orderby', 'wpcb_hide_sorting_option_from_frontend', PHP_INT_MAX );
}

Replace price range with lowest price for variable products in WooCommerce

if ( ! function_exists( 'wpcb_display_lowest_price_for_variable_products' ) ) {
    /**
     * wpcb_display_lowest_price_for_variable_products.
     *
     * @see https://wpcodebook.com/snippets/replace-price-range-with-lowest-price-for-variable-products-in-woocommerce/
     */
    function wpcb_display_lowest_price_for_variable_products( $price_html, $product ) {
        return ( $product->get_variation_price( 'max' ) != ( $min_price = $product->get_variation_price( 'min' ) ) ?
            sprintf( 'From: %s', wc_price( $min_price ) ) : $price_html );
    }
    add_filter( 'woocommerce_variable_price_html', 'wpcb_display_lowest_price_for_variable_products', PHP_INT_MAX, 2 );
}

Cancel sale for low stock products in WooCommerce

if ( ! function_exists( 'wpcb_is_product_low_stock' ) ) {
    /*
     * wpcb_is_product_low_stock.
     *
     * @see https://wpcodebook.com/snippets/cancel-sale-for-low-stock-products-in-woocommerce/
     */
    function wpcb_is_product_low_stock( $_product ) {
        return ( $_product->managing_stock() && $_product->get_stock_quantity() <= wc_get_low_stock_amount( $_product ) );
    }
}

if ( ! function_exists( 'wpcb_set_product_regular_price_on_low_stock' ) ) {
    /*
     * wpcb_set_product_regular_price_on_low_stock.
     */
    function wpcb_set_product_regular_price_on_low_stock( $price, $_product ) {
        return ( wpcb_is_product_low_stock( $_product ) ? $_product->get_regular_price() : $price );
    }
    add_filter( 'woocommerce_product_get_price', 'wpcb_set_product_regular_price_on_low_stock', PHP_INT_MAX, 2 );
}

if ( ! function_exists( 'wpcb_cancel_product_sale_on_low_stock' ) ) {
    /*
     * wpcb_cancel_product_sale_on_low_stock.
     */
    function wpcb_cancel_product_sale_on_low_stock( $is_on_sale, $_product ) {
        return ( wpcb_is_product_low_stock( $_product ) ? false : $is_on_sale );
    }
    add_filter( 'woocommerce_product_is_on_sale', 'wpcb_cancel_product_sale_on_low_stock', PHP_INT_MAX, 2 );
}