Дополнительные заполнители для темы электронных уведомлений Woocommerce с ACF - PullRequest
0 голосов
/ 01 февраля 2019

Я ищу способ создания новых заполнителей для темы и письма получателей при создании нового заказа?Я создал новые поля с помощью 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 );
}

Когда я получаю письмо, я получаю его: Order {chantier}.Я не знаю, где моя ошибка ...

А для поля "conducteur-de-travaux" (пользовательское поле) я хотел бы восстановить адрес электронной почты "conducteur de travaux" и добавитьэто на новый адрес электронной почты получателя заказа.Является ли это возможным?

1 Ответ

0 голосов
/ 01 февраля 2019

Примечание: В stackOverFlow, чтобы избежать закрытия вопроса по «слишком широкой» причине, всегда задавайте один маленький вопрос вместо того, чтобы задавать сразу несколько разных вопросов. Правило - это один ответ на один вопрос.

В вашем коде есть некоторые ошибки и ошибки, такие как $order_id, которые не определены, поэтому он не может работать.

Вы должны быть уверены, что meta_key будет использоваться для получения значения ACF.Кажется, это должно быть '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 вашей активной дочерней темы (или активной темы).Это должно работать сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...