使用自定义信息和价格将产品添加到购物车
Adding a product to cart with custom info and price
我已经安装了 woocommerce 来处理 wordpress 商店的产品输入和结帐过程。
商店页面是自定义构建的,允许用户从列表中选择产品并自定义它,根据数据库中存储的信息输出 javascript 中的价格。
数据库中存储的产品价值为 0.00,因为它们的价格因所选变量而异。
我准备传给woocommerce的输出数据如下:
- WC 产品 ID(这与数据库中的产品相匹配)
- 自定义价格
- 自定义图片
- 自定义描述(例如 100mm x 100mm)
- 构建数据(针对项目存储但在结帐时看不到)
我正在尝试找到一种方法,使用产品 ID(使其有效)将产品添加到购物车,然后用自定义价格覆盖价格并附加元数据,这些数据大多数会在结账时看到一个会被隐藏,直到在 wordpress 管理员中看到。
将产品添加到购物车是通过以下方式实现的:
$woocommerce->cart->add_to_cart($_POST['custom_product_id']);
之后我发现无法覆盖价格并添加其他信息。
所有这些代码都进入 functions.php
这会捕获附加的发布信息(全部发送到一个数组中)
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.)
,您的所有自定义信息将显示在客户电子邮件中并从 wordpress 中订购
第 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);
}
}
一切都将在functions.php
内完成
我已经安装了 woocommerce 来处理 wordpress 商店的产品输入和结帐过程。
商店页面是自定义构建的,允许用户从列表中选择产品并自定义它,根据数据库中存储的信息输出 javascript 中的价格。
数据库中存储的产品价值为 0.00,因为它们的价格因所选变量而异。
我准备传给woocommerce的输出数据如下:
- WC 产品 ID(这与数据库中的产品相匹配)
- 自定义价格
- 自定义图片
- 自定义描述(例如 100mm x 100mm)
- 构建数据(针对项目存储但在结帐时看不到)
我正在尝试找到一种方法,使用产品 ID(使其有效)将产品添加到购物车,然后用自定义价格覆盖价格并附加元数据,这些数据大多数会在结账时看到一个会被隐藏,直到在 wordpress 管理员中看到。
将产品添加到购物车是通过以下方式实现的:
$woocommerce->cart->add_to_cart($_POST['custom_product_id']);
之后我发现无法覆盖价格并添加其他信息。
所有这些代码都进入 functions.php
这会捕获附加的发布信息(全部发送到一个数组中)
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.)
,您的所有自定义信息将显示在客户电子邮件中并从 wordpress 中订购第 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);
}
}
一切都将在functions.php
内完成