isset( $this->block_theme ) ) { return $this->block_theme; } $paths_to_index_block_template = array( $this->get_file_path( '/templates/index.html' ), $this->get_file_path( '/block-templates/index.html' ), ); $this->block_theme = false; foreach ( $paths_to_index_block_template as $path_to_index_block_template ) { if ( is_file( $path_to_index_block_template ) && is_readable( $path_to_index_block_template ) ) { $this->block_theme = true; break; } } return $this->block_theme; } /** * Retrieves the path of a file in the theme. * * Searches in the stylesheet directory before the template directory so themes * which inherit from a parent theme can just override one file. * * @since 5.9.0 * * @param string $file Optional. File to search for in the stylesheet directory. * @return string The path of the file. */ public function get_file_path( $file = '' ) { $file = ltrim( $file, '/' ); $stylesheet_directory = $this->get_stylesheet_directory(); $template_directory = $this->get_template_directory(); if ( empty( $file ) ) { $path = $stylesheet_directory; } elseif ( $stylesheet_directory !== $template_directory && file_exists( $stylesheet_directory . '/' . $file ) ) { $path = $stylesheet_directory . '/' . $file; } else { $path = $template_directory . '/' . $file; } /** This filter is documented in wp-includes/link-template.php */ return apply_filters( 'theme_file_path', $path, $file ); } /** * Determines the latest WordPress default theme that is installed. * * This hits the filesystem. * * @since 4.4.0 * * @return WP_Theme|false Object, or false if no theme is installed, which would be bad. */ public static function get_core_default_theme() { foreach ( array_reverse( self::$default_themes ) as $slug => $name ) { $theme = wp_get_theme( $slug ); if ( $theme->exists() ) { return $theme; } } return false; } /** * Returns array of stylesheet names of themes allowed on the site or network. * * @since 3.4.0 * * @param int $blog_id Optional. ID of the site. Defaults to the current site. * @return string[] Array of stylesheet names. */ public static function get_allowed( $blog_id = null ) { /** * Filters the array of themes allowed on the network. * * Site is provided as context so that a list of network allowed themes can * be filtered further. * * @since 4.5.0 * * @param string[] $allowed_themes An array of theme stylesheet names. * @param int $blog_id ID of the site. */ $network = (array) apply_filters( 'network_allowed_themes', self::get_allowed_on_network(), $blog_id ); return $network + self::get_allowed_on_site( $blog_id ); } /** * Returns array of stylesheet names of themes allowed on the network. * * @since 3.4.0 * * @return string[] Array of stylesheet names. */ public static function get_allowed_on_network() { static $allowed_themes; if ( ! isset( $allowed_themes ) ) { $allowed_themes = (array) get_site_option( 'allowedthemes' ); } /** * Filters the array of themes allowed on the network. * * @since MU (3.0.0) * * @param string[] $allowed_themes An array of theme stylesheet names. */ $allowed_themes = apply_filters( 'allowed_themes', $allowed_themes ); return $allowed_themes; } /** * Returns array of stylesheet names of themes allowed on the site. * * @since 3.4.0 * * @param int $blog_id Optional. ID of the site. Defaults to the current site. * @return string[] Array of stylesheet names. */ public static function get_allowed_on_site( $blog_id = null ) { static $allowed_themes = array(); if ( ! $blog_id || ! is_multisite() ) { $blog_id = get_current_blog_id(); } if ( isset( $allowed_themes[ $blog_id ] ) ) { /** * Filters the array of themes allowed on the site. * * @since 4.5.0 * * @param string[] $allowed_themes An array of theme stylesheet names. * @param int $blog_id ID of the site. Defaults to current site. */ return (array) apply_filters( 'site_allowed_themes', $allowed_themes[ $blog_id ], $blog_id ); } $current = get_current_blog_id() === $blog_id; if ( $current ) { $allowed_themes[ $blog_id ] = get_option( 'allowedthemes' ); } else { switch_to_blog( $blog_id ); $allowed_themes[ $blog_id ] = get_option( 'allowedthemes' ); restore_current_blog(); } /* * This is all super old MU back compat joy. * 'allowedthemes' keys things by stylesheet. 'allowed_themes' keyed things by name. */ if ( false === $allowed_themes[ $blog_id ] ) { if ( $current ) { $allowed_themes[ $blog_id ] = get_option( 'allowed_themes' ); } else { switch_to_blog( $blog_id ); $allowed_themes[ $blog_id ] = get_option( 'allowed_themes' ); restore_current_blog(); } if ( ! is_array( $allowed_themes[ $blog_id ] ) || empty( $allowed_themes[ $blog_id ] ) ) { $allowed_themes[ $blog_id ] = array(); } else { $converted = array(); $themes = wp_get_themes(); foreach ( $themes as $stylesheet => $theme_data ) { if ( isset( $allowed_themes[ $blog_id ][ $theme_data->get( 'Name' ) ] ) ) { $converted[ $stylesheet ] = true; } } $allowed_themes[ $blog_id ] = $converted; } // Set the option so we never have to go through this pain again. if ( is_admin() && $allowed_themes[ $blog_id ] ) { if ( $current ) { update_option( 'allowedthemes', $allowed_themes[ $blog_id ], false ); delete_option( 'allowed_themes' ); } else { switch_to_blog( $blog_id ); update_option( 'allowedthemes', $allowed_themes[ $blog_id ], false ); delete_option( 'allowed_themes' ); restore_current_blog(); } } } /** This filter is documented in wp-includes/class-wp-theme.php */ return (array) apply_filters( 'site_allowed_themes', $allowed_themes[ $blog_id ], $blog_id ); } /** * Returns the folder names of the block template directories. * * @since 6.4.0 * * @return string[] { * Folder names used by block themes. * * @type string $wp_template Theme-relative directory name for block templates. * @type string $wp_template_part Theme-relative directory name for block template parts. * } */ public function get_block_template_folders() { // Return set/cached value if available. if ( isset( $this->block_template_folders ) ) { return $this->block_template_folders; } $this->block_template_folders = $this->default_template_folders; $stylesheet_directory = $this->get_stylesheet_directory(); // If the theme uses deprecated block template folders. if ( file_exists( $stylesheet_directory . '/block-templates' ) || file_exists( $stylesheet_directory . '/block-template-parts' ) ) { $this->block_template_folders = array( 'wp_template' => 'block-templates', 'wp_template_part' => 'block-template-parts', ); } return $this->block_template_folders; } /** * Gets block pattern data for a specified theme. * Each pattern is defined as a PHP file and defines * its metadata using plugin-style headers. The minimum required definition is: * * /** * * Title: My Pattern * * Slug: my-theme/my-pattern * * * * The output of the PHP source corresponds to the content of the pattern, e.g.: * *

Hello

* * If applicable, this will collect from both parent and child theme. * * Other settable fields include: * * - Description * - Viewport Width * - Inserter (yes/no) * - Categories (comma-separated values) * - Keywords (comma-separated values) * - Block Types (comma-separated values) * - Post Types (comma-separated values) * - Template Types (comma-separated values) * * @since 6.4.0 * * @return array Block pattern data. */ public function get_block_patterns() { $can_use_cached = ! wp_is_development_mode( 'theme' ); $pattern_data = $this->get_pattern_cache(); if ( is_array( $pattern_data ) ) { if ( $can_use_cached ) { return $pattern_data; } // If in development mode, clear pattern cache. $this->delete_pattern_cache(); } $dirpath = $this->get_stylesheet_directory() . '/patterns'; $pattern_data = array(); if ( ! file_exists( $dirpath ) ) { if ( $can_use_cached ) { $this->set_pattern_cache( $pattern_data ); } return $pattern_data; } $files = (array) self::scandir( $dirpath, 'php', -1 ); /** * Filters list of block pattern files for a theme. * * @since 6.8.0 * * @param array $files Array of theme files found within `patterns` directory. * @param string $dirpath Path of theme `patterns` directory being scanned. */ $files = apply_filters( 'theme_block_pattern_files', $files, $dirpath ); $dirpath = trailingslashit( $dirpath ); if ( ! $files ) { if ( $can_use_cached ) { $this->set_pattern_cache( $pattern_data ); } return $pattern_data; } $default_headers = array( 'title' => 'Title', 'slug' => 'Slug', 'description' => 'Description', 'viewportWidth' => 'Viewport Width', 'inserter' => 'Inserter', 'categories' => 'Categories', 'keywords' => 'Keywords', 'blockTypes' => 'Block Types', 'postTypes' => 'Post Types', 'templateTypes' => 'Template Types', ); $properties_to_parse = array( 'categories', 'keywords', 'blockTypes', 'postTypes', 'templateTypes', ); foreach ( $files as $file ) { $pattern = get_file_data( $file, $default_headers ); if ( empty( $pattern['slug'] ) ) { _doing_it_wrong( __FUNCTION__, sprintf( /* translators: 1: file name. */ __( 'Could not register file "%s" as a block pattern ("Slug" field missing)' ), $file ), '6.0.0' ); continue; } if ( ! preg_match( '/^[A-z0-9\/_-]+$/', $pattern['slug'] ) ) { _doing_it_wrong( __FUNCTION__, sprintf( /* translators: 1: file name; 2: slug value found. */ __( 'Could not register file "%1$s" as a block pattern (invalid slug "%2$s")' ), $file, $pattern['slug'] ), '6.0.0' ); } // Title is a required property. if ( ! $pattern['title'] ) { _doing_it_wrong( __FUNCTION__, sprintf( /* translators: 1: file name. */ __( 'Could not register file "%s" as a block pattern ("Title" field missing)' ), $file ), '6.0.0' ); continue; } // For properties of type array, parse data as comma-separated. foreach ( $properties_to_parse as $property ) { if ( ! empty( $pattern[ $property ] ) ) { $pattern[ $property ] = array_filter( wp_parse_list( (string) $pattern[ $property ] ) ); } else { unset( $pattern[ $property ] ); } } // Parse properties of type int. $property = 'viewportWidth'; if ( ! empty( $pattern[ $property ] ) ) { $pattern[ $property ] = (int) $pattern[ $property ]; } else { unset( $pattern[ $property ] ); } // Parse properties of type bool. $property = 'inserter'; if ( ! empty( $pattern[ $property ] ) ) { $pattern[ $property ] = in_array( strtolower( $pattern[ $property ] ), array( 'yes', 'true' ), true ); } else { unset( $pattern[ $property ] ); } $key = str_replace( $dirpath, '', $file ); $pattern_data[ $key ] = $pattern; } if ( $can_use_cached ) { $this->set_pattern_cache( $pattern_data ); } return $pattern_data; } /** * Gets block pattern cache. * * @since 6.4.0 * @since 6.6.0 Uses transients to cache regardless of site environment. * * @return array|false Returns an array of patterns if cache is found, otherwise false. */ private function get_pattern_cache() { if ( ! $this->exists() ) { return false; } $pattern_data = get_site_transient( 'wp_theme_files_patterns-' . $this->cache_hash ); if ( is_array( $pattern_data ) && $pattern_data['version'] === $this->get( 'Version' ) ) { return $pattern_data['patterns']; } return false; } /** * Sets block pattern cache. * * @since 6.4.0 * @since 6.6.0 Uses transients to cache regardless of site environment. * * @param array $patterns Block patterns data to set in cache. */ private function set_pattern_cache( array $patterns ) { $pattern_data = array( 'version' => $this->get( 'Version' ), 'patterns' => $patterns, ); /** * Filters the cache expiration time for theme files. * * @since 6.6.0 * * @param int $cache_expiration Cache expiration time in seconds. * @param string $cache_type Type of cache being set. */ $cache_expiration = (int) apply_filters( 'wp_theme_files_cache_ttl', self::$cache_expiration, 'theme_block_patterns' ); // We don't want to cache patterns infinitely. if ( $cache_expiration <= 0 ) { _doing_it_wrong( __METHOD__, sprintf( /* translators: %1$s: The filter name.*/ __( 'The %1$s filter must return an integer value greater than 0.' ), 'wp_theme_files_cache_ttl' ), '6.6.0' ); $cache_expiration = self::$cache_expiration; } set_site_transient( 'wp_theme_files_patterns-' . $this->cache_hash, $pattern_data, $cache_expiration ); } /** * Clears block pattern cache. * * @since 6.4.0 * @since 6.6.0 Uses transients to cache regardless of site environment. */ public function delete_pattern_cache() { delete_site_transient( 'wp_theme_files_patterns-' . $this->cache_hash ); } /** * Enables a theme for all sites on the current network. * * @since 4.6.0 * * @param string|string[] $stylesheets Stylesheet name or array of stylesheet names. */ public static function network_enable_theme( $stylesheets ) { if ( ! is_multisite() ) { return; } if ( ! is_array( $stylesheets ) ) { $stylesheets = array( $stylesheets ); } $allowed_themes = get_site_option( 'allowedthemes' ); foreach ( $stylesheets as $stylesheet ) { $allowed_themes[ $stylesheet ] = true; } update_site_option( 'allowedthemes', $allowed_themes ); } /** * Disables a theme for all sites on the current network. * * @since 4.6.0 * * @param string|string[] $stylesheets Stylesheet name or array of stylesheet names. */ public static function network_disable_theme( $stylesheets ) { if ( ! is_multisite() ) { return; } if ( ! is_array( $stylesheets ) ) { $stylesheets = array( $stylesheets ); } $allowed_themes = get_site_option( 'allowedthemes' ); foreach ( $stylesheets as $stylesheet ) { if ( isset( $allowed_themes[ $stylesheet ] ) ) { unset( $allowed_themes[ $stylesheet ] ); } } update_site_option( 'allowedthemes', $allowed_themes ); } /** * Sorts themes by name. * * @since 3.4.0 * * @param WP_Theme[] $themes Array of theme objects to sort (passed by reference). */ public static function sort_by_name( &$themes ) { if ( str_starts_with( get_user_locale(), 'en_' ) ) { uasort( $themes, array( 'WP_Theme', '_name_sort' ) ); } else { foreach ( $themes as $key => $theme ) { $theme->translate_header( 'Name', $theme->headers['Name'] ); } uasort( $themes, array( 'WP_Theme', '_name_sort_i18n' ) ); } } /** * Callback function for usort() to naturally sort themes by name. * * Accesses the Name header directly from the class for maximum speed. * Would choke on HTML but we don't care enough to slow it down with strip_tags(). * * @since 3.4.0 * * @param WP_Theme $a First theme. * @param WP_Theme $b Second theme. * @return int Negative if `$a` falls lower in the natural order than `$b`. Zero if they fall equally. * Greater than 0 if `$a` falls higher in the natural order than `$b`. Used with usort(). */ private static function _name_sort( $a, $b ) { return strnatcasecmp( $a->headers['Name'], $b->headers['Name'] ); } /** * Callback function for usort() to naturally sort themes by translated name. * * @since 3.4.0 * * @param WP_Theme $a First theme. * @param WP_Theme $b Second theme. * @return int Negative if `$a` falls lower in the natural order than `$b`. Zero if they fall equally. * Greater than 0 if `$a` falls higher in the natural order than `$b`. Used with usort(). */ private static function _name_sort_i18n( $a, $b ) { return strnatcasecmp( $a->name_translated, $b->name_translated ); } } ckout is the next generation of payment processing platforms, giving merchants around the world the solutions and direction they need to succeed in today\'s hyper-competitive global market.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/payoneer.png', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/payoneer.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'payoneer-checkout', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.payoneer.com/about/pricing/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/payoneer-checkout/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.payoneer.com/legal-agreements/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://checkoutdocs.payoneer.com/docs/about-woocommerce-integration', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://checkoutdocs.payoneer.com/docs/troubleshoot-woocommerce', ), ), ), self::PAYSTACK => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Paystack', 'woocommerce' ), 'description' => esc_html__( 'Paystack helps African merchants accept one-time and recurring payments online with a modern, safe, and secure payment gateway.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/paystack.png', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/paystack.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woo-paystack', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://paystack.com/pricing', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/paystack/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://paystack.com/terms', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/paystack/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://support.paystack.com/en/articles/2130754', ), ), ), self::PAYTRAIL => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Paytrail', 'woocommerce' ), 'description' => esc_html__( 'Accept all popular payment methods for Finnish B2C and B2B customers', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/paytrail.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'paytrail-for-woocommerce', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.paytrail.com/en/pricing', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/paytrail/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.paytrail.com/en/terms-conditions', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/paytrail-for-woocommerce/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://www.paytrail.com/en/customer-service#merchants', ), ), ), self::PAYU_INDIA => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'PayU India', 'woocommerce' ), 'description' => esc_html__( 'Enable PayU\'s exclusive plugin for WooCommerce to start accepting payments in 100+ payment methods available in India including credit cards, debit cards, UPI, & more!', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/payu.svg', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/payu.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'payu-india', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://payu.in/pricing/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/payu-india/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://payu.in/payu-terms-and-conditions/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://payu.in/plugins/payment-gateway-for-woocommerce-plugin', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://help.payu.in/', ), ), ), self::RAZORPAY => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Razorpay', 'woocommerce' ), 'description' => esc_html__( 'The official Razorpay extension for WooCommerce allows you to accept credit cards, debit cards, netbanking, wallet, and UPI payments.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/razorpay.svg', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/razorpay.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woo-razorpay', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://razorpay.com/pricing/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/razorpay-for-woocommerce/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://razorpay.com/terms/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://razorpay.com/docs/payment-gateway/ecommerce-plugins/woocommerce/woocommerce-pg/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://razorpay.com/support/', ), ), ), self::SQUARE => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Square', 'woocommerce' ), 'description' => esc_html__( 'Securely accept credit and debit cards with one low rate, no surprise fees (custom rates available). Sell in store and track sales and inventory in one place.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/square-black.png', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/square.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-square', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://squareup.com/pricing', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/square/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://squareup.com/legal/general/ua', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/woocommerce-square/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=square', ), ), 'tags' => array( self::TAG_MADE_IN_WOO ), ), self::STRIPE => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Stripe', 'woocommerce' ), 'description' => esc_html__( 'Accept debit and credit cards in 135+ currencies, methods such as Alipay, and one-touch checkout with Apple Pay.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/stripe.png', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/stripe.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-gateway-stripe', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://stripe.com/pricing', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/stripe/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://stripe.com/legal/connect-account', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/stripe', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=stripe', ), ), 'tags' => array( self::TAG_MADE_IN_WOO ), ), self::TILOPAY => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Tilopay', 'woocommerce' ), 'description' => esc_html__( 'Accept credit and debit cards on your WooCommerce store with advanced features like partial refunds, full/partial captures, and 3D Secure security.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/tilopay.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'tilopay', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://tilopay.com/tarifas', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://tilopay.com/tilopay-checkout', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://tilopay.com/terminos-condiciones', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://tilopay.com/documentacion/plataforma-woocommerce', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://cst.support.tilopay.com/servicedesk/customer/portals', ), ), 'tags' => array( self::TAG_PREFERRED ), ), self::VIVA_WALLET => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Viva.com Smart Checkout', 'woocommerce' ), 'description' => esc_html__( 'A European payments solution that allows you to accept payments in over 25 countries and multiple currencies.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/vivacom.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'viva-com-smart-for-woocommerce', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.viva.com/pricing', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/viva-com-smart-for-woocommerce/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.viva.com/terms-portal', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/viva-com-smart-for-woocommerce/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=viva-com-smart-for-woocommerce', ), ), ), self::WOOPAYMENTS => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Accept payments with Woo', 'woocommerce' ), 'description' => esc_html__( 'Credit/debit cards, Apple Pay, Google Pay, and more.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/woopayments.svg', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/woo.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-payments', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://woocommerce.com/document/woopayments/fees-and-debits/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/payments/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://woocommerce.com/document/woopayments/our-policies/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/woopayments/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=woopayments', ), ), 'tags' => array( self::TAG_MADE_IN_WOO, self::TAG_PREFERRED ), ), self::AMAZON_PAY => array( '_type' => self::TYPE_EXPRESS_CHECKOUT, 'title' => esc_html__( 'Amazon Pay', 'woocommerce' ), 'description' => esc_html__( 'Enable a familiar, fast checkout for hundreds of millions of active Amazon customers globally.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/amazonpay.png', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/amazonpay.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-gateway-amazon-payments-advanced', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://pay.amazon.com/help/201212280', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/pay-with-amazon/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://pay.amazon.com/help/201212430', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/amazon-payments-advanced/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=pay-with-amazon', ), ), 'tags' => array( self::TAG_MADE_IN_WOO ), ), self::AFFIRM => array( '_type' => self::TYPE_BNPL, 'title' => esc_html__( 'Affirm', 'woocommerce' ), 'description' => esc_html__( 'Affirm\'s tailored Buy Now Pay Later programs remove price as a barrier, turning browsers into buyers, increasing average order value, and expanding your customer base.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/affirm.png', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/affirm.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-gateway-affirm', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.affirm.com/business', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/woocommerce-gateway-affirm/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.affirm.com/terms', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/woocommerce-gateway-affirm/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=woocommerce-gateway-affirm', ), ), 'tags' => array( self::TAG_MADE_IN_WOO ), ), self::AFTERPAY => array( '_type' => self::TYPE_BNPL, 'title' => esc_html__( 'Afterpay', 'woocommerce' ), 'description' => esc_html__( 'Afterpay allows customers to receive products immediately and pay for purchases over four installments, always interest-free.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/afterpay.png', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/afterpay-clearpay.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'afterpay-gateway-for-woocommerce', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.afterpay.com/for-retailers', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/afterpay/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.afterpay.com/terms-of-service', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/afterpay/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=afterpay', ), ), ), self::CLEARPAY => array( '_type' => self::TYPE_BNPL, 'title' => esc_html__( 'Clearpay', 'woocommerce' ), 'description' => esc_html__( 'Clearpay allows customers to receive products immediately and pay for purchases over four installments, always interest-free.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/afterpay-clearpay.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'clearpay-gateway-for-woocommerce', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.clearpay.co.uk/en-GB/for-retailers', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/clearpay/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.clearpay.co.uk/terms-of-service', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/clearpay/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=clearpay', ), ), ), self::KLARNA => array( '_type' => self::TYPE_BNPL, 'title' => esc_html__( 'Klarna Payments', 'woocommerce' ), 'description' => esc_html__( 'Choose the payment that you want, pay now, pay later or slice it. No credit card numbers, no passwords, no worries.', 'woocommerce' ), 'image' => plugins_url( 'assets/images/onboarding/klarna-black.png', WC_PLUGIN_FILE ), 'icon' => plugins_url( 'assets/images/onboarding/icons/klarna.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'klarna-payments-for-woocommerce', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.klarna.com/us/business/payment-methods/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/klarna-payments/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.klarna.com/us/legal/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/klarna-payments/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=klarna-payments', ), ), ), self::KUSTOM_CHECKOUT => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Kustom Checkout', 'woocommerce' ), 'description' => esc_html__( 'A full checkout experience embedded on your site that includes all popular payment methods (Pay Now, Pay Later, Financing, Installments).', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/kustom-checkout.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'klarna-checkout-for-woocommerce', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/kustom-checkout/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.kustom.co/legal', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/kustom-checkout/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=kustom-checkout', ), ), ), self::HELCIM => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Helcim', 'woocommerce' ), 'description' => esc_html__( 'Accept credit cards and Google Pay directly on your store with zero monthly fees. Save up to 25% using Helcim’s transparent interchange-plus pricing.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/helcim.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'helcim-commerce-for-woocommerce', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.helcim.com/pricing/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/helcim-commerce-for-woocommerce/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://legal.helcim.com/terms-of-service/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/helcim-commerce-for-woocommerce/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=helcim-commerce-for-woocommerce', ), ), ), self::KOMOJU => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'KOMOJU Payments', 'woocommerce' ), 'description' => esc_html__( 'Easily add popular Japanese payment methods like konbini, PayPay, and more with KOMOJU’s secure extension to optimize checkout.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/komoju.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'komoju-japanese-payments', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://en.komoju.com/pricing/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/komoju-japanese-payments/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://toc.komoju.com/toc/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/komoju-japanese-payments/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=komoju-japanese-payments', ), ), ), self::HELIOPAY => array( '_type' => self::TYPE_CRYPTO, 'title' => esc_html__( 'Helio Pay', 'woocommerce' ), 'description' => esc_html__( 'Effortlessly accept cryptocurrency payments in your store.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/heliopay.png', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'helio', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.hel.io/pricing', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/helio-pay/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://info.docs.hel.io/terms-of-service', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/helio-pay/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=helio-pay', ), ), ), self::MONEI => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'MONEI', 'woocommerce' ), 'description' => esc_html__( 'Accept Cards, Apple Pay, Google Pay, Bizum, PayPal, and many more payment methods in your store.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/monei.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'monei', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://monei.com/pricing/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://monei.com/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://monei.com/legal-notice/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://support.monei.com/hc/en-us/articles/360017801677-Get-started-with-MONEI', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://support.monei.com/hc/en-us/requests/new', ), ), ), self::EWAY => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Eway', 'woocommerce' ), 'description' => esc_html__( 'Take credit card payments securely via Eway keeping customers on your site.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/eway.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-gateway-eway', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://www.eway.com.au/online-payments/#pricing', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/eway/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://www.eway.com.au/docs/eWAY-Terms-and-Conditions-AU.pdf', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/eway/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=eway', ), ), ), self::VISA => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Visa Acceptance Solutions', 'woocommerce' ), 'description' => esc_html__( 'Accept payments on your WooCommerce store securely.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/visa-acceptance-solutions.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'visa-acceptance-solutions', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/visa-acceptance-solutions/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/visa-acceptance-solutions/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=visa-acceptance-solutions', ), ), ), self::NGENIUS => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'N-Genius Online by Network', 'woocommerce' ), 'description' => esc_html__( 'Power your business with N-Genius Online—smart, secure, and built for the future', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/ngenius.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'ngenius', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/ngenius/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/ngenius/', ), ), ), self::MASTERCARD => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Mastercard Merchant Cloud', 'woocommerce' ), 'description' => esc_html__( 'A seamless checkout with 35+ payment methods for global needs. Enjoy built-in security and simple integration for a smooth experience.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/mastercard.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'mastercard-merchant-cloud', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/mastercard-merchant-cloud/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://developer.mastercard.com/terms-of-use', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/mastercard-merchant-cloud/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=mastercard-merchant-cloud', ), ), 'tags' => array( self::TAG_PREFERRED ), ), self::MYPOS => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/mypos.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'mypos-virtual-for-woocommerce', ), ), self::EVERGREEN => array( '_type' => self::TYPE_PSP, // Evergreen does not have an icon on .org. Will be default for now. 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'evergreen-payments-northwest-gateway-wc', ), ), self::GOCARDLESS => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'GoCardless', 'woocommerce' ), 'description' => esc_html__( 'Accept Direct Debit, ACH Pull, and open banking payments.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/gocardless.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-gateway-gocardless', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_PRICING, 'url' => 'https://gocardless.com/pricing/', ), array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/gocardless/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://gocardless.com/legal/', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/gocardless/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://woocommerce.com/my-account/contact-support/?select=gocardless', ), ), ), self::NEXI_CHECKOUT => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Nexi Checkout', 'woocommerce' ), 'description' => esc_html__( 'A fully embedded checkout, with all popular payment methods, for more sales and less abandoned shopping carts.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/nexi.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'dibs-easy-for-woocommerce', ), 'links' => array( array( '_type' => PaymentsProviders::LINK_TYPE_ABOUT, 'url' => 'https://woocommerce.com/products/nexi-checkout/', ), array( '_type' => PaymentsProviders::LINK_TYPE_TERMS, 'url' => 'https://support.nets.eu/document/nets-easy-general-terms-and-conditions-2022', ), array( '_type' => PaymentsProviders::LINK_TYPE_DOCS, 'url' => 'https://woocommerce.com/document/nexi-checkout/', ), array( '_type' => PaymentsProviders::LINK_TYPE_SUPPORT, 'url' => 'https://developer.nexigroup.com/nexi-checkout/en-EU/support/', ), ), ), self::COINBASE => array( '_type' => self::TYPE_CRYPTO, 'icon' => plugins_url( 'assets/images/onboarding/icons/coinbase.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'coinbase-commerce', ), ), self::AUTHORIZE_NET => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/authorize.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-gateway-authorize-net-cim', ), ), self::BILLIE => array( '_type' => self::TYPE_PSP, 'title' => esc_html__( 'Billie', 'woocommerce' ), 'description' => esc_html__( 'Billie is the leading provider of Buy Now, Pay Later payment methods for B2B stores.', 'woocommerce' ), 'icon' => plugins_url( 'assets/images/onboarding/icons/billie.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'billie-for-woocommerce', ), ), self::BOLT => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/bolt.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'bolt-checkout-woocommerce', ), ), self::DEPAY => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/depay.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'depay-payments-for-woocommerce', ), ), self::ELAVON => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/elavon.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-gateway-converge', ), ), self::FORTISPAY => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/fortispay.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'fortis-for-woocommerce', ), ), self::PAYPAL_ZETTLE => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/paypal-zettle.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'zettle-pos-integration', ), ), self::RAPYD => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/rapyd.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'rapyd-payments-plugin-for-woocommerce', ), ), self::PAYPAL_BRAINTREE => array( '_type' => self::TYPE_PSP, 'icon' => plugins_url( 'assets/images/onboarding/icons/paypal-braintree.svg', WC_PLUGIN_FILE ), 'plugin' => array( '_type' => self::PLUGIN_TYPE_WPORG, 'slug' => 'woocommerce-gateway-paypal-powered-by-braintree', ), ), ); return $this->extensions_base_details_memo; } /** * Get the base details for a specific extension. * * @see self::standardize_extension_details() for the supported entries. * * @param string $extension_id The extension ID. * * @return ?array The extension base details. * Null if the extension is not one we have details for. */ private function get_extension_base_details( string $extension_id ): ?array { $extensions = $this->get_all_extensions_base_details(); if ( ! isset( $extensions[ $extension_id ] ) ) { return null; } return $extensions[ $extension_id ]; } /** * Standardize the details for an extension. * * Ensures that the details array has all the required fields, and fills in any missing optional fields with defaults. * We also enforce a consistent order for the fields. * * @param array $extension_details The extension details. * * @return array The standardized extension details. */ private function standardize_extension_details( array $extension_details ): array { $standardized = array(); // Required fields. $standardized['id'] = $extension_details['id']; $standardized['_priority'] = $extension_details['_priority']; $standardized['_type'] = $extension_details['_type']; $standardized['plugin'] = $extension_details['plugin']; // Optional fields. $standardized['title'] = $extension_details['title'] ?? ''; $standardized['description'] = $extension_details['description'] ?? ''; $standardized['image'] = $extension_details['image'] ?? ''; $standardized['icon'] = $extension_details['icon'] ?? ''; $standardized['links'] = $extension_details['links'] ?? array(); $standardized['tags'] = $extension_details['tags'] ?? array(); $standardized['_incentive'] = $extension_details['_incentive'] ?? null; return $standardized; } /** * Based on the WC onboarding profile, determine if the merchant is selling online. * * If the user skipped the profiler (no data points provided), we assume they are selling online. * * @return bool True if the merchant is selling online, false otherwise. */ private function is_merchant_selling_online(): bool { /* * We consider a merchant to be selling online if: * - The profiler was skipped (no data points provided). * OR * - The merchant answered 'Which one of these best describes you?' with 'I’m already selling' AND: * - Didn't answer to the 'Are you selling online?' question. * OR * - Answered the 'Are you selling online?' question with either: * - 'Yes, I’m selling online'. * OR * - 'I’m selling both online and offline'. * * @see plugins/woocommerce/client/admin/client/core-profiler/pages/UserProfile.tsx for the values. */ $onboarding_profile = get_option( OnboardingProfile::DATA_OPTION, array() ); if ( ! isset( $onboarding_profile['business_choice'] ) || ( 'im_already_selling' === $onboarding_profile['business_choice'] && ( ! isset( $onboarding_profile['selling_online_answer'] ) || ( 'yes_im_selling_online' === $onboarding_profile['selling_online_answer'] || 'im_selling_both_online_and_offline' === $onboarding_profile['selling_online_answer'] ) ) ) ) { return false; } return true; } /** * Based on the WC onboarding profile, determine if the merchant is selling offline. * * If the user skipped the profiler (no data points provided), we assume they are NOT selling offline. * * @return bool True if the merchant is selling offline, false otherwise. */ private function is_merchant_selling_offline(): bool { /* * We consider a merchant to be selling offline if: * - The profiler was NOT skipped (data points provided). * AND * - The merchant answered 'Which one of these best describes you?' with 'I’m already selling' AND: * - Answered the 'Are you selling online?' question with either: * - 'No, I’m selling offline'. * OR * - 'I’m selling both online and offline'. * * @see plugins/woocommerce/client/admin/client/core-profiler/pages/UserProfile.tsx for the values. */ $onboarding_profile = get_option( OnboardingProfile::DATA_OPTION, array() ); if ( isset( $onboarding_profile['business_choice'] ) && ( 'im_already_selling' === $onboarding_profile['business_choice'] && ( isset( $onboarding_profile['selling_online_answer'] ) && ( 'no_im_selling_offline' === $onboarding_profile['selling_online_answer'] || 'im_selling_both_online_and_offline' === $onboarding_profile['selling_online_answer'] ) ) ) ) { return true; } return false; } }