如何将自定义列添加到woocommerce购物车,然后将此列的一些输入信息添加到订单,结帐页面和电子邮件中? 实际上我需要从buddypress添加朋友列表到每个产品行(价格必须取决于检查了多少朋友)。 在这里我找到了建议,但它部分有帮助WooCommerce: Add input field to every item in 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>";
}
我正在寻找关于这个问题的任何信息。
答案 0 :(得分:0)
这里,由于用户可以选择多个复选框,因此它可能包含多个值。因此,我们使用了&#34;序列化&#34;功能。
例如,
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);
}
}
}
因为订单元将通过电子邮件发送。
答案 1 :(得分:0)
感谢回复 - 是的,结帐页面中的变量isset,但是他的空白
var_dump($_POST)...
...[custom_field_name] =>
...
电子邮件中和ofc为空。 也许我不正确发送它?
name="friendsfromcart"
或发送值为数组,必须发送:
name="friendsfromcart[]"
或
name="[friendsfromcart]"
或需要会话密钥
name="cart['.$cart_item_key.'][friendsfromcart]" ?
答案 2 :(得分:0)
它有效,数组在购物车中,但反序列化有问题:
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);
}
}
}