Automattic\WooCommerce\Internal\Admin\Settings\PaymentsProviders

WooPayments::enhance_extension_suggestionpublicWC 1.0

Enhance this provider's payment extension suggestion with additional information.

The details added do not require the payment extension to be active or a gateway instance.

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

Хуков нет.

Возвращает

Массив. The enhanced payment extension suggestion details.

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

$WooPayments = new WooPayments();
$WooPayments->enhance_extension_suggestion( $extension_suggestion ): array;
$extension_suggestion(массив) (обязательный)
The extension suggestion details.

Код WooPayments::enhance_extension_suggestion() WC 10.3.4

public function enhance_extension_suggestion( array $extension_suggestion ): array {
	$extension_suggestion = parent::enhance_extension_suggestion( $extension_suggestion );

	// If the extension is installed, we can get the plugin data and act upon it.
	if ( ! empty( $extension_suggestion['plugin']['file'] ) &&
		isset( $extension_suggestion['plugin']['status'] ) &&
		in_array( $extension_suggestion['plugin']['status'], array( PaymentsProviders::EXTENSION_INSTALLED, PaymentsProviders::EXTENSION_ACTIVE ), true ) ) {

		// Switch to the native in-context onboarding type if the WooPayments extension its version is compatible.
		// We need to put back the '.php' extension to construct the plugin filename.
		$plugin_data = PluginsHelper::get_plugin_data( $extension_suggestion['plugin']['file'] . '.php' );
		if ( $plugin_data && ! empty( $plugin_data['Version'] ) &&
			version_compare( $plugin_data['Version'], PaymentsProviders\WooPayments\WooPaymentsService::EXTENSION_MINIMUM_VERSION, '>=' ) ) {

			$extension_suggestion['onboarding']['type'] = self::ONBOARDING_TYPE_NATIVE_IN_CONTEXT;
		}
	} else {
		// We assume the latest version of the WooPayments extension will be installed.
		$extension_suggestion['onboarding']['type'] = self::ONBOARDING_TYPE_NATIVE_IN_CONTEXT;
	}

	// Add onboarding state.
	if ( ! isset( $extension_suggestion['onboarding']['state'] ) || ! is_array( $extension_suggestion['onboarding']['state'] ) ) {
		$extension_suggestion['onboarding']['state'] = array();
	}
	// Add the store's WPCOM/Jetpack connection state to the onboarding state.
	$extension_suggestion['onboarding']['state'] = array_merge(
		$extension_suggestion['onboarding']['state'],
		$this->get_wpcom_connection_state()
	);

	// Add onboarding links.
	if ( empty( $extension_suggestion['onboarding']['_links'] ) || ! is_array( $extension_suggestion['onboarding']['_links'] ) ) {
		$extension_suggestion['onboarding']['_links'] = array();
	}

	// We only add the preload link if we don't have a working WPCOM connection.
	// This is because WooPayments onboarding preloading focuses on hydrating the WPCOM connection.
	if ( ! $extension_suggestion['onboarding']['state']['wpcom_has_working_connection'] ) {
		try {
			/**
			 * The WooPayments REST controller instance.
			 *
			 * @var WooPaymentsRestController $rest_controller
			 */
			$rest_controller = wc_get_container()->get( WooPaymentsRestController::class );

			// Add the onboarding preload URL.
			$extension_suggestion['onboarding']['_links']['preload'] = array(
				'href' => rest_url( $rest_controller->get_rest_url_path( 'onboarding/preload' ) ),
			);
		} catch ( \Throwable $e ) {
			// If the REST controller is not available, we can't preload the onboarding data.
			// This is not a critical error, so we just ignore it.
			// Log so we can investigate.
			SafeGlobalFunctionProxy::wc_get_logger()->error(
				'Failed to get the WooPayments REST controller instance: ' . $e->getMessage(),
				array(
					'source' => 'settings-payments',
				)
			);
		}
	}

	return $extension_suggestion;
}