dougong2306 2017-06-13 02:09
浏览 57

WooCommerce:用户设置的自定义价格,不在购物车中

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' );
?>
  • 写回答

1条回答 默认 最新

  • duan0403788996 2017-09-11 14:54
    关注

    Replace this line $value['data']->price = $value["variation"]["Price"]; with this $value['data']->set_price( $value["variation"]["Price"] ); because in the new version we only get an object with the product through that object. We can call the set_price() function to set the current price.

    评论

报告相同问题?

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测