简体   繁体   English

带有 ACF 主题的 Woocommerce 电子邮件通知的其他占位符

[英]Additional placeholders for Woocommerce email notifications subject with ACF

I'm searching a way of creating new placeholders for subject and recipients email when a new order is create?我正在寻找一种在创建新订单时为主题和收件人电子邮件创建新占位符的方法? I have created new fields with ACF : "chantier" and "conducteur de travaux" called and I want to be able to add {chantier} in my subject mail and add {conducteur} to my recipient.我使用 ACF 创建了新字段:调用了“chantier”和“conducteur de travaux”,我希望能够在我的主题邮件中添加 {chantier} 并将 {conducteur} 添加到我的收件人。

Here my code for ACF field :这是我的 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;

I have tried with this code suggested here :我已经尝试使用这里建议的代码:

Create additional variables/placeholders for Woocommerce email notifications subject 为 Woocommerce 电子邮件通知主题创建其他变量/占位符

But it doesn't works, here my code :但它不起作用,这里是我的代码:

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 );
}

When I receive the mail I have it : Order {chantier}.当我收到邮件时,我收到了:订购 {chantier}。 I don't know where is my mistake...我不知道我的错误在哪里...

And for the field "conducteur-de-travaux" (user field), I would like to recover the email of the "conducteur de travaux" and add it to the new order recipient email.对于字段“conducteur-de-travaux”(用户字段),我想恢复“conducteur de travaux”的电子邮件并将其添加到新的订单收件人电子邮件中。 Is it possible?是否可以?

Note: On stackOverFlow to avoid your question to be closed for "too broad" reason, always ask one small question instead of asking multiple distinct questions at once.注意:在 stackOverFlow 上,为了避免您的问题因“过于广泛”的原因而被关闭,请始终问一个小问题,而不是一次问多个不同的问题。 The rule is one answer to one question.规则是一个问题的一个答案。

There is some errors and mistakes in your code like $order_id that is not defined, so it can't work.您的代码中有一些错误和错误,例如未定义的$order_id ,因此无法工作。

You need to be sure of the meta_key to be used to get the ACF value.您需要确定要用于获取 ACF 值的 meta_key。 It seem that it should be 'chantier' instead of '_chantier' (You can try both of them to see which one works) .似乎它应该是'chantier'而不是'_chantier' (你可以试试这两个,看看哪个有效)

The code below will ad new placeholders for email notifications subject for ACF value:下面的代码将为 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 );
}

Code goes in function.php file of your active child theme (or active theme).代码位于活动子主题(或活动主题)的 function.php 文件中。 It should works now.现在应该可以使用了。

Related working answers:相关工作答案:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM