如何将自定义列添加到woocommerce购物车,然后将此列中的某些输入信息添加到订单、结帐页面和电子邮件?实际上,我需要将buddypress中的好友列表添加到每个产品行(价格必须取决于检查了多少好友)。在这里,我找到了一个建议,但它对WooCommerce有一定的帮助:为cart wp社区中的每个项目添加输入字段,同时保持沉默http://wordpress.org/support/topic/woocommerce-custom-column-in-cart?replies=1
我所做的-它只是添加可用的朋友列表,不知道如何在更新车上保存数据或继续。
if ( bp_has_members( 'user_id=' . bp_loggedin_user_id() ) ){
function ggUserFrom(){
$arrUsers = array();
while ( bp_members() ){
bp_the_member();
$arrUsers[ bp_get_member_user_nicename() ] = bp_get_member_user_nicename();
}
return $arrUsers;
}
echo "<div class='friends-holder'>";
foreach ( ggUserFrom() as $friend ){
echo '<p><input type="checkbox" name="cart['.$cart_item_key.'][friendsfromcart]" value="'.$friend.'">
<span>'.$friend.'</span></p>';
}
echo "</div>";
}
我正在寻找关于这个问题的任何信息。
在这里,由于用户可以选择多个复选框,所以它可能包含多个值。因此,我们使用了“序列化”函数。
例如,
add_filter( 'woocommerce_get_cart_item_from_session', 'wdm_get_cart_items_from_session', 1, 3 );
if(!function_exists('wdm_get_cart_items_from_session'))
{
function wdm_get_cart_items_from_session($item,$values,$key)
{
$item['custom_field_name'] = isset( $values['friendsfromcart'] )? serialize($values['friendsfromcart']) : '';
return $item;
}
}
在添加订单元数据时,可以获取单个值并添加相应的键,如下所示:,
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)
{
$user_custom_values = unserialize($values['friendsfromcart']);
if(count($user_custom_values) > 0)
{
foreach($user_custom_values as $single_value)
{
wc_add_order_item_meta($item_id,ucfirst($single_value),single_value);
}
}
}
因为订单元将通过电子邮件发送。
感谢您的回复-是的,变量设置在结帐页面中,但其在中为空
var_dump($_POST)...
...[custom_field_name] =>
...
而ofc在电子邮件中是空的。也许我寄错了?
name="friendsfromcart"
或将其值发送到数组,并且必须发送:
name="friendsfromcart[]"
或
name="[friendsfromcart]"
或者需要会话密钥
name="cart['.$cart_item_key.'][friendsfromcart]" ?
它的工作原理,数组在购物车,但有一些错误与反序列化:
add_action( 'init', 'update_cart_action', 9);
function update_cart_action() {
global $woocommerce;
if ( ( ! empty( $_POST['update_cart'] ) || ! empty( $_POST['proceed'] ) ) && $woocommerce->verify_nonce('cart')) {
$cart_totals = isset( $_POST['cart'] ) ? $_POST['cart'] : '';
if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
if ( isset( $cart_totals[ $cart_item_key ]['friendsfromcart'] ) ) {
$woocommerce->cart->cart_contents[ $cart_item_key ]['friendsfromcart'] = $cart_totals[ $cart_item_key ]['friendsfromcart'];
}
}
}
}
}
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){
$item['friendsfromcart'] = isset( $values['friendsfromcart'] )? serialize($values['friendsfromcart']) : '';
return $item;
}
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){
$user_custom_values = unserialize($values['friendsfromcart']);
if(count($user_custom_values) > 0){
foreach($user_custom_values as $single_value){
wc_add_order_item_meta($item_id,ucfirst($single_value),single_value);
}
}
}