Display Custom Price for Variation Product on Cart

2019-08-16 23:30发布

问题:

I have a custom product (a rug) that's price is determined by the user's chosen length and width.

I can handle the changing of price easily on the product page using jQuery.

But I'm struggling to find something that will take the user's choices, and use them to calculate a custom price on cart/checkout.

I'm saving the user's inputted data into $cart_item_data like so...

function smcrp_add_custom_rug_fields_to_cart_item( $cart_item_data, $product_id, $variation_id ) {
    $length_text = filter_input( INPUT_POST, 'smcrp-length' );
    $width_text = filter_input( INPUT_POST, 'smcrp-width' );
    $unit_text = filter_input( INPUT_POST, 'smcrp-unit' );

    if ( empty( $length_text ) && empty( $width_text ) && empty( $unit_text ) ) {
        return $cart_item_data;
    }

    $cart_item_data['smcrp-length'] = $length_text;
    $cart_item_data['smcrp-width'] = $width_text;
    $cart_item_data['smcrp-unit'] = $unit_text;

    return $cart_item_data;
}

But I'm not sure how to change the price only on checkout.

I tried following some advice on another thread and use:

function smcrp_custom_rug_price( $price, $product ) {
  wc_delete_product_transients($product->get_id());

  if ( strpos( $product->get_data()["name"],  "- Custom" ) === FALSE )
    return $price;

  return 180; 
}

But this returns the static price, and I can't seem to access the cart_item_data from inside this function.

And I can't get it to only display on cart/checkout.

Any advice?

Thanks, Jack