Automattic\WooCommerce\Internal\Admin\Settings
Payments::get_payment_providers() │ public │ WC 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() 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§ion=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; }