Home » WooCommerce: Order a “Free Sample” @ Single Product Page

WooCommerce: Order a “Free Sample” @ Single Product Page

by adminkys

Recently I was on a coaching call with a client and the “Free Sample” challenge came up. Client has 400+ products on the website and had no intention of adding a free variation to each product manually.

So, I promised to myself I was going to study a different approach. And today you get it for free – nice! Needless to say, a comment and a social media share are much appreciated 🙂

Display an “Add Free Sample to Cart” button @ WooCommerce single product page

Requirements for “Free Sample” – WooCommerce

Before digging into PHP, you will need to create a brand new simple hidden product (otherwise the code won’t work. Or call it whatever you like, but make sure to change the PHP snippet below accordingly).

Here are the requirements:

  • Title: whatever you like e.g. “Free Sample
  • Price: “0
  • Catalog Visibility: “Hidden
  • Inventory: “Sold Individually

Make sure to remember the product ID of this new product, because you will need to use it in the PHP snippet 🙂

PHP Snippet: “Free Sample” Add to Cart Button @ WooCommerce Single Product Page

 * @snippet       Add Free Sample to Cart @ Single Product
 * @how-to        Get tutoraspire.com FREE
 * @author        Tutor Aspire
 * @testedwith    WooCommerce 5
 * @donate $9     https://www.tutoraspire.com

// -------------------------
// 1. Display Free Sample Add to Cart 
// Note: change "123" with Free Sample ID
add_action( 'woocommerce_single_product_summary', 'tutoraspire_add_free_sample_add_cart', 35 );
function tutoraspire_add_free_sample_add_cart() {

get_name() . “)”;
return $product_name;

// ————————-
// 4. Add “Free Sample” product name to order meta
// Note: this will show on thank you page, emails and orders

add_action( ‘woocommerce_add_order_item_meta’, ‘tutoraspire_save_posted_field_into_order’, 9999, 2 );

function tutoraspire_save_posted_field_into_order( $itemID, $values ) {
if ( ! empty( $values[‘free_sample’] ) ) {
$product = wc_get_product( $values[‘free_sample’] );
$product_name = $product->get_name();
wc_add_order_item_meta( $itemID, ‘Free sample for’, $product_name );

You may also like