Отфильтруйте нежелательные метаданные элемента заказа из почтовых уведомлений Woocommerce - PullRequest
0 голосов
/ 07 октября 2018

В шаблонах электронной почты заказа (например, email-order-items.php) WooCommerce использует функцию wc_display_item_meta для отображения сведений о продукте в таблице заказа.Код функции присутствует в файле wc-template-functions.php (номер строки 3011).Я копирую приведенный ниже код функции для справки

function wc_display_item_meta( $item, $args = array() ) {
    $strings = array();
    $html    = '';
    $args    = wp_parse_args( $args, array(
        'before'    => '<ul class="wc-item-meta"><li>',
        'after'     => '</li></ul>',
        'separator' => '</li><li>',
        'echo'      => true,
        'autop'     => false,
    ) );

    foreach ( $item->get_formatted_meta_data() as $meta_id => $meta ) {
        $value     = $args['autop'] ? wp_kses_post( $meta->display_value ) : wp_kses_post( make_clickable( trim( $meta->display_value ) ) );
        $strings[] = '<strong class="wc-item-meta-label">' . wp_kses_post( $meta->display_key ) . ':</strong> ' . $value;
    }

    if ( $strings ) {
        $html = $args['before'] . implode( $args['separator'], $strings ) . $args['after'];
    }

    $html = apply_filters( 'woocommerce_display_item_meta', $html, $item, $args );

    if ( $args['echo'] ) {
        echo $html; // WPCS: XSS ok.
    } else {
        return $html;
    }
}

Проблема в том, что не требуется никаких аргументов, которые могут помочь мне отфильтровать данные элемента, которые я не хочупоказать в заказе по электронной почте.Я не хочу менять эту функцию в wc-template-functions.php, так как это основной файл.Итак, я хочу знать, есть ли фрагмент кода, который я могу добавить к functions.php, который каким-то образом изменит эту функцию wc_display_item_meta, чтобы отфильтровать метаданные конкретного элемента.

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

Обновление № 1: Какие метаданные я не хочу показывать в электронном письме с заказом?Ниже приведен скриншот заказа электронной почты.Я выделил три элемента данных: "Qty Selector", "Qty" и "Total".Я хочу, чтобы все эти три не отображались в электронном письме с заказом.

enter image description here

1 Ответ

0 голосов
/ 07 октября 2018

Попробуйте следующее без какой-либо гарантии (поскольку у меня нет действительно необходимых ключей):

add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'unset_specific_order_item_meta_data', 10, 2);
function unset_specific_order_item_meta_data($formatted_meta, $item){
    // Only on emails notifications
    if( is_admin() || is_wc_endpoint_url() )
        return $formatted_meta;

    foreach( $formatted_meta as $key => $meta ){
        if( in_array( $meta->key, array('Qty Selector', 'Qty', 'Total') ) )
            unset($formatted_meta[$key]);
    }
    return $formatted_meta;
}

Код находится в файле function.php вашей активной дочерней темы (активной темы)). Проверено с метаданными, отличными от ваших и работает.Я надеюсь, что это сработает и для вас.

Теперь хук , используемый с этим кодом, является правильным хуком фильтра.Он расположен в методе WC_Order_Item get_formatted_meta_data() и позволяет фильтровать метаданные позиции заказа.

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