Automattic\WooCommerce\Internal\Orders

OrderActionsRestController::select_default_templateprivateWC 1.0

Select the best email template from available templates using priority ordering.

Method of the class: OrderActionsRestController{}

Returns

WC_Email|null.

Usage

// private - for code of main (parent) class only
$result = $this->select_default_template( $order, $available_templates ): ?WC_Email;
$order(WC_Order) (required)
The order.
$available_templates(WC_Email[]) (required)
Already-filtered available templates.

OrderActionsRestController::select_default_template() code WC 10.7.0

private function select_default_template( WC_Order $order, array $available_templates ): ?WC_Email {
	if ( empty( $available_templates ) ) {
		return null;
	}

	$default_preferred_ids = $this->get_default_preferred_template_ids( $order );

	/**
	 * Filter the preferred template IDs for auto-selecting an email template.
	 *
	 * Template IDs earlier in the array are preferred. Only templates that
	 * are also in the available templates list will be considered.
	 *
	 * @since 10.7.0
	 *
	 * @param string[] $preferred_template_ids Ordered array of template IDs (most preferred first).
	 * @param WC_Order $order                  The order.
	 * @param string[] $available              The available template IDs for this order.
	 */
	$preferred_template_ids = apply_filters(
		'woocommerce_rest_order_actions_email_preferred_template_ids',
		$default_preferred_ids,
		$order,
		array_map( fn( $t ) => $t->id, $available_templates )
	);

	if ( ! is_array( $preferred_template_ids ) ) {
		$preferred_template_ids = $default_preferred_ids;
	}

	$preferred_template_ids = array_filter( array_unique( $preferred_template_ids ), 'is_string' );

	foreach ( $preferred_template_ids as $candidate_id ) {
		$template = $this->get_email_template_by_id( $candidate_id, $available_templates );
		if ( $template ) {
			return $template;
		}
	}

	// Last resort: first available template.
	$first = reset( $available_templates );
	return $first ? $first : null;
}