Last active
September 14, 2018 09:02
-
-
Save corsonr/d00d72d6f248452e43e3e4af7521f7fe to your computer and use it in GitHub Desktop.
WooCommerce: set price to zero
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function make_it_free() { | |
echo '<table class="variations" cellspacing="0"> | |
<tbody> | |
<tr> | |
<td class="label"><label>Make this free!</label></td> | |
<td class="value"> | |
<label><input type="checkbox" name="option_free" value="YES" /> Set price to zero</label> | |
</td> | |
</tr> | |
</tbody> | |
</table>'; | |
} | |
add_action( 'woocommerce_before_add_to_cart_button', 'make_it_free' ); | |
function save_make_it_free( $cart_item_data, $product_id ) { | |
if( isset( $_POST['option_free'] ) && $_POST['option_free'] === 'YES' ) { | |
$cart_item_data[ "is_free" ] = "YES"; | |
} | |
return $cart_item_data; | |
} | |
add_filter( 'woocommerce_add_cart_item_data', 'save_make_it_free', 99, 2 ); | |
function calculate_make_it_free( $cart_object ) { | |
if( !WC()->session->__isset( "reload_checkout" )) { | |
foreach ( WC()->cart->get_cart() as $key => $value ) { | |
if( isset( $value["is_free"] ) ) { | |
if( method_exists( $value['data'], "set_price" ) ) { | |
/* Woocommerce 3.0 + */ | |
$value['data']->set_price( 0 ); | |
} else { | |
/* Version before 3.0 */ | |
$value['data']->price = ( 0 ); | |
} | |
} | |
} | |
} | |
} | |
add_action( 'woocommerce_before_calculate_totals', 'calculate_make_it_free', 99 ); | |
function render_meta_on_cart_and_checkout( $cart_data, $cart_item = null ) { | |
$meta_items = array(); | |
/* Woo 2.4.2 updates */ | |
if( !empty( $cart_data ) ) { | |
$meta_items = $cart_data; | |
} | |
if( isset( $cart_item["is_free"] ) ) { | |
$meta_items[] = array( "name" => "Make it free", "value" => "Yes" ); | |
} | |
return $meta_items; | |
} | |
add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 99, 2 ); | |
function make_it_free_order_meta_handler( $item_id, $values, $cart_item_key ) { | |
if( isset( $values["is_free"] ) ) { | |
wc_add_order_item_meta( $item_id, "Make it free", 'YES' ); | |
} | |
} | |
add_action( 'woocommerce_add_order_item_meta', 'make_it_free_order_meta_handler', 99, 3 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Textarea version: