We're using the following script to allow users to enter a custom price for their gift card purchase on this page: http://oceanapoke.staging.wpengine.com/pages/gift-card/
The problem is that the custom price is no longer totally correctly in the cart itself with the recent WooCommerce 3.0.8 update.
Troubleshooting this is way outside my wheelhouse. Is there anyone that can point me in the right direction?
function wpr_custom_price() {
if ( !class_exists( 'woocommerce' ) && !class_exists( 'rpgc_woocommerce' ) )
return;
}
add_action('plugins_loaded ', 'wpr_custom_price', 20 );
// Adds the box to enter in the cost of the giftcard.
function wpr_add_remove_field() {
$currency_symbol = get_woocommerce_currency_symbol();
$currency_pos = get_option( 'woocommerce_currency_pos' );
_e('Enter Gift Card Value');
?>
<br />
<?php
switch ( $currency_pos ) {
case 'left' :
echo '<strong>' . $currency_symbol . '</strong> <input
name="rpgc_price" id="rpgc_price" placeholder="' . __('0.00',
WPR_CP_CORE_TEXT_DOMAIN ) . '" class="input-text" style="margin-bottom:5px;
width: 100px;">';
break;
case 'right' :
echo '<input name="rpgc_price" id="rpgc_price" placeholder="' .
__('0.00', WPR_CP_CORE_TEXT_DOMAIN ) . '" class="input-text" style="margin-
bottom:5px; width: 100px;"><strong> ' . $currency_symbol . '</strong>';
break;
case 'left_space' :
echo '<strong>' . $currency_symbol . ' </strong> <input
name="rpgc_price" id="rpgc_price" placeholder="' . __('0.00',
WPR_CP_CORE_TEXT_DOMAIN ) . '" class="input-text" style="margin-bottom:5px;
width: 100px;">';
break;
case 'right_space' :
echo '<input name="rpgc_price" id="rpgc_price" placeholder="' .
__('0.00', WPR_CP_CORE_TEXT_DOMAIN ) . '" class="input-text" style="margin-
bottom:5px; width: 100px;"> <strong> ' . $currency_symbol . '</strong>';
break;
}
}
add_action( 'rpgc_before_all_giftcard_fields', 'wpr_add_remove_field', 10 );
// Removes the display of the price on a gift card product
function wpr_remove_price( $price, $post ) {
$is_giftcard = get_post_meta( $post->id, '_giftcard', true );
if ( $is_giftcard == "yes" )
$price = "";
return $price;
}
add_filter( 'woocommerce_get_price_html', 'wpr_remove_price', 10, 2 );
**// Saves the Gift card amount on adding it to the cart
function wpr_add_cart_item($data) {
if ( isset( $_POST['rpgc_price'] ) )
$data['Price'] = (double) woocommerce_clean( $_POST['rpgc_price'] );
return $data;
}
add_filter('rpgc_giftcard_data', 'wpr_add_cart_item', 10, 1);
// Replaces the $0 price of the Gift card with the amount entered by the
customer
function wpr_add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
if( isset( $value["variation"]["Price"] ) )
$value['data']->price = $value["variation"]["Price"];
}
}
add_action( 'woocommerce_before_calculate_totals', 'wpr_add_custom_price' );
// Updates the price in the Mini Cart
function wpr_minicart_price ( $price, $cart_item, $cart_item_key ){
$is_giftcard = get_post_meta( $cart_item [ "product_id" ], '_giftcard', true
);
if ( $is_giftcard == "yes" ) {
$price = woocommerce_price( $cart_item ["variation"]["Price"] );
}
return $price;
}
add_filter('woocommerce_cart_item_price','wpr_minicart_price', 10, 3);
add_filter('woocommerce_add_to_cart_validation',
'my_custom_checkout_field_process', 10, 2);
function my_custom_checkout_field_process( $state, $product_id ) {
$is_giftcard = get_post_meta( $product_id, '_giftcard', true );
if ( $is_giftcard == "yes" ) {
// Check if set, if its not set add an error.
if ( ! $_POST['rpgc_price'] ) {
wc_add_notice( __( 'Please enter a price for the gift card.' ),
'error' );
$state = false;
}
}
return $state;
}**
/**
* Load the Text Domain for i18n
*
* @return void
* @access public
*/
function rpgc_custprice_loaddomain() {
load_plugin_textdomain( 'rpgc-customprice', false, dirname( plugin_basename(
__FILE__ ) ) . "/languages" );
}
add_action( 'init', 'rpgc_custprice_loaddomain' );
?>