我正在使用woocommerce销售课程产品。该课程使用wc字段工厂为学生姓名和学生电子邮件地址定制产品字段。学生电子邮件地址的字段名称为" student_email"。然后,我尝试从该字段中获取值(电子邮件地址),并在购买此产品时将其用作woocommerce的电子邮件的收件人。
输入的值确实显示在购物车页面,订单收据电子邮件等上。我设置的自定义电子邮件模板确实有效(它目前发送到管理员电子邮件,直到我开始工作)。但我无法弄清楚如何获取学生电子邮件地址值以用作收件人。
我尝试了几件事,包括以下内容:
$order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
// Get "student email" custom field value
$student_emails = get_post_meta($order_id, "wccpf_student_email", true );
$this->recipient = $student_emails;
和
function custom_add_to_cart_action_handler($_cart_item_data, $_product_id) {
if(isset($_cart_item_data[“wccpf_student_email”])) {
$value = $_cart_item_data[“wccpf_student_email”];
return $value;
}
}
add_filter(‘woocommerce_add_cart_item_data’, array( $this, ‘custom_add_to_cart_action_handler’ ), 100, 2);
$this->recipient = $value;
这是在我的自定义电子邮件类php文件中完成的。但似乎没有抓住student_email自定义产品字段的值。任何帮助将不胜感激!
答案 0 :(得分:0)
代码已更新
作为你的" student_email"自定义字段在产品页面上设置,它作为订单商品元数据(而不是订购元数据)保存为您为其设置的标签名称...
因此,元键应该是"学生电子邮件" (标签名称),您需要循环浏览订单商品以获取这些电子邮件值(如果订单中有多个商品。
以下代码将获取这些电子邮件(如果存在)并将为电子邮件收件人添加主题以便订购"处理"和#34;完成"电子邮件通知:
add_filter( 'woocommerce_email_recipient_customer_processing_order', 'student_email_notification', 10, 2 );
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'student_email_notification', 10, 2 );
function student_email_notification( $recipient, $order ) {
if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;
$student_emails = array();
// Loop though Order IDs
foreach( $order->get_items() as $item_id => $item ){
// Get the student email
$student_email = wc_get_order_item_meta( $item_id, 'Student email', true );
if( ! empty($student_email) )
$student_emails[] = $student_email; // Add email to the array
}
// If any student email exist we add it
if( count($student_emails) > 0 ){
// Remove duplicates (if there is any)
$student_emails = array_unique($student_emails);
// Add the emails to existing recipients
$recipient .= ',' . implode( ',', $student_emails );
}
return $recipient;
}
代码放在活动子主题(或活动主题)的function.php文件中。现在经过测试并且有效。