Я хочу добавить упаковочную накладную в автоматическое электронное письмо.
Похоже, это работает хорошо, когда я отправляю письмо, например, при изменении статуса заказа.
когда я запускаю письмо по статусу = обработка, упаковочный лист не прикреплён.
Думаю, это вызвано тем, что документ ещё не создан.
Когда я выполняю код после создания документа, все работает нормально.
это текущий код:
add_action('woocommerce_order_status_processing', 'protempo_maybe_send_order_mail', 2000, 1);
function protempo_maybe_send_order_mail( $order_id ) {
$logger = wc_get_logger();
$context = array( 'source' => 'protempo' );
$order = wc_get_order( $order_id );
foreach ( $order->get_shipping_methods() as $shipping_methods ) {
$shipping_method_id = $shipping_methods->get_method_id();
}
if ( 'local_pickup' == $shipping_method_id ) {
$logger->debug( 'Not sent for order #' . $order->get_id() . ', reason: shipping is local pickup.', $context );
return; // Don't send the email for local pickup ;
}
if ( in_array( $order->get_status(), array( 'cancelled', 'failed' ) ) ) {
$logger->debug( 'Not sent for order #' . $order->get_id() . ', reason: failed or cancelled.', $context );
return; // Don't send the email for failed or cancelled orders;
}
$order_meta = get_post_meta( $order_id );
$protempo_products = array();
$leveranciers_products = array();
foreach ( $order->get_items() as $item_id => $item ) {
$product_id = $item->get_product()->get_id();
// Only products wiht artikelnummer.
if ( get_post_meta( $product_id, '_protempoartikelnummer', true ) ) {
$protempo_products[] = array(
'code' => get_post_meta( $product_id, '_protempoartikelnummer', true ),
'qty' => $item->get_quantity()
);
} else {
// Only products wiht leveranciers_id.
if ( get_post_meta( $product_id, '_leveranciers_id', true ) ) {
$leveranciers_products[] = array(
'code' => get_post_meta( $product_id, '_leveranciers_id', true ),
'qty' => $item->get_quantity()
);
}
}
}
if ( 0 == count( $protempo_products ) && 0 == count( $leveranciers_products ) ) {
$logger->debug( 'Not sent for order #' . $order->get_id() . ', reason: no protempo/leveranciers products found.', $context );
return; // No protempo/leveranciers products to be emailed.
}
$bedrijfsnaam = $order_meta['_shipping_company'][0];
if ( $bedrijfsnaam == '' ) {
$bedrijfsnaam = $order_meta['_shipping_first_name'][0] . ' ' . $order_meta['_shipping_last_name'][0] . ' (particulier)';
}
$straat = $order_meta['_shipping_address_1'][0];
$huisnr = $order_meta['_shipping_address_2'][0];
$postcode = $order_meta['_shipping_postcode'][0];
$plaats = $order_meta['_shipping_city'][0];
$land = $order_meta['_shipping_country'][0];
$telefoon = $order_meta['_shipping_phone'][0];
$referentie_klant = $order->get_order_number();
$pakbon_url = 'https://woocommerce-915068-4990040.clou ... 0/archive/';
$pakbon = $order_meta['_wpo_wcpdf_packing_slip_archived'][0];
$mail_klant = $order_meta['_billing_email'][0];
$referentieklant = utf8_encode( $order_meta['_billing_reference'][0] );
$opmerkingen = utf8_encode( $order->get_customer_note() );
if ( count( $protempo_products ) ) {
$destination = 'protempo';
// Protempo order
$body = '{"order": {';
$body.= '"debiteurennummer": "52866",';
$body.= '"aflever_straat": ' . json_encode( $straat ) . ',';
$body.= '"email_klant": ' . json_encode( $mail_klant ) . ',';
$body.= '"aflever_bedrijfsnaam": ' . json_encode( $bedrijfsnaam ) . ',';
$body.= '"aflever_straat": ' . json_encode( $straat ) . ',';
$body.= '"aflever_huisnr": ' . json_encode( $huisnr ) . ',';
$body.= '"aflever_postcode": ' . json_encode( $postcode ) . ',';
$body.= '"aflever_plaats": ' . json_encode( $plaats ) . ',';
$body.= '"aflever_land": ' . json_encode( $land ) . ',';
$body.= '"aflever_telefoon": ' . json_encode( $telefoon ) . ',';
$body.= '"referentie_klant": "HELPO #' . $referentie_klant . '",';
$body.= '"opmerkingen": ' . json_encode( $opmerkingen ) . ',';
$body.= '"products": {"product":' . json_encode( $protempo_products ) . '}';
$body.= '}}';
$body.= "
je kan de pakbon downoaden via: " .$pakbon_url.$pakbon;
$attachments = array(WP_CONTENT_DIR."/uploads/wpo_wcpdf_26c85ba985c77a4a0b8c72f6abcfac50/archive/". $pakbon);
$multiple_recipients = array (
'xxx@mail.com',
'xxx@mail.com',
);
} else {
$destination = 'Leveranciers';
// Leveranciers order
$body = '{"order": {';
$body.= '"debiteurennummer": "xxxx",';
$body.= '"aflever_bedrijfsnaam": ' . json_encode( $bedrijfsnaam ) . ',';
$body.= '"aflever_straat": ' . json_encode( $straat ) . ',';
$body.= '"email_klant": ' . json_encode( $mail_klant ) . ',';
$body.= '"aflever_huisnr": ' . json_encode( $huisnr ) . ',';
$body.= '"aflever_postcode": ' . json_encode( $postcode ) . ',';
$body.= '"aflever_plaats": ' . json_encode( $plaats ) . ',';
$body.= '"aflever_land": ' . json_encode( $land ) . ',';
$body.= '"aflever_telefoon": ' . json_encode( $telefoon ) . ',';
$body.= '"referentie_klant": "HELPO #' . $referentie_klant . '",';
$body.= '"opmerkingen": ' . json_encode( $opmerkingen ) . ',';
$body.= '"products": {"product":' . json_encode( $leveranciers_products ) . '}';
$body.= '}}';
$multiple_recipients = array (
//'xxx@mail.com',
'xxx@mail.com',
'xxx@mail.com',
);
}
$subject = 'Helpo webshop orderid: ' . $referentie_klant;
$headers[] = 'From: Helpo ';
$headers[] = 'Content-Type: text/html; charset=UTF-8';
// wp_mail( $to, $subject, $body, $headers ); //
if ( wp_mail( $multiple_recipients, $subject, $body, $headers, $attachments ) ) {
$logger->debug( 'Sent for order #' . $order->get_id() . ' ' . $destination, $context );
// Record we have sent the email to prevent sending it again.
$order->update_meta_data( 'protempo_sent_email', 'Yes' );
$order->save();
} else {
$logger->debug( 'Failure to send email for order #' . $order->get_id(), $context );
}
}
Я попробовал добавить «механизм ожидания». но, похоже, это не решает проблему.
add_action('woocommerce_order_status_processing', 'protempo_maybe_send_order_mail', 2000, 1);
function protempo_maybe_send_order_mail($order_id) {
$logger = wc_get_logger();
$context = array('source' => 'protempo');
// Haal de bestelling op
$order = wc_get_order($order_id);
// Controleer of de bestelling bestaat
if (!$order) {
$logger->debug('Order not found for ID: ' . $order_id, $context);
return;
}
// Verzendmail niet voor lokale afhaling
foreach ($order->get_shipping_methods() as $shipping_methods) {
$shipping_method_id = $shipping_methods->get_method_id();
}
if ('local_pickup' == $shipping_method_id) {
$logger->debug('Not sent for order #' . $order->get_id() . ', reason: shipping is local pickup.', $context);
return;
}
// Controleer of de bestelling is geannuleerd of mislukt
if (in_array($order->get_status(), array('cancelled', 'failed'))) {
$logger->debug('Not sent for order #' . $order->get_id() . ', reason: failed or cancelled.', $context);
return;
}
$order_meta = get_post_meta($order_id);
$pakbon = $order_meta['_wpo_wcpdf_packing_slip_archived'][0];
$pakbon_url = 'https://woocommerce-915068-4990040.clou ... 0/archive/';
// Wacht tot de bijlage beschikbaar is
$timeout = 120; // Maximum wachttijd in seconden
$wait_time = 5; // Hoeveel tijd er tussen elke check moet zitten
$elapsed_time = 0;
while (!file_exists(WP_CONTENT_DIR . "/uploads/wpo_wcpdf_26c85ba985c77a4a0b8c72f6abcfac50/archive/" . $pakbon) && $elapsed_time < $timeout) {
sleep($wait_time);
$elapsed_time += $wait_time;
}
// Controleer nogmaals of de bijlage bestaat
if (!file_exists(WP_CONTENT_DIR . "/uploads/wpo_wcpdf_26c85ba985c77a4a0b8c72f6abcfac50/archive/" . $pakbon)) {
$logger->debug('Not sent for order #' . $order->get_id() . ', reason: packing slip not available after waiting.', $context);
return;
}
// De rest van je logica om de e-mail te verzenden
// ...
// Bij voorbeeld: $attachments = array(...); hier na de controle
if (wp_mail($multiple_recipients, $subject, $body, $headers, $attachments)) {
$logger->debug('Sent for order #' . $order->get_id() . ' ' . $destination, $context);
$order->update_meta_data('protempo_sent_email', 'Yes');
$order->save();
} else {
$logger->debug('Failure to send email for order #' . $order->get_id(), $context);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... merce-mail
Добавить упаковочный лист в почту в почте Woocommerce ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1730297801
Anonymous
Я хочу добавить упаковочную накладную в автоматическое электронное письмо.
Похоже, это работает хорошо, когда я отправляю письмо, например, при изменении статуса заказа.
когда я запускаю письмо по статусу = обработка, упаковочный лист не прикреплён.
Думаю, это вызвано тем, что документ ещё не создан.
Когда я выполняю код после создания документа, все работает нормально.
это текущий код:
add_action('woocommerce_order_status_processing', 'protempo_maybe_send_order_mail', 2000, 1);
function protempo_maybe_send_order_mail( $order_id ) {
$logger = wc_get_logger();
$context = array( 'source' => 'protempo' );
$order = wc_get_order( $order_id );
foreach ( $order->get_shipping_methods() as $shipping_methods ) {
$shipping_method_id = $shipping_methods->get_method_id();
}
if ( 'local_pickup' == $shipping_method_id ) {
$logger->debug( 'Not sent for order #' . $order->get_id() . ', reason: shipping is local pickup.', $context );
return; // Don't send the email for local pickup ;
}
if ( in_array( $order->get_status(), array( 'cancelled', 'failed' ) ) ) {
$logger->debug( 'Not sent for order #' . $order->get_id() . ', reason: failed or cancelled.', $context );
return; // Don't send the email for failed or cancelled orders;
}
$order_meta = get_post_meta( $order_id );
$protempo_products = array();
$leveranciers_products = array();
foreach ( $order->get_items() as $item_id => $item ) {
$product_id = $item->get_product()->get_id();
// Only products wiht artikelnummer.
if ( get_post_meta( $product_id, '_protempoartikelnummer', true ) ) {
$protempo_products[] = array(
'code' => get_post_meta( $product_id, '_protempoartikelnummer', true ),
'qty' => $item->get_quantity()
);
} else {
// Only products wiht leveranciers_id.
if ( get_post_meta( $product_id, '_leveranciers_id', true ) ) {
$leveranciers_products[] = array(
'code' => get_post_meta( $product_id, '_leveranciers_id', true ),
'qty' => $item->get_quantity()
);
}
}
}
if ( 0 == count( $protempo_products ) && 0 == count( $leveranciers_products ) ) {
$logger->debug( 'Not sent for order #' . $order->get_id() . ', reason: no protempo/leveranciers products found.', $context );
return; // No protempo/leveranciers products to be emailed.
}
$bedrijfsnaam = $order_meta['_shipping_company'][0];
if ( $bedrijfsnaam == '' ) {
$bedrijfsnaam = $order_meta['_shipping_first_name'][0] . ' ' . $order_meta['_shipping_last_name'][0] . ' (particulier)';
}
$straat = $order_meta['_shipping_address_1'][0];
$huisnr = $order_meta['_shipping_address_2'][0];
$postcode = $order_meta['_shipping_postcode'][0];
$plaats = $order_meta['_shipping_city'][0];
$land = $order_meta['_shipping_country'][0];
$telefoon = $order_meta['_shipping_phone'][0];
$referentie_klant = $order->get_order_number();
$pakbon_url = 'https://woocommerce-915068-4990040.cloudwaysapps.com/wp-content/uploads/wpo_wcpdf_26c85ba985c77a4a0b8c72f6abcfac50/archive/';
$pakbon = $order_meta['_wpo_wcpdf_packing_slip_archived'][0];
$mail_klant = $order_meta['_billing_email'][0];
$referentieklant = utf8_encode( $order_meta['_billing_reference'][0] );
$opmerkingen = utf8_encode( $order->get_customer_note() );
if ( count( $protempo_products ) ) {
$destination = 'protempo';
// Protempo order
$body = '{"order": {';
$body.= '"debiteurennummer": "52866",';
$body.= '"aflever_straat": ' . json_encode( $straat ) . ',';
$body.= '"email_klant": ' . json_encode( $mail_klant ) . ',';
$body.= '"aflever_bedrijfsnaam": ' . json_encode( $bedrijfsnaam ) . ',';
$body.= '"aflever_straat": ' . json_encode( $straat ) . ',';
$body.= '"aflever_huisnr": ' . json_encode( $huisnr ) . ',';
$body.= '"aflever_postcode": ' . json_encode( $postcode ) . ',';
$body.= '"aflever_plaats": ' . json_encode( $plaats ) . ',';
$body.= '"aflever_land": ' . json_encode( $land ) . ',';
$body.= '"aflever_telefoon": ' . json_encode( $telefoon ) . ',';
$body.= '"referentie_klant": "HELPO #' . $referentie_klant . '",';
$body.= '"opmerkingen": ' . json_encode( $opmerkingen ) . ',';
$body.= '"products": {"product":' . json_encode( $protempo_products ) . '}';
$body.= '}}';
$body.= "
je kan de pakbon downoaden via: " .$pakbon_url.$pakbon;
$attachments = array(WP_CONTENT_DIR."/uploads/wpo_wcpdf_26c85ba985c77a4a0b8c72f6abcfac50/archive/". $pakbon);
$multiple_recipients = array (
'xxx@mail.com',
'xxx@mail.com',
);
} else {
$destination = 'Leveranciers';
// Leveranciers order
$body = '{"order": {';
$body.= '"debiteurennummer": "xxxx",';
$body.= '"aflever_bedrijfsnaam": ' . json_encode( $bedrijfsnaam ) . ',';
$body.= '"aflever_straat": ' . json_encode( $straat ) . ',';
$body.= '"email_klant": ' . json_encode( $mail_klant ) . ',';
$body.= '"aflever_huisnr": ' . json_encode( $huisnr ) . ',';
$body.= '"aflever_postcode": ' . json_encode( $postcode ) . ',';
$body.= '"aflever_plaats": ' . json_encode( $plaats ) . ',';
$body.= '"aflever_land": ' . json_encode( $land ) . ',';
$body.= '"aflever_telefoon": ' . json_encode( $telefoon ) . ',';
$body.= '"referentie_klant": "HELPO #' . $referentie_klant . '",';
$body.= '"opmerkingen": ' . json_encode( $opmerkingen ) . ',';
$body.= '"products": {"product":' . json_encode( $leveranciers_products ) . '}';
$body.= '}}';
$multiple_recipients = array (
//'xxx@mail.com',
'xxx@mail.com',
'xxx@mail.com',
);
}
$subject = 'Helpo webshop orderid: ' . $referentie_klant;
$headers[] = 'From: Helpo ';
$headers[] = 'Content-Type: text/html; charset=UTF-8';
// wp_mail( $to, $subject, $body, $headers ); //
if ( wp_mail( $multiple_recipients, $subject, $body, $headers, $attachments ) ) {
$logger->debug( 'Sent for order #' . $order->get_id() . ' ' . $destination, $context );
// Record we have sent the email to prevent sending it again.
$order->update_meta_data( 'protempo_sent_email', 'Yes' );
$order->save();
} else {
$logger->debug( 'Failure to send email for order #' . $order->get_id(), $context );
}
}
Я попробовал добавить «механизм ожидания». но, похоже, это не решает проблему.
add_action('woocommerce_order_status_processing', 'protempo_maybe_send_order_mail', 2000, 1);
function protempo_maybe_send_order_mail($order_id) {
$logger = wc_get_logger();
$context = array('source' => 'protempo');
// Haal de bestelling op
$order = wc_get_order($order_id);
// Controleer of de bestelling bestaat
if (!$order) {
$logger->debug('Order not found for ID: ' . $order_id, $context);
return;
}
// Verzendmail niet voor lokale afhaling
foreach ($order->get_shipping_methods() as $shipping_methods) {
$shipping_method_id = $shipping_methods->get_method_id();
}
if ('local_pickup' == $shipping_method_id) {
$logger->debug('Not sent for order #' . $order->get_id() . ', reason: shipping is local pickup.', $context);
return;
}
// Controleer of de bestelling is geannuleerd of mislukt
if (in_array($order->get_status(), array('cancelled', 'failed'))) {
$logger->debug('Not sent for order #' . $order->get_id() . ', reason: failed or cancelled.', $context);
return;
}
$order_meta = get_post_meta($order_id);
$pakbon = $order_meta['_wpo_wcpdf_packing_slip_archived'][0];
$pakbon_url = 'https://woocommerce-915068-4990040.cloudwaysapps.com/wp-content/uploads/wpo_wcpdf_26c85ba985c77a4a0b8c72f6abcfac50/archive/';
// Wacht tot de bijlage beschikbaar is
$timeout = 120; // Maximum wachttijd in seconden
$wait_time = 5; // Hoeveel tijd er tussen elke check moet zitten
$elapsed_time = 0;
while (!file_exists(WP_CONTENT_DIR . "/uploads/wpo_wcpdf_26c85ba985c77a4a0b8c72f6abcfac50/archive/" . $pakbon) && $elapsed_time < $timeout) {
sleep($wait_time);
$elapsed_time += $wait_time;
}
// Controleer nogmaals of de bijlage bestaat
if (!file_exists(WP_CONTENT_DIR . "/uploads/wpo_wcpdf_26c85ba985c77a4a0b8c72f6abcfac50/archive/" . $pakbon)) {
$logger->debug('Not sent for order #' . $order->get_id() . ', reason: packing slip not available after waiting.', $context);
return;
}
// De rest van je logica om de e-mail te verzenden
// ...
// Bij voorbeeld: $attachments = array(...); hier na de controle
if (wp_mail($multiple_recipients, $subject, $body, $headers, $attachments)) {
$logger->debug('Sent for order #' . $order->get_id() . ' ' . $destination, $context);
$order->update_meta_data('protempo_sent_email', 'Yes');
$order->save();
} else {
$logger->debug('Failure to send email for order #' . $order->get_id(), $context);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79140617/add-packaging-slip-to-mail-in-woocommerce-mail[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия