Automattic\WooCommerce\Internal\Admin\Settings\PaymentsProviders
WooPayments::enhance_extension_suggestion
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() 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;
}