PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / EmailEditor / Integrations / MailPoet / Patterns / Library / WinBackCustomerPattern.php
mailpoet / lib / EmailEditor / Integrations / MailPoet / Patterns / Library Last commit date
AbandonedCartPattern.php 4 months ago AbandonedCartReminderPattern.php 1 month ago AbandonedCartWithDiscountPattern.php 1 month ago AbstractAbandonedCartPattern.php 5 months ago AskForReviewPostPurchasePattern.php 1 month ago BirthdayEmailPattern.php 1 month ago BookingAutomationEmailPattern.php 1 month ago CategoryPurchaseFollowUpPattern.php 1 month ago EducationalCampaignPattern.php 1 month ago EventInvitationPattern.php 3 months ago FirstPurchaseThankYouPattern.php 1 month ago NewArrivalsAnnouncementPattern.php 3 months ago NewProductsAnnouncementPattern.php 3 months ago NewsletterPattern.php 4 months ago PostPurchaseThankYouPattern.php 1 month ago ProductPurchaseFollowUpPattern.php 1 month ago ProductRestockNotificationPattern.php 5 months ago SaleAnnouncementPattern.php 3 months ago SubscriptionAutomationEmailPattern.php 1 month ago TagPurchaseFollowUpPattern.php 1 month ago WelcomeEmailPattern.php 1 month ago WelcomeWithDiscountEmailPattern.php 1 month ago WinBackCustomerPattern.php 1 month ago index.php 1 year ago
WinBackCustomerPattern.php
240 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\EmailEditor\Integrations\MailPoet\Patterns\Library;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor;
9 use MailPoet\EmailEditor\Integrations\MailPoet\Patterns\Pattern;
10 use MailPoet\EmailEditor\Integrations\MailPoet\ProductCollection\OrderProductCollectionProcessor;
11 use MailPoet\Util\CdnAssetUrl;
12
13 /**
14 * Win Back Customer email pattern.
15 */
16 class WinBackCustomerPattern extends Pattern {
17 protected $name = 'win-back-customer';
18 protected $block_types = ['core/post-content']; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
19 protected $template_types = ['email-template']; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
20 protected $categories = ['purchase'];
21 protected $post_types = [EmailEditor::MAILPOET_EMAIL_POST_TYPE]; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
22
23 /** @var bool */
24 private $isReminder;
25
26 /** @var bool */
27 private $isFinalNudge;
28
29 public function __construct(
30 CdnAssetUrl $cdnAssetUrl,
31 bool $isReminder = false,
32 bool $isFinalNudge = false
33 ) {
34 parent::__construct($cdnAssetUrl);
35 $this->isReminder = $isReminder;
36 $this->isFinalNudge = $isFinalNudge;
37 if ($isReminder) {
38 $this->name = 'win-back-customer-reminder';
39 } elseif ($isFinalNudge) {
40 $this->name = 'win-back-customer-final-nudge';
41 }
42 }
43
44 /**
45 * Get pattern content.
46 *
47 * @return string Pattern HTML content.
48 */
49 protected function get_content(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
50 if ($this->isReminder) {
51 return $this->buildReminderContent($this->getProductPlaceholderColumns([
52 'product-small-02.jpg',
53 'product-small-06.jpg',
54 'product-small-03.jpg',
55 'product-small-05.jpg',
56 ]));
57 }
58
59 if ($this->isFinalNudge) {
60 return $this->buildFinalNudgeContent($this->getProductPlaceholderColumns([
61 'product-small-02.jpg',
62 'product-small-06.jpg',
63 'product-small-03.jpg',
64 'product-small-05.jpg',
65 ]));
66 }
67
68 return $this->buildContent($this->getProductPlaceholderColumns([
69 'product-small-02.jpg',
70 'product-small-06.jpg',
71 'product-small-03.jpg',
72 'product-small-05.jpg',
73 ]));
74 }
75
76 public function get_email_content(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
77 $recommendedProducts = $this->getRecommendedProductCollectionBlock(
78 OrderProductCollectionProcessor::COLLECTION_ORDER_CROSS_SELLS,
79 'popularity'
80 );
81
82 if ($this->isReminder) {
83 return $this->buildReminderContent($recommendedProducts);
84 }
85
86 if ($this->isFinalNudge) {
87 return $this->buildFinalNudgeContent($recommendedProducts);
88 }
89
90 return $this->buildContent($recommendedProducts);
91 }
92
93 private function buildReminderContent(string $productSection): string {
94 return '
95 <!-- wp:group {"style":{"spacing":{"padding":{"right":"var:preset|spacing|40","left":"var:preset|spacing|40"}}},"layout":{"type":"constrained"}} -->
96 <div class="wp-block-group" style="padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)">
97 <!-- wp:heading {"level":1} -->
98 <h1 class="wp-block-heading">' . __('We miss you', 'mailpoet') . '</h1>
99 <!-- /wp:heading -->
100
101 <!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"},"spacing":{"padding":{"top":"0","bottom":"var:preset|spacing|30"}}}} -->
102 <p style="padding-top:0;padding-bottom:var(--wp--preset--spacing--30);font-size:16px">' . __('It’s been a little while since your last visit, and we’d love to welcome you back.', 'mailpoet') . '</p>
103 <!-- /wp:paragraph -->
104
105 <!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"},"spacing":{"padding":{"top":"0","bottom":"var:preset|spacing|30"}}}} -->
106 <p style="padding-top:0;padding-bottom:var(--wp--preset--spacing--30);font-size:16px">' . __('New favorites may be waiting for you in the shop. We picked a few products that go well with your last order.', 'mailpoet') . '</p>
107 <!-- /wp:paragraph -->
108
109 ' . $productSection . '
110
111 <!-- wp:spacer {"height":"30px"} -->
112 <div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>
113 <!-- /wp:spacer -->
114
115 <!-- wp:paragraph {"fontSize":"medium"} -->
116 <p class="has-medium-font-size">' . __('See you soon,', 'mailpoet') . '</p>
117 <!-- /wp:paragraph -->
118
119 <!-- wp:paragraph {"fontSize":"medium"} -->
120 <p class="has-medium-font-size">–<!--[woocommerce/site-title]--></p>
121 <!-- /wp:paragraph -->
122 </div>
123 <!-- /wp:group -->
124 ';
125 }
126
127 private function buildFinalNudgeContent(string $productSection): string {
128 return '
129 <!-- wp:group {"style":{"spacing":{"padding":{"right":"var:preset|spacing|40","left":"var:preset|spacing|40"}}},"layout":{"type":"constrained"}} -->
130 <div class="wp-block-group" style="padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)">
131 <!-- wp:heading {"level":1} -->
132 <h1 class="wp-block-heading">' . __('Still thinking it over?', 'mailpoet') . '</h1>
133 <!-- /wp:heading -->
134
135 <!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"},"spacing":{"padding":{"top":"0","bottom":"var:preset|spacing|30"}}}} -->
136 <p style="padding-top:0;padding-bottom:var(--wp--preset--spacing--30);font-size:16px">' . __('There’s still time to find something you’ll love. These picks are based on what you bought last time.', 'mailpoet') . '</p>
137 <!-- /wp:paragraph -->
138
139 <!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"},"spacing":{"padding":{"top":"0","bottom":"var:preset|spacing|30"}}}} -->
140 <p style="padding-top:0;padding-bottom:var(--wp--preset--spacing--30);font-size:16px">' . __('Come back when you’re ready and continue where you left off.', 'mailpoet') . '</p>
141 <!-- /wp:paragraph -->
142
143 <!-- wp:buttons {"style":{"spacing":{"padding":{"bottom":"var:preset|spacing|30"}}},"layout":{"type":"flex","justifyContent":"left"}} -->
144 <div class="wp-block-buttons" style="padding-bottom:var(--wp--preset--spacing--30)">
145 <!-- wp:button {"style":{"typography":{"fontSize":"16px"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|20","right":"var:preset|spacing|20"}}}} -->
146 <div class="wp-block-button"><a class="wp-block-button__link has-custom-font-size wp-element-button" style="padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);font-size:16px" href="[mailpoet/site-homepage-url]">' . __('Browse recommendations', 'mailpoet') . '</a></div>
147 <!-- /wp:button -->
148 </div>
149 <!-- /wp:buttons -->
150
151 <!-- wp:heading {"style":{"border":{"top":{"color":"var:preset|color|cyan-bluish-gray"}},"spacing":{"padding":{"top":"var:preset|spacing|40","bottom":"var:preset|spacing|20"}},"typography":{"fontSize":"24px"}}} -->
152 <h2 class="wp-block-heading" style="border-top-color:var(--wp--preset--color--cyan-bluish-gray);padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--20);font-size:24px">' . __('Recommended for your return', 'mailpoet') . '</h2>
153 <!-- /wp:heading -->
154
155 ' . $productSection . '
156
157 <!-- wp:spacer {"height":"30px"} -->
158 <div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>
159 <!-- /wp:spacer -->
160
161 <!-- wp:paragraph {"fontSize":"medium"} -->
162 <p class="has-medium-font-size">' . __('Happy shopping!', 'mailpoet') . '</p>
163 <!-- /wp:paragraph -->
164
165 <!-- wp:paragraph {"fontSize":"medium"} -->
166 <p class="has-medium-font-size">–<!--[woocommerce/site-title]--></p>
167 <!-- /wp:paragraph -->
168 </div>
169 <!-- /wp:group -->
170 ';
171 }
172
173 private function buildContent(string $productSection): string {
174 return '
175 <!-- wp:group {"style":{"spacing":{"padding":{"right":"var:preset|spacing|40","left":"var:preset|spacing|40"}}},"layout":{"type":"constrained"}} -->
176 <div class="wp-block-group" style="padding-right:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)">
177 <!-- wp:heading {"level":1} -->
178 <h1 class="wp-block-heading">' . __('We Miss You! Here’s 15% Off', 'mailpoet') . '</h1>
179 <!-- /wp:heading -->
180
181 <!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"},"spacing":{"padding":{"top":"0","bottom":"var:preset|spacing|30"}}}} -->
182 <p style="padding-top:0;padding-bottom:var(--wp--preset--spacing--30);font-size:16px">' . __('We’ve got an exclusive deal waiting just for you.', 'mailpoet') . '</p>
183 <!-- /wp:paragraph -->
184
185 <!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"}}} -->
186 <p style="font-size:16px">' .
187 __('Use this code at checkout to redeem your discount:', 'mailpoet') . '</p>
188 <!-- /wp:paragraph -->
189
190 ' . $this->getGeneratedCouponBlock('left', 15, 10) . '
191
192 <!-- wp:buttons {"style":{"spacing":{"padding":{"bottom":"var:preset|spacing|30"}}},"layout":{"type":"flex","justifyContent":"left"}} -->
193 <div class="wp-block-buttons" style="padding-bottom:var(--wp--preset--spacing--30)">
194 <!-- wp:button {"style":{"typography":{"fontSize":"16px"},"spacing":{"padding":{"top":"var:preset|spacing|10","bottom":"var:preset|spacing|10","left":"var:preset|spacing|20","right":"var:preset|spacing|20"}}}} -->
195 <div class="wp-block-button"><a class="wp-block-button__link has-custom-font-size wp-element-button" style="padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);font-size:16px" href="[mailpoet/site-homepage-url]">' . __('Start shopping', 'mailpoet') . '</a></div>
196 <!-- /wp:button -->
197 </div>
198 <!-- /wp:buttons -->
199
200 <!-- wp:heading {"style":{"border":{"top":{"color":"var:preset|color|cyan-bluish-gray"}},"spacing":{"padding":{"top":"var:preset|spacing|40","bottom":"var:preset|spacing|20"}},"typography":{"fontSize":"24px"}}} -->
201 <h2 class="wp-block-heading" style="border-top-color:var(--wp--preset--color--cyan-bluish-gray);padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--20);font-size:24px">' . __('You might also like', 'mailpoet') . '</h2>
202 <!-- /wp:heading -->
203
204 <!-- wp:paragraph {"style":{"typography":{"fontSize":"16px"},"spacing":{"padding":{"top":"0","bottom":"var:preset|spacing|30"}}}} -->
205 <p style="padding-top:0;padding-bottom:var(--wp--preset--spacing--30);font-size:16px">
206 ' . __('While you wait, check out other items that pair perfectly with your order.', 'mailpoet') . '</p>
207 <!-- /wp:paragraph -->
208
209 ' . $productSection . '
210
211 <!-- wp:spacer {"height":"30px"} -->
212 <div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>
213 <!-- /wp:spacer -->
214
215 <!-- wp:paragraph {"fontSize":"medium"} -->
216 <p class="has-medium-font-size">' . __('Happy shopping!', 'mailpoet') . '</p>
217 <!-- /wp:paragraph -->
218
219 <!-- wp:paragraph {"fontSize":"medium"} -->
220 <p class="has-medium-font-size">–<!--[woocommerce/site-title]--></p>
221 <!-- /wp:paragraph -->
222 </div>
223 <!-- /wp:group -->
224 ';
225 }
226
227 protected function get_title(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
228 if ($this->isReminder) {
229 return __('Win Back Customer Reminder', 'mailpoet');
230 }
231
232 if ($this->isFinalNudge) {
233 return __('Win Back Customer Final Nudge', 'mailpoet');
234 }
235
236 /* translators: Name of a content pattern used as starting content of an email */
237 return __('Win Back Customer', 'mailpoet');
238 }
239 }
240