Automattic\WooCommerce\Internal\Admin\Settings

Payments::get_payment_providers()publicWC 1.0

Get the payment provider details list for the settings page.

Метод класса: Payments{}

Хуков нет.

Возвращает

Массив. The payment providers details list.

Использование

$Payments = new Payments();
$Payments->get_payment_providers( $location ): array;
$location(строка) (обязательный)
The location for which the providers are being determined. This is a ISO 3166-1 alpha-2 country code.

Код Payments::get_payment_providers() WC 9.6.0

public function get_payment_providers( string $location ): array {
	$payment_gateways = $this->providers->get_payment_gateways();
	$suggestions      = array();

	$providers_order_map = $this->providers->get_order_map();

	$payment_providers = array();

	// Only include suggestions if the requesting user can install plugins.
	if ( current_user_can( 'install_plugins' ) ) {
		$suggestions = $this->providers->get_extension_suggestions( $location, self::SUGGESTIONS_CONTEXT );
	}
	// If we have preferred suggestions, add them to the providers list.
	if ( ! empty( $suggestions['preferred'] ) ) {
		// Sort them by priority, ASC.
		usort(
			$suggestions['preferred'],
			function ( $a, $b ) {
				return $a['_priority'] <=> $b['_priority'];
			}
		);
		$added_to_top = 0;
		foreach ( $suggestions['preferred'] as $suggestion ) {
			$suggestion_order_map_id = $this->providers->get_suggestion_order_map_id( $suggestion['id'] );
			// Determine the suggestion's order value.
			// If we don't have an order for it, add it to the top but keep the relative order (PSP first, APM second).
			if ( ! isset( $providers_order_map[ $suggestion_order_map_id ] ) ) {
				$providers_order_map = Utils::order_map_add_at_order( $providers_order_map, $suggestion_order_map_id, $added_to_top );
				++$added_to_top;
			}

			// Change suggestion details to align it with a regular payment gateway.
			$suggestion['_suggestion_id'] = $suggestion['id'];
			$suggestion['id']             = $suggestion_order_map_id;
			$suggestion['_type']          = PaymentProviders::TYPE_SUGGESTION;
			$suggestion['_order']         = $providers_order_map[ $suggestion_order_map_id ];
			unset( $suggestion['_priority'] );

			$payment_providers[] = $suggestion;
		}
	}

	foreach ( $payment_gateways as $payment_gateway ) {
		// Determine the gateway's order value.
		// If we don't have an order for it, add it to the end.
		if ( ! isset( $providers_order_map[ $payment_gateway->id ] ) ) {
			$providers_order_map = Utils::order_map_add_at_order( $providers_order_map, $payment_gateway->id, count( $payment_providers ) );
		}

		$payment_providers[] = $this->providers->get_payment_gateway_details(
			$payment_gateway,
			$providers_order_map[ $payment_gateway->id ],
			$location
		);
	}

	// Add offline payment methods group entry if we have offline payment methods.
	if ( in_array( PaymentProviders::TYPE_OFFLINE_PM, array_column( $payment_providers, '_type' ), true ) ) {
		// Determine the item's order value.
		// If we don't have an order for it, add it to the end.
		if ( ! isset( $providers_order_map[ PaymentProviders::OFFLINE_METHODS_ORDERING_GROUP ] ) ) {
			$providers_order_map = Utils::order_map_add_at_order( $providers_order_map, PaymentProviders::OFFLINE_METHODS_ORDERING_GROUP, count( $payment_providers ) );
		}

		$payment_providers[] = array(
			'id'          => PaymentProviders::OFFLINE_METHODS_ORDERING_GROUP,
			'_type'       => PaymentProviders::TYPE_OFFLINE_PMS_GROUP,
			'_order'      => $providers_order_map[ PaymentProviders::OFFLINE_METHODS_ORDERING_GROUP ],
			'title'       => __( 'Take offline payments', 'woocommerce' ),
			'description' => __( 'Accept payments offline using multiple different methods. These can also be used to test purchases.', 'woocommerce' ),
			'icon'        => plugins_url( 'assets/images/payment_methods/cod.svg', WC_PLUGIN_FILE ),
			// The offline PMs (and their group) are obviously from WooCommerce, and WC is always active.
			'plugin'      => array(
				'_type'  => 'wporg',
				'slug'   => 'woocommerce',
				'file'   => '', // This pseudo-provider should have no use for the plugin file.
				'status' => PaymentProviders::EXTENSION_ACTIVE,
			),
			'management'  => array(
				'_links' => array(
					'settings' => array(
						'href' => admin_url( 'admin.php?page=wc-settings&tab=checkout&section=offline' ),
					),
				),
			),
		);
	}

	// Determine the final, standardized providers order map.
	$providers_order_map = $this->providers->enhance_order_map( $providers_order_map );
	// Enforce the order map on all providers, just in case.
	foreach ( $payment_providers as $key => $provider ) {
		$payment_providers[ $key ]['_order'] = $providers_order_map[ $provider['id'] ];
	}
	// NOTE: For now, save it back to the DB. This is temporary until we have a better way to handle this!
	$this->providers->save_order_map( $providers_order_map );

	// Sort the payment providers by order, ASC.
	usort(
		$payment_providers,
		function ( $a, $b ) {
			return $a['_order'] <=> $b['_order'];
		}
	);

	return $payment_providers;
}