'jetpack_free', 'class' => 'free', 'features' => array( 'active' => array(), ), ) ); $supports = array(); // Define what paid modules are supported by personal plans. $personal_plans = array( 'jetpack_personal', 'jetpack_personal_monthly', 'personal-bundle', 'personal-bundle-monthly', 'personal-bundle-2y', ); if ( in_array( $plan['product_slug'], $personal_plans, true ) ) { // special support value, not a module but a separate plugin. $supports[] = 'akismet'; $supports[] = 'recurring-payments'; $plan['class'] = 'personal'; } // Define what paid modules are supported by premium plans. $premium_plans = array( 'jetpack_premium', 'jetpack_premium_monthly', 'value_bundle', 'value_bundle-monthly', 'value_bundle-2y', ); if ( in_array( $plan['product_slug'], $premium_plans, true ) ) { $supports[] = 'akismet'; $supports[] = 'recurring-payments'; $supports[] = 'simple-payments'; $supports[] = 'vaultpress'; $supports[] = 'videopress'; $plan['class'] = 'premium'; } // Define what paid modules are supported by professional plans. $business_plans = array( 'jetpack_business', 'jetpack_business_monthly', 'business-bundle', 'business-bundle-monthly', 'business-bundle-2y', 'ecommerce-bundle', 'ecommerce-bundle-monthly', 'ecommerce-bundle-2y', 'vip', ); if ( in_array( $plan['product_slug'], $business_plans, true ) ) { $supports[] = 'akismet'; $supports[] = 'recurring-payments'; $supports[] = 'simple-payments'; $supports[] = 'vaultpress'; $supports[] = 'videopress'; $plan['class'] = 'business'; } // get available features. foreach ( Jetpack::get_available_modules() as $module_slug ) { $module = Jetpack::get_module( $module_slug ); if ( ! isset( $module ) || ! is_array( $module ) ) { continue; } if ( in_array( 'free', $module['plan_classes'], true ) || in_array( $plan['class'], $module['plan_classes'], true ) ) { $supports[] = $module_slug; } } $plan['supports'] = $supports; self::$active_plan_cache = $plan; return $plan; } /** * Determine whether the active plan supports a particular feature * * @uses Jetpack_Plan::get() * * @access public * @static * * @param string $feature The module or feature to check. * * @return bool True if plan supports feature, false if not */ public static function supports( $feature ) { // Search product bypasses plan feature check. if ( 'search' === $feature && (bool) get_option( 'has_jetpack_search_product' ) ) { return true; } $plan = self::get(); // Manually mapping WordPress.com features to Jetpack module slugs. foreach ( $plan['features']['active'] as $wpcom_feature ) { switch ( $wpcom_feature ) { case 'wordads-jetpack': // WordAds are supported for this site. if ( 'wordads' === $feature ) { return true; } break; } } if ( in_array( $feature, $plan['supports'], true ) || in_array( $feature, $plan['features']['active'], true ) ) { return true; } return false; } }