From f7a00ddd9d2dc15cb3b13975eec02db970df20a3 Mon Sep 17 00:00:00 2001 From: Soare Robert-Daniel Date: Mon, 16 Mar 2026 14:22:24 +0200 Subject: [PATCH 1/6] refactor: update black friday labels --- inc/class-main.php | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/inc/class-main.php b/inc/class-main.php index ae922ee80..fcd3d89f4 100644 --- a/inc/class-main.php +++ b/inc/class-main.php @@ -599,30 +599,37 @@ public function about_page() { public function add_black_friday_data( $configs ) { $config = $configs['default']; - // translators: %1$s - HTML tag, %2$s - discount, %3$s - HTML tag, %4$s - product name. - $message_template = __( 'Our biggest sale of the year: %1$sup to %2$s OFF%3$s on %4$s. Don\'t miss this limited-time offer.', 'otter-blocks' ); - $product_label = 'Otter Blocks'; - $discount = '70%'; + $message = __( 'Advanced blocks, custom CSS, WooCommerce integration. Everything you need to build better pages, without code. Exclusively for existing Otter users.', 'otter-blocks' ); + $cta_label = __( 'Get Otter Pro', 'otter-blocks' ); $plan = apply_filters( 'product_otter_license_plan', 0 ); $license = apply_filters( 'product_otter_license_key', false ); - $is_pro = 0 < $plan; + $status = apply_filters( 'product_otter_license_status', false ); + + $is_pro = 'valid' === $status; + $is_expired = 'expired' === $status || 'active-expired' === $status; if ( $is_pro ) { - // translators: %1$s - HTML tag, %2$s - discount, %3$s - HTML tag, %4$s - product name. - $message_template = __( 'Get %1$sup to %2$s off%3$s when you upgrade your %4$s plan or renew early.', 'otter-blocks' ); - $product_label = 'Otter Pro'; - $discount = '30%'; - } - - $product_label = sprintf( '%s', $product_label ); - $url_params = array( + // translators: %1$s - discount, %2$s - discount. + $message = sprintf( __( 'Upgrade your Otter Pro plan: %1$s off this week. Already on the plan you need? Renew early and save up to %2$s.', 'otter-blocks' ), '30%', '20%' ); + $cta_label = __( 'See your options', 'otter-blocks' ); + } elseif ( $is_expired ) { + $message = __( 'Your Otter Pro features are still here, just locked. Renew at a reduced rate this week.', 'otter-blocks' ); + $cta_label = __( 'Reactivate now', 'otter-blocks' ); + } else { + // translators: %s - discount. + $config['title'] = sprintf( __( 'Otter Pro: %s off this week', 'otter-blocks' ), '60%' ); + } + + $url_params = array( 'utm_term' => $is_pro ? 'plan-' . $plan : 'free', 'lkey' => ! empty( $license ) ? $license : false, + 'expired' => $is_expired ? '1' : false, ); - - $config['message'] = sprintf( $message_template, '', $discount, '', $product_label ); - $config['sale_url'] = add_query_arg( + + $config['cta_label'] = $cta_label; + $config['message'] = $message; + $config['sale_url'] = add_query_arg( $url_params, tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/otter-bf', 'bfcm', 'otter' ) ) ); From d4c344a5950556d3b0d277cfe49aa9daa91113e2 Mon Sep 17 00:00:00 2001 From: Soare Robert-Daniel Date: Thu, 19 Mar 2026 17:00:31 +0200 Subject: [PATCH 2/6] refactor: update Black Friday labels for sub-plugins --- plugins/blocks-animation/blocks-animation.php | 5 +---- plugins/blocks-css/blocks-css.php | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/plugins/blocks-animation/blocks-animation.php b/plugins/blocks-animation/blocks-animation.php index 1f44cddf8..873a772e7 100644 --- a/plugins/blocks-animation/blocks-animation.php +++ b/plugins/blocks-animation/blocks-animation.php @@ -72,10 +72,7 @@ function ( $configs ) { $config = $configs['default']; - // translators: %1$s - plugin name, %2$s - plugin name, %3$s - discount. - $message_template = __( 'Extend %1$s with %2$s – up to %3$s OFF in our biggest sale of the year. Limited time only.', 'blocks-animation' ); - - $config['message'] = sprintf( $message_template, 'Block Animation', 'Otter Pro Blocks', '70%' ); + $config['message'] = __( 'You use Blocks Animation. Sites like yours get more from Otter Pro: advanced blocks, custom CSS, animations and more. Built by the same team.', 'blocks-animation' ); $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', diff --git a/plugins/blocks-css/blocks-css.php b/plugins/blocks-css/blocks-css.php index 0531745f8..d5e259c80 100644 --- a/plugins/blocks-css/blocks-css.php +++ b/plugins/blocks-css/blocks-css.php @@ -67,11 +67,8 @@ function ( $configs ) { } $config = $configs['default']; - - // translators: %1$s - plugin name, %2$s - plugin name, %3$s - discount. - $message_template = __( 'Extend %1$s with %2$s – up to %3$s OFF in our biggest sale of the year. Limited time only.', 'blocks-css' ); - $config['message'] = sprintf( $message_template, 'Blocks CSS', 'Otter Pro Blocks', '70%' ); + $config['message'] = __( 'You use Blocks CSS. Otter Pro includes custom CSS per block, plus advanced blocks and WooCommerce integration. Built by the same team.', 'blocks-css' ); $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', From 60d0b96d4055d6e55f77822c2a9920c574cdd0ac Mon Sep 17 00:00:00 2001 From: Soare Robert-Daniel Date: Fri, 20 Mar 2026 15:45:26 +0200 Subject: [PATCH 3/6] chore: add plugin meta link --- inc/class-main.php | 8 ++++++++ plugins/blocks-animation/blocks-animation.php | 1 + plugins/blocks-css/blocks-css.php | 1 + 3 files changed, 10 insertions(+) diff --git a/inc/class-main.php b/inc/class-main.php index fcd3d89f4..7c020d1ea 100644 --- a/inc/class-main.php +++ b/inc/class-main.php @@ -627,6 +627,14 @@ public function add_black_friday_data( $configs ) { 'expired' => $is_expired ? '1' : false, ); + if ( $is_pro || $is_expired ) { + // translators: %s is the discount percentage. + $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - up to %s off', 'otter-blocks' ), '30%' ); + } else { + // translators: %s is the discount percentage. + $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'otter-blocks' ), '60%' ); + } + $config['cta_label'] = $cta_label; $config['message'] = $message; $config['sale_url'] = add_query_arg( diff --git a/plugins/blocks-animation/blocks-animation.php b/plugins/blocks-animation/blocks-animation.php index 873a772e7..58687d171 100644 --- a/plugins/blocks-animation/blocks-animation.php +++ b/plugins/blocks-animation/blocks-animation.php @@ -73,6 +73,7 @@ function ( $configs ) { $config = $configs['default']; $config['message'] = __( 'You use Blocks Animation. Sites like yours get more from Otter Pro: advanced blocks, custom CSS, animations and more. Built by the same team.', 'blocks-animation' ); + $config['plugin_meta_message'] = __( 'Black Friday Sale - Get Otter Pro free', 'blocks-animation' ); $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', diff --git a/plugins/blocks-css/blocks-css.php b/plugins/blocks-css/blocks-css.php index d5e259c80..44499f5bf 100644 --- a/plugins/blocks-css/blocks-css.php +++ b/plugins/blocks-css/blocks-css.php @@ -69,6 +69,7 @@ function ( $configs ) { $config = $configs['default']; $config['message'] = __( 'You use Blocks CSS. Otter Pro includes custom CSS per block, plus advanced blocks and WooCommerce integration. Built by the same team.', 'blocks-css' ); + $config['plugin_meta_message'] = __( 'Black Friday Sale - Get Otter Pro free', 'blocks-css' ); $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', From 53f542db484392d6279afe52b2cc1868938a003b Mon Sep 17 00:00:00 2001 From: Soare Robert-Daniel Date: Mon, 23 Mar 2026 13:51:05 +0200 Subject: [PATCH 4/6] chore: visibility & sub-plugin messages --- inc/class-main.php | 2 ++ plugins/blocks-animation/blocks-animation.php | 4 ++-- plugins/blocks-css/blocks-css.php | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/inc/class-main.php b/inc/class-main.php index 7c020d1ea..566fbf6b2 100644 --- a/inc/class-main.php +++ b/inc/class-main.php @@ -619,6 +619,8 @@ public function add_black_friday_data( $configs ) { } else { // translators: %s - discount. $config['title'] = sprintf( __( 'Otter Pro: %s off this week', 'otter-blocks' ), '60%' ); + // translators: %s is the discount percentage. + $config['upgrade_menu_text'] = sprintf( __( 'BF Sale - %s off', 'otter-blocks' ), '60%' ); } $url_params = array( diff --git a/plugins/blocks-animation/blocks-animation.php b/plugins/blocks-animation/blocks-animation.php index 58687d171..a4380a982 100644 --- a/plugins/blocks-animation/blocks-animation.php +++ b/plugins/blocks-animation/blocks-animation.php @@ -72,9 +72,9 @@ function ( $configs ) { $config = $configs['default']; - $config['message'] = __( 'You use Blocks Animation. Sites like yours get more from Otter Pro: advanced blocks, custom CSS, animations and more. Built by the same team.', 'blocks-animation' ); + $config['message'] = __( 'You use Blocks Animation. Sites like yours get more from Otter Pro: advanced blocks, custom CSS, animations and more. Built by the same team.', 'blocks-animation' ); $config['plugin_meta_message'] = __( 'Black Friday Sale - Get Otter Pro free', 'blocks-animation' ); - $config['sale_url'] = add_query_arg( + $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', ), diff --git a/plugins/blocks-css/blocks-css.php b/plugins/blocks-css/blocks-css.php index 44499f5bf..6d254b9a3 100644 --- a/plugins/blocks-css/blocks-css.php +++ b/plugins/blocks-css/blocks-css.php @@ -68,9 +68,9 @@ function ( $configs ) { $config = $configs['default']; - $config['message'] = __( 'You use Blocks CSS. Otter Pro includes custom CSS per block, plus advanced blocks and WooCommerce integration. Built by the same team.', 'blocks-css' ); + $config['message'] = __( 'You use Blocks CSS. Otter Pro includes custom CSS per block, plus advanced blocks and WooCommerce integration. Built by the same team.', 'blocks-css' ); $config['plugin_meta_message'] = __( 'Black Friday Sale - Get Otter Pro free', 'blocks-css' ); - $config['sale_url'] = add_query_arg( + $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', ), From 7aa877348589e18562766eb73a16b74515b11942 Mon Sep 17 00:00:00 2001 From: Soare Robert-Daniel Date: Fri, 27 Mar 2026 15:04:13 +0200 Subject: [PATCH 5/6] chore: update labels --- inc/class-main.php | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/inc/class-main.php b/inc/class-main.php index 566fbf6b2..c7a855b77 100644 --- a/inc/class-main.php +++ b/inc/class-main.php @@ -606,21 +606,30 @@ public function add_black_friday_data( $configs ) { $license = apply_filters( 'product_otter_license_key', false ); $status = apply_filters( 'product_otter_license_status', false ); - $is_pro = 'valid' === $status; - $is_expired = 'expired' === $status || 'active-expired' === $status; + $is_pro = 'valid' === $status; + $is_expired = 'expired' === $status || 'active-expired' === $status; + $pro_product_slug = defined( 'OTTER_PRO_BASEFILE' ) ? basename( dirname( OTTER_PRO_BASEFILE ) ) : ''; if ( $is_pro ) { + // translators: %s is the discount percentage. + $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - up to %s off', 'otter-blocks' ), '30%' ); // translators: %1$s - discount, %2$s - discount. $message = sprintf( __( 'Upgrade your Otter Pro plan: %1$s off this week. Already on the plan you need? Renew early and save up to %2$s.', 'otter-blocks' ), '30%', '20%' ); $cta_label = __( 'See your options', 'otter-blocks' ); } elseif ( $is_expired ) { - $message = __( 'Your Otter Pro features are still here, just locked. Renew at a reduced rate this week.', 'otter-blocks' ); - $cta_label = __( 'Reactivate now', 'otter-blocks' ); + // translators: %s is the discount percentage. + $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'otter-blocks' ), '50%' ); + // translators: %s is the discount percentage. + $config['upgrade_menu_text'] = sprintf( __( 'BF Sale - %s off', 'otter-blocks' ), '50%' ); + $message = __( 'Your Otter Pro features are still here, just locked. Renew at a reduced rate this week.', 'otter-blocks' ); + $cta_label = __( 'Reactivate now', 'otter-blocks' ); } else { - // translators: %s - discount. - $config['title'] = sprintf( __( 'Otter Pro: %s off this week', 'otter-blocks' ), '60%' ); + // translators: %s is the discount percentage. + $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'otter-blocks' ), '60%' ); // translators: %s is the discount percentage. $config['upgrade_menu_text'] = sprintf( __( 'BF Sale - %s off', 'otter-blocks' ), '60%' ); + // translators: %s - discount. + $config['title'] = sprintf( __( 'Otter Pro: %s off this week', 'otter-blocks' ), '60%' ); } $url_params = array( @@ -629,12 +638,8 @@ public function add_black_friday_data( $configs ) { 'expired' => $is_expired ? '1' : false, ); - if ( $is_pro || $is_expired ) { - // translators: %s is the discount percentage. - $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - up to %s off', 'otter-blocks' ), '30%' ); - } else { - // translators: %s is the discount percentage. - $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'otter-blocks' ), '60%' ); + if ( ( $is_pro || $is_expired ) && ! empty( $pro_product_slug ) ) { + $config['plugin_meta_targets'] = array( $pro_product_slug ); } $config['cta_label'] = $cta_label; From 804b696f7a6a046eb1f9411cb9624db8eba53a79 Mon Sep 17 00:00:00 2001 From: Soare Robert-Daniel Date: Fri, 27 Mar 2026 16:07:30 +0200 Subject: [PATCH 6/6] chore: update labels for free offer --- plugins/blocks-animation/blocks-animation.php | 7 ++++--- plugins/blocks-css/blocks-css.php | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/plugins/blocks-animation/blocks-animation.php b/plugins/blocks-animation/blocks-animation.php index a4380a982..035abd2f0 100644 --- a/plugins/blocks-animation/blocks-animation.php +++ b/plugins/blocks-animation/blocks-animation.php @@ -72,17 +72,18 @@ function ( $configs ) { $config = $configs['default']; - $config['message'] = __( 'You use Blocks Animation. Sites like yours get more from Otter Pro: advanced blocks, custom CSS, animations and more. Built by the same team.', 'blocks-animation' ); + // translators: 1. Number of free licenses, 2. The price of the product. + $config['message'] = sprintf( __( 'You’re using Blocks Animation, and the team behind it is celebrating Black Friday by giving away %1$s licences of Otter Pro. A powerful block collection worth %2$s, with advanced blocks, custom CSS, animations, and WooCommerce integration. Claim yours before they run out.', 'blocks-animation' ), 100, '$69' ); $config['plugin_meta_message'] = __( 'Black Friday Sale - Get Otter Pro free', 'blocks-animation' ); $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', ), - tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/otter-bf', 'bfcm', 'blocks-animation' ) ) + tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/otter-claim-bf', 'bfcm', 'blocks-animation' ) ) ); $configs[ BLOCKS_ANIMATION_PRODUCT_SLUG ] = $config; return $configs; - } + } ); diff --git a/plugins/blocks-css/blocks-css.php b/plugins/blocks-css/blocks-css.php index 6d254b9a3..1a18f1fea 100644 --- a/plugins/blocks-css/blocks-css.php +++ b/plugins/blocks-css/blocks-css.php @@ -67,18 +67,19 @@ function ( $configs ) { } $config = $configs['default']; - - $config['message'] = __( 'You use Blocks CSS. Otter Pro includes custom CSS per block, plus advanced blocks and WooCommerce integration. Built by the same team.', 'blocks-css' ); + + // translators: 1. Number of free licenses, 2. The price of the product. + $config['message'] = sprintf( __( 'You’re using Blocks CSS, and the team behind it is celebrating Black Friday by giving away %1$s licences of Otter Pro. A powerful block collection worth %2$s, with advanced blocks, custom CSS, animations, and WooCommerce integration. Claim yours before they run out.', 'blocks-css' ), 100, '$69' ); $config['plugin_meta_message'] = __( 'Black Friday Sale - Get Otter Pro free', 'blocks-css' ); $config['sale_url'] = add_query_arg( array( 'utm_term' => 'free', ), - tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/otter-bf', 'bfcm', 'blocks-css' ) ) + tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/otter-claim-bf', 'bfcm', 'blocks-css' ) ) ); $configs[ BLOCKS_CSS_PRODUCT_SLUG ] = $config; return $configs; - } + } );