Добавить класс доставки в пунктах "Новый заказ" в WooCommerce? - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь добавить класс доставки для каждого продукта в новые электронные письма заказа для администратора и клиентов в WooCommerce. Я впервые пишу вопрос, поэтому, пожалуйста, прости меня, если есть проблемы с форматированием.

Я использовал код, найденный здесь: https://wordpress.stackexchange.com/questions/291637/woocommerce-add-shipping-class-below-each-product-in-shopping-cart-page

Это добавляет класс доставки ниже каждого товара в корзине, но я хочу иметь возможность показать его также в письмах с заказами.

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

Вот код, который я использую:

add_action( 'woocommerce_order_item_meta_start', 'ts_order_item_meta_start', 10, 4 );
function ts_order_item_meta_start( $item_id, $item, $order, $plain_text, $item_name ){
$product = $cart_item['data']; // Get the WC_Product object instance
$shipping_class_id = $product->get_shipping_class_id(); // Shipping class ID
$shipping_class_term = get_term( $shipping_class_id, 'product_shipping_class' );

if( empty( $shipping_class_id ) )
    return $item_name; // Return default product title (in case of)

$label = __( 'Shipping class', 'woocommerce' );

return $item_name . '<br>
    <p class="item-shipping_class" style="margin:12px 0 0;">
        <strong>' .$label . ': </strong>' . $shipping_class_term->name . '</p>';
}

Я ожидал, что класс доставки будет указан ниже каждого продукта в электронном письме "Новый заказ", но в настоящее время добавление этого кода возвращает внутреннюю ошибку сервера при оформлении заказа.

1 Ответ

0 голосов
/ 19 января 2019

На экране появится название класса доставки товара в Woocommerce "New Order". Уведомление по электронной почте:

// Setting the email_is as a global variable
add_action('woocommerce_email_before_order_table', 'the_email_id_as_a_global', 1, 4);
function the_email_id_as_a_global($order, $sent_to_admin, $plain_text, $email ){
    $GLOBALS['email_id_str'] = $email->id;
}

// Display Items shipping class name in New Order email notification
add_filter( 'woocommerce_order_item_name', 'custom_order_item_name', 10, 3 );
function custom_order_item_name( $item_name, $item, $is_visible ) {
    // Targeting email notifications only
    if( is_wc_endpoint_url() ) return $item_name;

    // Get the WC_Product object (from order item)
    $product = $item->get_product();

    if( $shipping_class_id = $product->get_shipping_class_id() ){
        // Getting the email ID global variable
        $refNameGlobalsVar = $GLOBALS;
        $email_id = $refNameGlobalsVar['email_id_str'];

        // Only for New Order email notification
        if( ! empty($email_id) && 'new_order' === $email_id ) {
            $shipping_class_name = get_term( $shipping_class_id, 'product_shipping_class' )->name;
            $item_name .= '<br><p class="item-shipping_class" style="margin:12px 0 0;">
            <strong>' . __( 'Shipping class', 'woocommerce' ) . ': </strong>' . $shipping_class_name . '</p>';
        }
    }

    return $item_name;
}

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

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