compose_label_data() liest das Meta-Feld _pr_shipment_dhl_label_tracking (DHL for WooCommerce); write_order_items() schickt Label-URL + Sendungsnummer beim wp/order-Transfer mit. Neuer Listener auf pr_save_dhl_label_tracking reicht Labels nach, die erst nach der Übertragung erstellt werden (nur bei bereits übertragenen Bestellungen, via neuem wp/label-Endpoint). Connector-Doku auf die konkrete Umsetzung aktualisiert. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
59 lines
1.8 KiB
PHP
59 lines
1.8 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Forward DHL labels created by the "DHL for WooCommerce" plugin.
|
|
*
|
|
* Normal case: the label is created BEFORE the order is forwarded - then
|
|
* write_order_items() sends label + tracking number along with the order.
|
|
* This listener covers the other case: the label is created (or re-created)
|
|
* AFTER the order has already been forwarded to the PARTNERCENTER.
|
|
*/
|
|
|
|
if (! defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
class PARTNERCENTER_API_WooCommerce_DHL_Label_Class
|
|
{
|
|
/**
|
|
* PARTNERCENTER_API_WooCommerce_DHL_Label_Class constructor.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
|
|
// Listen to label creation by "DHL for WooCommerce"
|
|
// (fires once per tracking number, after the label meta was saved)
|
|
add_action('pr_save_dhl_label_tracking', [$this, 'pr_save_dhl_label_tracking'], 20, 2);
|
|
|
|
}
|
|
|
|
/**
|
|
* Push a freshly created DHL label to PARTNERCENTER.
|
|
*
|
|
* @param array $tracking_details Carrier, tracking number, ship date, tracking URL
|
|
*
|
|
* @since 1.4.0
|
|
*/
|
|
public function pr_save_dhl_label_tracking(int $order_id, $tracking_details)
|
|
{
|
|
|
|
// Only orders that have already been forwarded to the PARTNERCENTER -
|
|
// otherwise the label is sent along with the order transfer anyway
|
|
if (empty(get_post_meta($order_id, '_partnercenter_api_order_fulfillment_forwarded', true))) {
|
|
return;
|
|
}
|
|
|
|
// Load API
|
|
$partnercenter = apply_filters('PARTNERCENTER_API', false);
|
|
if ($partnercenter === false) {
|
|
return;
|
|
}
|
|
|
|
// Push label + tracking number to PARTNERCENTER
|
|
// (endpoint is idempotent - repeated calls just overwrite)
|
|
$partnercenter->send_order_label($order_id);
|
|
|
|
}
|
|
}
|
|
|
|
new PARTNERCENTER_API_WooCommerce_DHL_Label_Class;
|