php - 带有 ACF 的 Woocommerce 电子邮件通知主题的其他占位符
问题描述
我正在寻找一种在创建新订单时为主题和收件人电子邮件创建新占位符的方法?我使用 ACF 创建了新字段:调用了“chantier”和“conducteur de travaux”,我希望能够在我的主题邮件中添加 {chantier} 并将 {conducteur} 添加到我的收件人。
这是我的 ACF 字段代码:
if( function_exists('acf_add_local_field_group') ):
acf_add_local_field_group(array(
'key' => 'group_5c49b50b45a52',
'title' => 'Nom du chantier',
'fields' => array(
array(
'key' => 'field_5c49b5127665d',
'label' => 'Chantier',
'name' => 'chantier',
'type' => 'post_object',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'show_fields_options' => array(
0 => 'order',
1 => 'email',
),
'post_type' => array(
0 => 'chantier',
),
'taxonomy' => '',
'allow_null' => 0,
'multiple' => 0,
'return_format' => 'object',
'ui' => 1,
),
array(
'key' => 'field_5c541edb71030',
'label' => 'Conducteur de travaux',
'name' => 'conducteur_de_travaux',
'type' => 'user',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'show_fields_options' => array(
0 => 'order',
1 => 'email',
),
'role' => array(
0 => 'conducteur-de-travaux',
),
'allow_null' => 0,
'multiple' => 0,
'return_format' => 'array',
),
),
'location' => array(
array(
array(
'param' => 'checkout',
'operator' => '==',
'value' => 'wc-before-billing-form',
),
),
),
'menu_order' => 0,
'position' => 'normal',
'style' => 'default',
'label_placement' => 'top',
'instruction_placement' => 'label',
'hide_on_screen' => '',
'active' => 1,
'description' => '',
));
endif;
我已经尝试过这里建议的代码:
为 Woocommerce 电子邮件通知主题创建其他变量/占位符
但它不起作用,这是我的代码:
add_filter( 'woocommerce_email_format_string' , 'add_custom_email_format_string', 20, 2 );
function add_custom_email_format_string( $string, $email ) {
// The post meta key used to save the value in the order post meta data
$meta_key = '_chantier';
// Get the instance of the WC_Order object
$order = $email->object;
// Get the value
$value = get_field( $meta_key, $order_id );
// Additional subject placeholder
$new_placeholders = array( '{chantier}' => $value );
// Return the clean replacement value string for "{chantier}" placeholder
return str_replace( array_keys( $additional_placeholders ), array_values( $additional_placeholders ), $string );
}
当我收到邮件时,我有它:订购 {chantier}。我不知道我的错误在哪里......
对于字段“conducteur-de-travaux”(用户字段),我想恢复“conducteur de travaux”的电子邮件并将其添加到新的订单收件人电子邮件中。可能吗?
解决方案
注意:在 stackOverFlow 上,为了避免您的问题因“过于宽泛”的原因而被关闭,请始终提出一个小问题,而不是一次提出多个不同的问题。规则是一个问题的一个答案。
您的代码中存在一些错误和错误,例如$order_id
未定义,因此无法正常工作。
您需要确定用于获取 ACF 值的 meta_key。似乎应该'chantier'
代替(您可以同时'_chantier'
尝试它们以查看哪个有效)。
下面的代码将为 ACF 值的电子邮件通知主题添加新的占位符:
add_filter( 'woocommerce_email_format_string', 'add_custom_email_format_string', 10, 2 );
function add_custom_email_format_string( $string, $email ) {
// HERE the ACF slug to be used to get the value
$meta_key = 'chantier';
// Get the instance of the WC_Order object
$order = $email->object;
// Get ACF value (with the correct Order ID)
$value = get_field( $meta_key, $order->get_id() );
// Additional subject placeholder
$new_placeholders = array( '{chantier}' => $value );
// Get the clean replacement value string for "{chantier}" placeholder
return str_replace( array_keys( $additional_placeholders ), array_values( $additional_placeholders ), $string );
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。它现在应该可以工作了。
相关工作答案:
推荐阅读
- javascript - 使用我拥有的脚本,我可以在单击时显示 .menu,但不能让它在第二次单击时再次消失以返回默认值?
- javascript - 谷歌图表正在显示空图表
- python - 调用运行不同版本的外部python脚本
- php - Join three tables with status open or closed
- ios - 未从文档目录中的 NSURL 正确创建 AVAsset
- tensorflow - Keras 密集层输出为“nan”
- c# - 如何向 mongodb 中的现有记录插入新值?
- ruby - 控制器和交互器错误处理的最佳实践
- amazon-web-services - 增加索引是否会导致 AWS RDS 的写入 IOPS 上升?
- c++ - 如何以更有效的方式判断枚举类值是否在枚举类的指定范围内?