Программно отображать метки полей оформления заказа в уведомлениях электронной почты Woocommerce

В мои настраиваемые шаблоны электронных писем WooCommerce для клиентов я вставляю настраиваемый список данных о доставке и выставлении счетов. Первый столбец списка с меткой, а второй - с соответствующими данными.

На данный момент я вручную вставил имена ярлыков, аналогичные тем, что указаны в кассе woocommerce, а затем вставил с помощью кода соответствующие значения / данные. Это означает, что я должен перевести все эти ярлыки на все языки, которые мне нужны, хотя я уже сделал это с помощью собственных ярлыков для оформления заказа Woocommerce.

Кроме того, поскольку это делается дважды, может случиться так, что переводы не будут в точности равны. Это неэффективно и также увеличивает объем кода.

Чтобы этого избежать, я хотел бы заменить метки соответствующими метками поля оформления заказа woocommerce.

Ниже моего текущего кода, где каждая строка '$ text_xx' представляет метку, которую я вручную определил ранее:

# (...)
$text_42b = __('First name:', 'woocommerce_php_emails');
# (...)

   echo '<p id="Linha1">' . $line . '</p><p id="Shipping_title_completed">' . $text_41 . '</p>
           <div class="Shipping_table_completed">
                <div class="left_table" style="float: left; width: 25%;"><ul>
                    <li>' . $text_42a . '</li>
                    <li>' . $text_42b . '</li>
                    <li>' . $text_42c . '</li>
                    <li>' . $text_42d . '</li>
                    <li>' . $text_42e . '</li>
                    <li>' . $text_42f . '</li>
                    <li>&nbsp;</li>
                    <li>' . $text_42g . '</li>
                    <li>' . $text_42h . '</li>
                    <li>' . $text_42i . '</li>
                    <li>' . $text_42j . ':</li>
                </ul></div>    
                <div class="right_table" style="float: left; width: 75%;"><ul>
                    <li>' . $shipping_title . '&nbsp;</li>
                    <li>' . $order->get_shipping_first_name() . '&nbsp;</li>
                    <li>' . $order->get_shipping_last_name() . '&nbsp;</li>
                    <li>'. $order->get_shipping_company() . '&nbsp;</li>
                    <li>' . $tracking_num_s . '&nbsp;</li>
                    <li>' . $order->get_shipping_address_1() . '&nbsp;</li>
                    <li>' . $order->get_shipping_address_2() . '&nbsp;</li>
                    <li>' . $order->get_shipping_postcode() . '&nbsp;</li>
                    <li>' . $order->get_shipping_city() . '&nbsp;</li>
                    <li>' . $order->get_shipping_state() . '&nbsp;</li>
                    <li>' . $order->get_shipping_country() . '&nbsp;</li>
                </ul></div>
                <div class="Shipping_table_completed1"><img src="https://testing987654321hello.com/wp-content/uploads/2017/12/delivery-service.jpg" alt=""></div>
            </div><p id="Linha2">' . $line . '</p><div class="Last_text_completed"><p>' . $text_61 . '<br><br><br>' . $text_60 . '</p></div>';

person Lcapitao    schedule 29.12.2017    source источник


Ответы (1)


Это можно сделать с помощью этой настраиваемой функции, которая будет отображать все существующие поля транспортной этикетки, отсортированные, как вы ожидаете:

function get_checkout_label_fields( $type = 'shipping' ){
    $domain = 'my_theme_slug'; // <= define your theme domain

    // Setting custom label fields value
    $fields1 = array(
        'shipping_title' => array(
            'label' => __( 'Shipping title', $domain ), // <= define your title
        ),
        'shipping_traking_number' => array(
            'label' => __( 'Tracking number', $domain ), // <= define Tracking number label
        )
    );
    $label_sep = __( ':', $domain );

    $checkout = new WC_Checkout(); // Get an instance of the  WC_Checkout object
    $fields2 = $checkout->get_checkout_fields($type); // Get the fields

    $fields = array_merge( $fields1, $fields2 ); // Merge arrays
    $output = array();

    // Sorting field labels array
    $labels = array( 'title', 'first_name', 'last_name', 'company', 'traking_number',
        'address_1', 'address_2','postcode', 'city', 'state', 'country' );

    // Loop through labels array to set the correct label values
    foreach( $labels as $label ){
        $label = 'shipping_'.$label;

        if( empty($fields[$label]['label']) )
            $fields[$label]['label'] = '&nbsp;';

        $output[$label] = $fields[$label]['label'];
    }
    return $output;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).


Теперь вы можете использовать эту функцию в своем коде шаблона следующим образом:

echo '<p id="Linha1">' . $line . '</p>
<p id="Shipping_title_completed">' . $text_41 . '</p>
<div class="Shipping_table_completed">
    <div class="left_table" style="float: left; width: 25%;">
        <ul>';

foreach(get_checkout_label_fields() as $label_field )            
    echo '<li>' . $label_field . '</li>';

echo '</ul>
    </div>    
    <div class="right_table" style="float: left; width: 75%;">
        <ul>
            <li>' . $shipping_title . '&nbsp;</li>
            <li>' . $order->get_shipping_first_name() . '&nbsp;</li>
            <li>' . $order->get_shipping_last_name() . '&nbsp;</li>
            <li>'. $order->get_shipping_company() . '&nbsp;</li>
            <li>' . $tracking_num_s . '&nbsp;</li>
            <li>' . $order->get_shipping_address_1() . '&nbsp;</li>
            <li>' . $order->get_shipping_address_2() . '&nbsp;</li>
            <li>' . $order->get_shipping_postcode() . '&nbsp;</li>
            <li>' . $order->get_shipping_city() . '&nbsp;</li>
            <li>' . $order->get_shipping_state() . '&nbsp;</li>
            <li>' . $order->get_shipping_country() . '&nbsp;</li>
        </ul>
    </div>
    <div class="Shipping_table_completed1">
        <img src="https://testing987654321hello.com/wp-content/uploads/2017/12/delivery-service.jpg" alt="">
    </div>
</div>
<p id="Linha2">' . $line . '</p>
<div class="Last_text_completed">
    <p>' . $text_61 . '<br><br><br>' . $text_60 . '</p>
</div>';

Проверено и работает.

person LoicTheAztec    schedule 02.01.2018
comment
Работает как очаровательный друг. Еще раз большое спасибо. - person Lcapitao; 03.01.2018