php - 在 WooCommerce 的“订单已完成”电子邮件中添加自定义产品字段
问题描述
有什么方法可以将自定义产品字段中的内容添加到“订单完成”的 WooCommerce 电子邮件中?
我已将此代码添加到我的 functions.php 中,以便将我的自定义字段保存到产品元信息中。
//1.1 Display Activation Instructions field in admin
add_action('woocommerce_product_options_inventory_product_data', 'woocommerce_product_act_fields');
function woocommerce_product_act_fields(){
global $woocommerce, $post;
echo '<div class="product_custom_field">';
woocommerce_wp_text_input(
array(
'id' => '_act',
'label' => __('Activation Instructions', 'woocommerce'),
'desc_tip' => 'true',
'description' => 'Enter the Activation Instructions Link.'
)
);
echo '</div>';
}
//1.2 Save Activation Instructions field in product meta
add_action('woocommerce_process_product_meta', 'woocommerce_product_act_field_save');
function woocommerce_product_act_field_save($post_id){
$woocommerce_act_product_text_field = $_POST['_act'];
if (!empty($woocommerce_act_product_text_field))
update_post_meta($post_id, '_act', esc_attr($woocommerce_act_product_text_field));
}
我还添加了此代码以在我的“订单完成”woocomerce 电子邮件中显示自定义文本。
add_action( 'woocommerce_email_customer_details', 'bbloomer_add_content_specific_email', 20, 4 );
function bbloomer_add_content_specific_email( $order, $sent_to_admin, $plain_text, $email ) {
if ( $email->id == 'customer_completed_order' ) {
echo '<h2>Activation & Download Instructions</h2><p style="margin-bottom:35px;">Please refer to
our <a href="https://example.com/activation-guides/">Activation Guides</a> for detailed
activation and download instructions.</p>';
}
}
上面的代码运行良好,它显示了所有“订单完成”电子邮件的自定义文本。
但是,我想用自定义产品字段数据替换文本的 URL 部分。每个产品的数据都不同。
谢谢。
解决方案
使用:get_post_meta检索给定帖子 ID 的帖子元字段。
//1.1 Display Activation Instructions field in admin
function woocommerce_product_act_fields() {
echo '<div class="product_custom_field">';
woocommerce_wp_text_input(
array(
'id' => '_act',
'label' => __('Activation Instructions', 'woocommerce'),
'desc_tip' => 'true',
'description' => 'Enter the Activation Instructions Link.'
)
);
echo '</div>';
}
add_action('woocommerce_product_options_inventory_product_data', 'woocommerce_product_act_fields', 10, 0 );
//1.2 Save Activation Instructions field in product meta
function woocommerce_product_act_field_save( $product ) {
if( isset($_POST['_act']) ) {
$product->update_meta_data( '_act', sanitize_text_field( $_POST['_act'] ) );
}
}
add_action( 'woocommerce_admin_process_product_object', 'woocommerce_product_act_field_save', 10, 1 );
//2 Add url to email
function woocommerce_product_act_email( $order, $sent_to_admin, $plain_text, $email ) {
if ( $email->id == 'customer_completed_order' ) {
$items = $order->get_items();
echo '<h2>Activation & Download Instructions</h2>';
foreach ( $items as $item ) {
// Get product ID
$product_id = $item->get_product_id();
// Get product name
$product_name = $item->get_name();
// Get post meta
$url = get_post_meta( $product_id, '_act', true);
if ( $url ) {
echo '<p style="margin-bottom:35px;">For ' . $product_name . ' follow <a href="' . $url. '"> these instructions</a></p>';
}
}
}
}
add_action( 'woocommerce_email_customer_details', 'woocommerce_product_act_email', 20, 4 );
推荐阅读
- numpy - 约束 numpy 自动将整数转换为浮点数(python 3.7)
- java - 如何修复使用 jfoenix 触发的错误?
- node.js - 更新nodejs后离子环境变得不稳定
- javascript - jQuery - If 语句检测页面加载
- jquery - 如何在 jquery 数据表 onchange 事件回调中获取单元格的新值
- c# - 从 Cognito 组担任 IAM 角色
- python - jupyter nbconvert --to html --no-inp 正在缩小集中表的显示
- visual-studio-code - 如何在默认构建任务中正确使用 CMake,以及为什么启用 WSL(2) 会改变 VSCode 任务行为?
- tabulator - 是否可以显示 Tabulator 表的标题?
- java - 当我关闭 RDP 连接时,基于 WinAppDriver 的自动化停止在 Windows 10 VM 上工作