Добавление пользовательских метаданных в электронные письма в виде таблицы в стиле html с заголовком в Woocommerce - PullRequest
0 голосов
/ 10 мая 2018

В WooCommerce, " Получить значения массива настраиваемых полей в мета-адресе заказа электронной почты WooCommerce " на один из моих предыдущих вопросов, дал мне возможность вытащить поля из массив из метаданных поста заказа.

Но как мне взять этот код и настроить его, чтобы добавить заголовок над новыми данными и таблицу вокруг данных в электронном письме?

  1. Я хотел бы добавить <h2>Attendee Info</h2> над выводом полей. Кроме того, я хотел бы обернуть вывод поля в <table>.

  2. Я хотел бы добавить несколько полей в качестве новых столбцов на экране таблицы заказов администратора с помощью какой-либо функции.

Кроме того, я также хотел бы иметь возможность отображать некоторые из этих полей в таблице заказов администратора в виде новых столбцов.

1 Ответ

0 голосов
/ 10 мая 2018

Это можно сделать, используя вместо этого woocommerce_email_order_details ловушку действия следующим образом:

add_action('woocommerce_email_order_details', 'action_after_email_order_details', 25, 4 );
function action_after_email_order_details( $order, $sent_to_admin, $plain_text, $email )
{
    $event = get_post_meta( $order->get_id(), 'WooCommerceEventsOrderTickets', true );

    if( ! is_array($event) ) return;

    $event = isset($event[1][1]) ? $event[1][1] : '';

    if( sizeof($event) == 0 ) return;

    $custom = isset($event['WooCommerceEventsCustomAttendeeFields']) ? $event['WooCommerceEventsCustomAttendeeFields'] : '';

    // Set our array of needed data
    $fields_array = [
        __('First name')    => isset($event['WooCommerceEventsAttendeeName']) ? $event['WooCommerceEventsAttendeeName'] : '',
        __('Last name')     => isset($event['WooCommerceEventsAttendeeLastName']) ? $event['WooCommerceEventsAttendeeLastName'] : '',
        __('Title')         => isset($custom['fooevents_custom_title']) ? $custom['fooevents_custom_title'] : '',
        __('Organization')  => isset($custom['fooevents_custom_organization']) ? $custom['fooevents_custom_organization'] : '',
        __('Address')       => isset($custom['fooevents_custom_address']) ? $custom['fooevents_custom_address'] : '',
        __('City')          => isset($custom['fooevents_custom_city']) ? $custom['fooevents_custom_city'] : '',
        __('Postcode')      => isset($custom['fooevents_custom_postal_code']) ? $custom['fooevents_custom_postal_code'] : '',
        __('State')         => isset($custom['fooevents_custom_state/province']) ? $custom['fooevents_custom_state/province'] : '',
    ];

    if( ! $event ) return;

    // The HTML Structure
    $html_output = '<h2>' . __('Attendee Info') . '</h2>
    <div class="discount-info">
        <table cellspacing="0" cellpadding="6"><tbody>';

    // Loop though the data array to set the fields
    foreach( $fields_array as $label => $value ):
    if( ! empty($value) ):

    $html_output .= '<tr>
        <th>' . $label . '</th>
        <td>' . $value . '</td>
    </tr>';

    endif;
    endforeach;

    $html_output .= '</tbody></table>
    </div><br>'; // HTML (end)

    // The CSS styling
    $styles = '<style>
        .discount-info table{width: 100%; font-family: \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif;
            color: #737373; border: 1px solid #e4e4e4; margin-bottom:8px;}
        .discount-info table th, table.tracking-info td{text-align: left; border-top-width: 4px;
            color: #737373; border: 1px solid #e4e4e4; padding: 12px; width:58%;}
        .discount-info table td{text-align: left; border-top-width: 4px; color: #737373; border: 1px solid #e4e4e4; padding: 12px;}
    </style>';

    // The Output CSS + HTML
    echo $styles . $html_output;
}

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


или также с помощью woocommerce_email_order_meta action hook, заменив первую строку:

add_action('woocommerce_email_order_details', 'action_after_email_order_details', 25, 4 );

этим:

add_action('woocommerce_email_order_meta', 'woocommerce_email_order_meta', 25, 4 );

Вы получите что-то более чистое и отформатированное с вашим названием, например:

enter image description here

Чтобы эти данные отображались в таблице заказов администратора, это что-то гораздо более сложное и слишком широкое, чтобы отвечать в этом ответе или в stackOverFlow.

Вы должны лучше отображать эти данные в пользовательском мета-поле, чтобы редактировать страницы, что намного проще и практичнее.

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