Настройте тему электронной почты в WooCommerce с именем магазина поставщика (Dokan)

Мы нашли этот вопрос https://wordpress.stackexchange.com/questions/320924/woocommerce-order-processing-email-subject-not-changing, и он работает нормально. Теперь мы хотим расширить это, отображая поставщика в заказе в почте о завершении заказа.

Но мы не можем вывести название магазина поставщика.

Есть ли в нашем коде явная ошибка?

add_filter ('woocommerce_email_subject_customer_completed_order',

'change_completed_email_subject', 1, 2 );
function change_completed_email_subject( $subject, $order ) {
global $woocommerce;

// Order ID 
$order->get_items();
     
// Author id
$author_id = $product->post->post_author;
        
// Shopname
$vendor = dokan()->vendor->get( $author_id );
$shop_name = $vendor->get_shop_name();

// Blogname
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

// Output subject
$subject = sprintf( '%s, Deine %s Bestellung (#%s) wurde versendet! Vendor: %s', $order->billing_first_name, $blogname, $order->get_order_number(), $shop_name );
return $subject;
}

Обновление:

Я уже пытался получить имя через $shop_name = dokan()->vendor->get( $author_id )->get_shop_name();, но безуспешно.


person Nik7    schedule 01.02.2021    source источник


Ответы (1)


  • Использование global $woocommerce не обязательно
  • Вы используете $order->get_items();, но ничего с ним не делаете
  • $product не определено
  • Используйте $order->get_billing_first_name() VS $order->billing_first_name

Итак, вы получаете:

function filter_woocommerce_email_subject_customer_completed_order( $subject, $order ) {
    // Empty array
    $shop_names = array();
    
    // Loop through order items
    foreach ( $order->get_items() as $item ) {
        // Get product object
        $product = $item->get_product();

        // Author id
        $author_id = $product->post->post_author;
        
        // Shopname
        $vendor = dokan()->vendor->get( $author_id );
        $shop_name = $vendor->get_shop_name();
        
        // OR JUST USE THIS FOR SHOPNAME
        // Shop name
        // $shop_name = dokan()->vendor->get( $author_id )->get_shop_name();
        
        // NOT in array
        if ( ! in_array( $shop_name, $shop_names ) ) {
            // Push to array
            $shop_names[] = $shop_name;
        }
    }

    // Blogname
    $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

    // Set subject
    $subject = sprintf( __( '%s, Deine %s Bestellung (#%s) wurde versendet! Vendor: %s', 'woocommerce' ), $order->get_billing_first_name(), $blogname, $order->get_order_number(), implode( ', ', $shop_names ) );

    // Return
    return $subject;
}
add_filter( 'woocommerce_email_subject_customer_completed_order', 'filter_woocommerce_email_subject_customer_completed_order', 10, 2 );
person 7uc1f3r    schedule 01.02.2021
comment
Отлично! Спасибо. Только одна мелочь: теперь вывод такой: Daniel, Deine $ Blog Bestellung (# 544) wurde von Vendor 1,, Vendor 2, Vendor 3 versendet! = ›Между вендором 1 и 2 наблюдается странная ситуация, не видно, откуда это. - person Nik7; 01.02.2021
comment
Я обновил свой ответ, но не могу воспроизвести проблему, с которой вы столкнулись. Вот результат, который у меня есть: Somename, Deine blogname Bestellung (# 2237) wurde versendet! Поставщик: поставщик 1, поставщик 2, поставщик 3, поставщик 4 - person 7uc1f3r; 02.02.2021
comment
Это странно. Я могу воспроизвести это в системе разработки (которая является копией продукта 1: 1), но на продукте у меня нет этой проблемы. Может, я что-то делал на dev, но не помню. Большое спасибо за эту информацию !! :) @ 7uc1f3r - person Nik7; 02.02.2021