WC_Email_Customer_Fulfillment_Created::maybe_init_fulfillment_for_previewprivateWC 10.1.0

Initialize fulfillment for email preview.

This method sets up a dummy fulfillment object when the email is being previewed in the admin.

Method of the class: WC_Email_Customer_Fulfillment_Created{}

Hooks from the method

Returns

null. Nothing (null).

Usage

// private - for code of main (parent) class only
$result = $this->maybe_init_fulfillment_for_preview( $order );
$order(WC_Order) (required)
The order object.

Changelog

Since 10.1.0 Introduced.

WC_Email_Customer_Fulfillment_Created::maybe_init_fulfillment_for_preview() code WC 10.7.0

private function maybe_init_fulfillment_for_preview( $order ) {
	/**
	 * Filter to determine if this is an email preview.
	 *
	 * @since 9.8.0
	 */
	$is_email_preview = apply_filters( 'woocommerce_is_email_preview', false );
	if ( $is_email_preview ) {
		// If this is a preview, we need to set up a dummy fulfillment object.
		$this->fulfillment = new Fulfillment();
		$this->fulfillment->set_items(
			array_map(
				function ( $item ) {
					return array(
						'item_id' => $item->get_id(),
						'qty'     => 1,
					);
				},
				$order->get_items()
			)
		);

		// Some private meta data to simulate a real fulfillment.
		$this->fulfillment->add_meta_data( '_tracking_number', '123456789' );
		$this->fulfillment->add_meta_data( '_shipment_provider', 'dhl' );
		$this->fulfillment->add_meta_data( '_tracking_url', 'https://www.dhl.com/tracking/123456789' );
		// Some public data to simulate a real fulfillment.
		$this->fulfillment->add_meta_data( 'service', 'Standard Shipping' );
		$this->fulfillment->add_meta_data( 'expected_delivery', '2025-06-30' );

		// Add translations for metadata keys.
		add_filter(
			'woocommerce_fulfillment_meta_key_translations',
			function ( $keys ) {
				$keys['service']           = __( 'Service', 'woocommerce' );
				$keys['expected_delivery'] = __( 'Expected Delivery', 'woocommerce' );
				return $keys;
			}
		);
	}
}