Add custom message to all on-sale products in WooCommerce

Shop pages

/**
 * Adds sale text to shop pages.
 *
 * @see https://wpcodebook.com/woocommerce-add-custom-message-on-sale-products/#shop-pages
 * @see https://github.com/woocommerce/woocommerce/blob/8.0.2/plugins/woocommerce/templates/content-product.php#L65
 *
 * Hook: woocommerce_after_shop_loop_item.
 *
 * @hooked woocommerce_template_loop_product_link_close - 5
 * @hooked woocommerce_template_loop_add_to_cart - 10
 */
add_action( 'woocommerce_after_shop_loop_item', function () {
	global $product;
	if ( $product->is_on_sale() ) {
		echo '<p>' . esc_html__( 'Sale!' ) . '</p>';
	}
}, 11 );

Single product pages

/**
 * Adds sale text to single product pages.
 *
 * @see https://wpcodebook.com/woocommerce-add-custom-message-on-sale-products/#single-product-pages
 * @see https://github.com/woocommerce/woocommerce/blob/8.0.2/plugins/woocommerce/templates/content-single-product.php#L60
 *
 * Hook: woocommerce_single_product_summary.
 *
 * @hooked woocommerce_template_single_title - 5
 * @hooked woocommerce_template_single_rating - 10
 * @hooked woocommerce_template_single_price - 10
 * @hooked woocommerce_template_single_excerpt - 20
 * @hooked woocommerce_template_single_add_to_cart - 30
 * @hooked woocommerce_template_single_meta - 40
 * @hooked woocommerce_template_single_sharing - 50
 * @hooked WC_Structured_Data::generate_product_data() - 60
 */
add_action( 'woocommerce_single_product_summary', function () {
	global $product;
	if ( $product->is_on_sale() ) {
		echo '<p>' . esc_html__( 'Sale!' ) . '</p>';
	}
}, 31 );

Leave a Comment