Automattic\WooCommerce\Internal\Admin\Settings

PaymentsProviders::group_gateways_by_extensionprivateWC 1.0

Group payment gateways by their plugin extension filename.

Method of the class: PaymentsProviders{}

No Hooks.

Returns

Array. The grouped payment gateway instances, keyed by the plugin file. Each group contains an array of payment gateway instances that belong to the same plugin. If a payment gateway does not have a corresponding plugin file, it will be grouped under the 'unknown_extension' key.

Usage

// private - for code of main (parent) class only
$result = $this->group_gateways_by_extension( $gateways, $country_code ): array;
$gateways(WC_Payment_Gateway[]) (required)
The list of payment gateway instances to group.
$country_code(string)
The country code for which the gateways are being generated. This should be an ISO 3166-1 alpha-2 country code.
Default: ''

PaymentsProviders::group_gateways_by_extension() code WC 10.7.0

private function group_gateways_by_extension( array $gateways, string $country_code = '' ): array {
	$grouped = array(
		// This is the group for gateways that we don't know how to group by extension.
		// It can be used for gateways that are not registered by a WP plugin.
		'unknown_extension' => array(),
	);

	foreach ( $gateways as $gateway ) {
		// Get the payment gateway details, but use a dummy gateway order since it is inconsequential here.
		$gateway_details = $this->get_payment_gateway_details( $gateway, 0, $country_code );
		// If we don't have the necessary plugin details, put it in the unknown group.
		if ( empty( $gateway_details ) || ! isset( $gateway_details['plugin'] ) || empty( $gateway_details['plugin']['file'] ) ) {
			$grouped['unknown_extension'][] = $gateway;
			continue;
		}

		if ( empty( $grouped[ $gateway_details['plugin']['file'] ] ) ) {
			$grouped[ $gateway_details['plugin']['file'] ] = array();
		}

		$grouped[ $gateway_details['plugin']['file'] ][] = $gateway;
	}

	return $grouped;
}