douling8772 2019-01-29 03:42
浏览 92

woocommerce:在状态完成后获取自定义产品输入字段的单个值

I have Problems to get the value of a product custom input field to use it for sending "customer_number" value in a mail. I can already send it to cart and order details but how i retrieve the variable value for customer _number for email action in bottom of code for later purpose for example a mysql query usage.

i get only empty value in email.

// add custom input field for single product //    
add_action( 'woocommerce_before_add_to_cart_button', 'add_custom_fields_single_product', 20 );  
function add_custom_fields_single_product(){  
global $product;  
?>  
    <div class="product-custom-fields">  
        Customer Number: <input type="text" placeholder="<?php _e('Customer Number', 'woocommerce'); ?>" name="customer_number">  
    </div>  

    <div class="clear"></div>  
<?php  
}  

// add cart item data //  
add_filter( 'woocommerce_add_cart_item_data', 'add_custom_fields_cart_item_data', 10, 2 );  
function add_custom_fields_cart_item_data( $cart_item_data, $product_id ){  
if(isset($_POST['customer_number']))  
    $cart_item_data['custom_data']['customer_number'] = sanitize_text_field($_POST['customer_number']);  


$cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() );  
WC()->session->set( 'custom_data', $cart_item_data['custom_data'] );  

return $cart_item_data;  
}

// show custom input field data in cart //  
add_filter( 'woocommerce_get_item_data', 'display_custom_fields_cart_item_data', 10, 2 );  
function display_custom_fields_cart_item_data($item_data, $cart_item){  

if( ! array_key_exists( 'custom_data', $cart_item ) )  
    return $item_data  

if( array_key_exists( 'customer_number', $cart_item['custom_data'] ) )  
    $item_data[] = array(  
        'key'   => __('Customer Number', 'woocommerce'),  
        'value' => $cart_item['custom_data']['customer_number']  
    );



return $item_data;  
}

// Save values as Order item data and display them everywhere //    
add_action('woocommerce_checkout_create_order_line_item', 'save_custom_fields_as_order_item_meta', 20, 4);  
function save_custom_fields_as_order_item_meta($item, $cart_item_key, $values, $order) {  
if( ! isset($values['custom_data']) )  
    return;  

$text_domain ='woocommerce';  

// Save values:   

if( array_key_exists('customer_number', $values['custom_data']) ){  
    $item->update_meta_data( __('Customer Number', $text_domain), $values['custom_data']['customer_number'] );  
}  


}  


// send mail with customer_number   
add_action( 'woocommerce_order_status_completed', 'mail_order', 10, 1 );  
function mail_order( $order_id) {  
$adminmail = 'xxx@xxx.com';  
$customer_number =  $values['custom_data']['customer_number'] ;  

wp_mail( $adminmail, "Order has completed ",  "Customer Number: $customer_number");  

return $item_data;  
}  
  • 写回答

1条回答 默认 最新

  • douqie1884 2019-01-29 05:01
    关注
    add_action( 'woocommerce_order_status_completed', 'mail_order', 10, 1 );  
    function mail_order( $order_id) 
    { 
        $order          = new WC_Order($order_id);
        $values         = $order->get_items();
        //echo '<pre>'. print_r($items, 1). '</pre>'; /* fetch all items */
        $adminmail = 'xxx@xxx.com';  
        $customer_number =  $values['custom_data']['customer_number'] ;  
    
        wp_mail( $adminmail, "Order has completed ",  "Customer Number: $customer_number");  
    
        //return $item_data;
    
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧