diff --git a/includes/class-initializer.php b/includes/class-initializer.php index 92dbff3..488eece 100644 --- a/includes/class-initializer.php +++ b/includes/class-initializer.php @@ -58,6 +58,7 @@ public static function init() { Woocommerce_Memberships\Admin::init(); Woocommerce_Memberships\Events::init(); Woocommerce_Memberships\Subscriptions_Integration::init(); + Woocommerce_Memberships\Limit_Purchase::init(); Woocommerce\Events::init(); register_activation_hook( NEWSPACK_NETWORK_PLUGIN_FILE, [ __CLASS__, 'activation_hook' ] ); diff --git a/includes/woocommerce-memberships/class-limit-purchase.php b/includes/woocommerce-memberships/class-limit-purchase.php new file mode 100644 index 0000000..e9cccbd --- /dev/null +++ b/includes/woocommerce-memberships/class-limit-purchase.php @@ -0,0 +1,108 @@ +get_id(), $plan->get_product_ids() ); + } + ); + return array_map( + function( $plan ) { + return [ + 'id' => $plan->get_id(), + 'network_id' => get_post_meta( $plan->post->ID, Admin::NETWORK_ID_META_KEY, true ), + ]; + }, + $plans + ); + } + + /** + * Filters the error message shown when a product can't be added to the cart. + * + * @param string $message Message. + * @param \WC_Product $product_data Product data. + * + * @return string + */ + public static function woocommerce_cart_product_cannot_be_purchased_message( $message, \WC_Product $product_data ) { + $network_subscription = self::get_network_equivalent_subscription_for_current_user( $product_data ); + if ( $network_subscription ) { + $message = sprintf( + /* translators: %s: Site URL */ + __( "You can't buy this subscription because you already have it active on %s", 'newspack-network' ), + $network_subscription['site'] + ); + } + return $message; + } +}