커스텀 정보 및 가격을 사용하여 장바구니에 제품 추가
워드프레스 숍의 제품 입력 및 체크아웃 처리를 처리하기 위해 woocommerce를 설치하였습니다.
샵페이지는 사용자가 리스트에서 상품을 선택하여 데이터베이스에 저장된 정보를 바탕으로 Javascript로 가격을 출력하는 커스텀 제작입니다.
db에 저장된 제품은 선택한 변수에 따라 가격이 다르기 때문에 0.00으로 평가됩니다.
woocommerce에 전달할 수 있는 출력 데이터는 다음과 같습니다.
- WC 제품 ID(DB 내 제품과 일치합니다)
- 커스텀 프라이스
- 커스텀 이미지
- 커스텀 설명 (예: 100mm x 100mm)
- 빌드 데이터(항목에 대해 저장되지만 체크아웃에 표시되지 않음)
상품 ID를 사용하여 카트에 상품을 추가하고(유효하게 하고), 커스텀 가격으로 가격을 덮어쓰고, 체크아웃 시 가장 많이 보이는 메타데이터를 첨부하여 wordpress admin에 표시될 때까지 숨겨두는 방법을 찾고 있습니다.
제품을 장바구니에 추가하려면 다음을 사용합니다.
$woocommerce->cart->add_to_cart($_POST['custom_product_id']);
그 시점 이후로는 가격을 무시하고 정보를 추가하는 것이 불가능하다는 것을 알게 되었습니다.
이 코드는 모두 기능합니다.php
이것에 의해, 투고된 추가 정보(모두 1개의 어레이로 송신)가 취득됩니다.
add_filter('woocommerce_add_cart_item_data','wdm_add_item_data',1,10); function wdm_add_item_data($cart_item_data, $product_id) { global $woocommerce; $new_value = array(); $new_value['_custom_options'] = $_POST['custom_options']; if(empty($cart_item_data)) { return $new_value; } else { return array_merge($cart_item_data, $new_value); } }그러면 이전 기능에서 정보를 캡처하여 항목에 첨부합니다.
add_filter('woocommerce_get_cart_item_from_session', 'wdm_get_cart_items_from_session', 1, 3 ); function wdm_get_cart_items_from_session($item,$values,$key) { if (array_key_exists( '_custom_options', $values ) ) { $item['_custom_options'] = $values['_custom_options']; } return $item; }아이템에 첨부된 추가 정보 내에서 카트 및 체크아웃에 대한 추가 정보가 표시됩니다.
add_filter('woocommerce_cart_item_name','add_usr_custom_session',1,3); function add_usr_custom_session($product_name, $values, $cart_item_key ) { $return_string = $product_name . "<br />" . $values['_custom_options']['description'];// . "<br />" . print_r($values['_custom_options']); return $return_string; }그러면 정보가 메타데이터로 추가되므로 주문의 일부로 볼 수 있습니다(고객으로부터 메타데이터를 숨기려면 밑줄로 시작하세요).
add_action('woocommerce_add_order_item_meta','wdm_add_values_to_order_item_meta',1,2); function wdm_add_values_to_order_item_meta($item_id, $values) { global $woocommerce,$wpdb; wc_add_order_item_meta($item_id,'item_details',$values['_custom_options']['description']); wc_add_order_item_meta($item_id,'customer_image',$values['_custom_options']['another_example_field']); wc_add_order_item_meta($item_id,'_hidden_field',$values['_custom_options']['hidden_info']); }가격을 재정의하려면 제품에 대해 저장된 정보를 사용하면 됩니다.
add_action( 'woocommerce_before_calculate_totals', 'update_custom_price', 1, 1 ); function update_custom_price( $cart_object ) { foreach ( $cart_object->cart_contents as $cart_item_key => $value ) { // Version 2.x //$value['data']->price = $value['_custom_options']['custom_price']; // Version 3.x / 4.x $value['data']->set_price($value['_custom_options']['custom_price']); } }
모든 커스텀 정보는 메타데이터로 추가한 경우 워드프레스 내에서 고객의 이메일 및 주문에 표시됩니다(4).
순서 1:- 커스텀 숨김 필드를 생성하여 단일 제품 페이지에 표시되는 커스텀 데이터를 전송해야 합니다.예를 들어 다음과 같습니다.
add_action('woocommerce_before_add_to_cart_button', 'custom_data_hidden_fields');
function custom_data_hidden_fields() {
echo '<div class="imput_fields custom-imput-fields">
<label class="price_prod">price: <br><input type="text" id="price_prod" name="price_prod" value="" /></label>
<label class="quantity_prod">quantity: <br>
<select name="quantity_prod" id="quantity_prod">
<option value="1" selected="selected">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
</label>
</div><br>';
}
순서 2:- 종료 후, 「모든 제품 커스텀」필드의 메인 로직을 카트의 아이템 데이터에 기입할 필요가 있습니다.
// Logic to Save products custom fields values into the cart item data
add_action( 'woocommerce_add_cart_item_data', 'save_custom_data_hidden_fields', 10, 2 );
function save_custom_data_hidden_fields( $cart_item_data, $product_id ) {
$data = array();
if( isset( $_REQUEST['price_prod'] ) ) {
$cart_item_data['custom_data']['price_pro'] = $_REQUEST['price_prod'];
$data['price_pro'] = $_REQUEST['price_prod'];
}
if( isset( $_REQUEST['quantity_prod'] ) ) {
$cart_item_data['custom_data']['quantity'] = $_REQUEST['quantity_prod'];
$data['quantity'] = $_REQUEST['quantity_prod'];
}
// below statement make sure every add to cart action as unique line item
$cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() );
WC()->session->set( 'price_calculation', $data );
return $cart_item_data;
}
3단계: 커스텀 계산으로 아이템 가격을 오버라이드해야 합니다.단일 제품 세션의 모든 시나리오에서 사용할 수 있습니다.
add_action( 'woocommerce_before_calculate_totals', 'add_custom_item_price', 10 );
function add_custom_item_price( $cart_object ) {
foreach ( $cart_object->get_cart() as $item_values ) {
## Get cart item data
$item_id = $item_values['data']->id; // Product ID
$original_price = $item_values['data']->price; // Product original price
## Get your custom fields values
$price1 = $item_values['custom_data']['price1'];
$quantity = $item_values['custom_data']['quantity'];
// CALCULATION FOR EACH ITEM:
## Make HERE your own calculation
$new_price = $price1 ;
## Set the new item price in cart
$item_values['data']->set_price($new_price);
}
}
모든 것은 함수 안에서 이루어집니다.php
언급URL : https://stackoverflow.com/questions/31482540/adding-a-product-to-cart-with-custom-info-and-price
'source' 카테고리의 다른 글
| Windows Azure의 경우:웹 역할, 작업자 역할 및 VM 역할이 무엇입니까? (0) | 2023.03.11 |
|---|---|
| 후크를 사용한 리액트 기능 컴포넌트와 클래스 컴포넌트 (0) | 2023.03.11 |
| WordPress + CloudFront Flexible SSL이 리다이렉트 루프(https)로 끝남 (0) | 2023.03.11 |
| JSON 개체가 변경되지 않았음을 확인하는 방법은 무엇입니까? (0) | 2023.03.11 |
| 올바른 Java를 설치한 후 MacOS에서 Oracle SQLDeveloper가 열리지 않음 (0) | 2023.03.11 |