Добавить упаковочный лист в почту в почте WoocommercePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Добавить упаковочный лист в почту в почте Woocommerce

Сообщение 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.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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»