PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 2.2.2
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v2.2.2
4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.0 2.5.1 3.0.0 3.1.0 3.1.1 4.0.0 4.0.1 4.1.0 4.1.1 4.2.0 4.2.1 4.3.0 All 85 releases
← All changes | plugin.php +51 -257 4.9.12.2.2 View file →
@@ -1,23 +1,18 @@
1 1 <?php
2 2
3 3 namespace ShopEngine;
4 4
5 -defined('ABSPATH') || exit;
6 -
7 5 use ShopEngine\Compatibility\Conflicts\Manifest as Conflict_Manifest;
8 6 use ShopEngine\Core\Builders\Base;
9 -use ShopEngine\Compatibility\Migrations\LangMigration;
10 7 use ShopEngine\Core\Query_Modifier;
11 -use ShopEngine\Core\Wc_Customizer\Register_Settings;
12 8 use ShopEngine\Core\Template_Cpt;
13 9 use ShopEngine\Libs\License\License_Route;
14 -use ShopEngine\Libs\Rating\Rating;
15 10 use ShopEngine\Libs\Updater\Init as Updater;
16 11 use ShopEngine\Modules\Manifest as Module_Manifest;
17 -use ShopEngine\Utils\Feedback\Plugin_Unsubscribe;
18 12 use ShopEngine\Widgets\Manifest;
19 13
14 +defined('ABSPATH') || exit;
20 15
21 16 /**
22 17 * Plugin final Class.
23 18 * Handles dynamically loading classes only when needed. Check Elementor Plugin, Woocomerce Plugin Loaded or Install.
@@ -34,15 +29,11 @@
34 29 */
35 30 public function __construct() {
36 31 // load autoload method
37 32 Autoloader::run();
38 - add_action( 'wp_ajax_shopengine_admin_action', [\ShopEngine\Utils\Util::class, 'shopengine_admin_action'] );
39 33 }
40 34
41 - public function utils_url()
42 - {
43 - return $this->plugin_url() . 'utils/';
44 - }
35 +
45 36 /**
46 37 * Public function init.
47 38 * call function for all
48 39 *
@@ -51,11 +42,8 @@
51 42 public function init() {
52 43
53 44 $error = false;
54 45
55 - // init notice class
56 - \Oxaim\Libs\Notice::init();
57 -
58 46 // check woocommerce plugin
59 47 if(!did_action('woocommerce_loaded')) {
60 48 add_action('admin_notices', [$this, 'missing_woocommerce']);
61 49
@@ -86,15 +74,11 @@
86 74 if($error) {
87 75 return;
88 76 }
89 77
90 -
91 -
92 78 add_filter("plugin_action_links_shopengine/shopengine.php", function ($links) {
93 - $free = esc_html__("Go To Shopengine","shopengine");
94 - $pro = esc_html__("Go To ShopenginePro","shopengine");
95 79
96 - $custom_links[] = '<a title="' . $free . '" href="'.admin_url('edit.php?post_type=shopengine-template#getting-started').'" target="_blank">' . esc_html__('Settings', 'shopengine') . '</a>';
80 + $custom_links[] = '<a href="'.admin_url('edit.php?post_type=shopengine-template#getting-started').'" target="_blank">' . esc_html__('Settings', 'shopengine') . '</a>';
97 81
98 82 foreach ($custom_links as $custom_link):
99 83 array_unshift($links, $custom_link);
100 84 endforeach;
@@ -99,43 +83,20 @@
99 83 array_unshift($links, $custom_link);
100 84 endforeach;
101 85
102 86 if (!is_plugin_active('shopengine-pro/shopengine-pro.php')) {
103 - $links[] = '<a title="' . $pro . '" href="https://wpmet.com/plugin/shopengine/pricing/" style="color:#FCB214;font-weight:700" target="_blank" rel="noopener">' . esc_html__('Go Pro', 'shopengine') . '</a>';
87 + $links[] = '<a href="https://wpmet.com/plugin/shopengine/pricing/" style="color:#FCB214;font-weight:700" target="_blank">' . esc_html__('Go Pro', 'shopengine') . '</a>';
104 88 }
105 89 return $links;
106 90 });
107 91
108 - if(\ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true'){
109 -
110 - /**
111 - * EmailKit Global Class initialization
112 - *
113 - */
114 - if( !class_exists('EmailKit') && !did_action('edit_with_emailkit_loaded') && class_exists('\Wpmet\Libs\Emailkit') ) {
115 -
116 - new \Wpmet\Libs\Emailkit();
117 - }
118 -
119 - /**
120 - * MetForm get free templates promotional class initialization
121 - *
122 - */
123 - if( !did_action('metform/after_load') && did_action('elementor/loaded') && class_exists('\Wpmet\Libs\Metform_Promo_Banner') ) {
124 -
125 - new \Wpmet\Libs\Metform_Promo_Banner();
126 - }
127 - }
128 92
129 -
130 93 /**
131 94 * Routes initialization
132 95 *
133 96 */
134 97 new License_Route();
135 -
136 - // Initialize deactivation feedback modal
137 - new \ShopEngine\Utils\Feedback\Plugin_Unsubscribe();
98 +
138 99 /**
139 100 * Run pro plugin updater here....
140 101 *
141 102 */
@@ -142,23 +103,45 @@
142 103 add_action('admin_init', function () {
143 104 if(class_exists('ShopEngine_Pro')) {
144 105 new Updater();
145 106 }
146 - new \ShopEngine\Compatibility\Migrations\Direct_Checkout;
147 107 });
148 108
149 109
150 110 add_action('wp_loaded', function () {
151 - /**
152 - * migrate data
153 - */
154 - LangMigration::instance()->init();
111 +
112 + if(isset($_REQUEST['preview']) && $_REQUEST['preview'] == 'true' && !empty($_REQUEST['preview_id'])) {
113 +
114 + $pid = (int)$_REQUEST['preview_id'];
115 +
116 + $po = get_post($pid);
117 +
118 + if($po->post_type === Template_Cpt::TYPE) {
119 +
120 + $template = \ShopEngine\Core\Builders\Templates::get_registered_template_data($pid);
121 +
122 + if(empty($template) || !isset($template['url'])) {
123 + return;
124 + }
125 +
126 + $param = [
127 + 'shopengine_template_id' => $pid,
128 + 'preview_nonce' => wp_create_nonce('template_preview_' . $pid),
129 + 'change_template' => '1',
130 + ];
131 +
132 + $url = \ShopEngine\Utils\Helper::add_to_url($template['url'], $param);
133 +
134 + wp_safe_redirect($url);
135 + exit;
136 + }
137 + }
155 138 });
156 139
157 140 // avoid themes for loading woocommerce functions
158 - $avoid_themes = ['avada', 'woodmart', 'Avada', 'Woodmart'];
141 + $avoid_themes = ['avada', 'avada child'];
159 142
160 - if( !in_array(get_template(), $avoid_themes) ) {
143 + if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
161 144 /**
162 145 * Ensuring woocommerce functions are loaded before theme is modifying those
163 146 *
164 147 */
@@ -171,27 +154,11 @@
171 154 new \ShopEngine\Core\Elementor_Controls\Init();
172 155
173 156 //Loading the scripts and styles
174 157 add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
175 -
176 - // Register widgets immediately after elementor is loaded with higher priority
177 - if(is_plugin_active('related-products-manager-woocommerce/related-products-manager-for-woocommerce.php')) {
178 -
179 - add_action('elementor/widgets/register', function() {
180 - (new Manifest())->init();
181 - }, 5); // Priority 5 to load early
182 - }
183 -
184 158 }
185 159
186 - // Cart validation compatibility with WC Min Max Quantity plugin
187 160
188 - if ( function_exists( 'is_plugin_active' ) && is_plugin_active( 'woo-min-max-quantity-step-control-single/wcmmq.php' ) ) {
189 -
190 - add_filter( 'wcmmq_cart_validation_check', [ $this, 'shopengine_wcmmq_cart_validation_compat' ], 10, 2 );
191 - }
192 -
193 -
194 161 //Loading public scripts and styles
195 162 add_action('wp_enqueue_scripts', [$this, 'js_css_public']);
196 163
197 164 //woocommece theme support
@@ -201,158 +168,20 @@
201 168 add_theme_support('wc-product-gallery-lightbox');
202 169 add_theme_support('wc-product-gallery-slider');
203 170 }
204 171
205 -
206 - $filter_string = ''; // elementskit,metform-pro
207 - $filter_string .= ((!in_array('elementskit/elementskit.php', apply_filters('active_plugins', get_option('active_plugins')))) ? '' : ',elementskit');
208 - $filter_string .= (!class_exists('\MetForm\Plugin') ? '' : ',metform');
209 - $filter_string .= (!class_exists('\MetForm_Pro\Plugin') ? '' : ',metform-pro');
210 -
172 +
211 173 #Registering new post-type & etc
212 174 Base::instance()->init();
213 -
214 175
215 - Rating::instance('shopengine')
216 - ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
217 - ->set_rating_url( 'https://wordpress.org/support/plugin/shopengine/reviews/#new-post' )
218 - ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
219 - ->set_priority( 11 )
220 - ->set_first_appear_day( 7 )
221 - ->set_condition( true )
222 - ->call();
223 -
224 - if ( is_admin() && \ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true' ) {
225 -
226 - /**
227 - * Show WPMET stories widget in dashboard
228 - */
229 -
230 - \Wpmet\Libs\Stories::instance('shopengine')
231 -
232 - ->set_filter($filter_string)
233 - ->set_plugin('ShopEngine', 'https://wpmet.com/plugin/shopengine/')
234 - ->set_api_url('https://api.wpmet.com/public/stories/')
235 - ->call();
236 -
237 - // banner
238 - \Wpmet\Libs\Banner::instance('shopengine')
239 - ->set_filter(ltrim($filter_string, ','))
240 - ->set_api_url('https://api.wpmet.com/public/jhanda')
241 - ->set_plugin_screens('edit-shopengine-template')
242 - ->set_plugin_screens('edit-shopengine-template')
243 - ->call();
244 - }
245 -
246 - add_action('init', function () {
247 - $apps_img_path = \ShopEngine::plugin_url() . 'assets/images/apps-page/';
248 - /**
249 - * Show our plugins menu for others wpmet plugins
250 - */
251 - \ShopEngine\Wpmet\Libs\Plugins::instance()->init('shopengine')
252 - ->set_parent_menu_slug('shopengine-settings')
253 - ->set_submenu_name('Our Plugins')
254 - ->set_section_title('Get More out of Your WooCommerce Website!')
255 - ->set_section_description('Install other plugins from us and take your WooCommerce site to the next level for absolutely free!')
256 - ->set_items_per_row(4)
257 - ->set_plugins(
258 - [
259 - 'elementskit-lite/elementskit-lite.php' => [
260 - 'name' => esc_html__('ElementsKit', 'shopengine'),
261 - 'url' => 'https://wordpress.org/plugins/elementskit-lite/',
262 - 'icon' => $apps_img_path. 'elementskit.gif',
263 - 'desc' => esc_html__('All-in-one Elementor addon trusted by 1 Million+ users, makes your website builder process easier with ultimate freedom.', 'shopengine'),
264 - 'docs' => 'https://wpmet.com/doc/elementskit/',
265 - ],
266 - 'gutenkit-blocks-addon/gutenkit-blocks-addon.php' => [
267 - 'name' => esc_html__('GutenKit', 'shopengine'),
268 - 'url' => 'https://wordpress.org/plugins/gutenkit-blocks-addon/',
269 - 'icon' => $apps_img_path. 'guten-kit.png',
270 - 'desc' => esc_html__('Gutenberg blocks, patterns, and templates that extend the page-building experience using the WordPress block editor.', 'shopengine'),
271 - 'docs' => 'https://wpmet.com/doc/gutenkit/',
272 - ],
273 - 'rox-dynamic-cpt-fields-engine/rox-dynamic-cpt-fields-engine.php' => [
274 - 'name' => esc_html__('Rox Dynamic CPT Fields', 'shopengine'),
275 - 'url' => 'https://wordpress.org/plugins/rox-dynamic-cpt-fields-engine/',
276 - 'icon' => 'https://ps.w.org/rox-dynamic-cpt-fields-engine/assets/icon-256x256.jpeg?rev=3538537',
277 - 'desc' => esc_html__('Build custom post types, fields, taxonomies, and dynamic frontend layouts for WordPress, with zero coding and full AI-generated schema.', 'shopengine'),
278 - 'docs' => 'https://wpmet.com/doc/rox-dynamic-cpt-fields-engine/',
279 - ],
280 - 'rox-appointment-booking/rox-appointment-booking.php' => [
281 - 'name' => esc_html__('Rox Appointment Booking', 'shopengine'),
282 - 'url' => 'https://wordpress.org/plugins/rox-appointment-booking/',
283 - 'icon' => 'https://ps.w.org/rox-appointment-booking/assets/icon-256x256.png?rev=3575641',
284 - 'desc' => esc_html__('Manage bookings, agents, payments, and calendars from one dashboard! A complete appointment and scheduling solution for WordPress.', 'shopengine'),
285 - 'docs' => 'https://wpmet.com/doc/rox-appointment-booking/',
286 - ],
287 - 'metform/metform.php' => [
288 - 'name' => esc_html__('MetForm', 'shopengine'),
289 - 'url' => 'https://wordpress.org/plugins/metform/',
290 - 'icon' => $apps_img_path. 'metform.png',
291 - 'desc' => esc_html__('Drag & drop form builder for Elementor to create contact forms, multi-step forms, and more — smoother, faster, and better!', 'shopengine'),
292 - 'docs' => 'https://wpmet.com/doc/metform/',
293 - ],
294 - 'popup-builder-block/popup-builder-block.php' => [
295 - 'name' => esc_html__('PopupKit', 'shopengine'),
296 - 'url' => 'https://wordpress.org/plugins/popup-builder-block/',
297 - 'icon' => 'https://ps.w.org/popup-builder-block/assets/icon-256x256.png?rev=3316844',
298 - 'desc' => esc_html__('Design popups that convert, right in your WordPress dashboard.', 'shopengine'),
299 - 'docs' => 'https://wpmet.com/doc/popupkit/',
300 - ],
301 - 'table-builder-block/table-builder-block.php' => [
302 - 'name' => esc_html__('TableKit', 'shopengine'),
303 - 'url' => 'https://wordpress.org/plugins/table-builder-block/',
304 - 'icon' => 'https://ps.w.org/table-builder-block/assets/icon-256x256.png?rev=3509972',
305 - 'desc' => esc_html__('Fully Customizable. Multi-Media Integration. Synch Any Data Files. All Within Block Editor.', 'shopengine'),
306 - 'docs' => 'https://wpmet.com/doc/tablekit/',
307 - ],
308 - 'getgenie/getgenie.php' => [
309 - 'name' => esc_html__('GetGenie', 'shopengine'),
310 - 'url' => 'https://wordpress.org/plugins/getgenie/',
311 - 'icon' => $apps_img_path.'getgenie.gif',
312 - 'desc' => esc_html__('Your personal AI assistant for content and SEO. Write content that ranks on Google with NLP keywords and SERP analysis data.', 'shopengine'),
313 - 'docs' => 'https://getgenie.ai/docs/',
314 - ],
315 - 'emailkit/EmailKit.php' => [
316 - 'name' => esc_html__('EmailKit', 'shopengine'),
317 - 'url' => 'https://wordpress.org/plugins/emailkit/',
318 - 'icon' => $apps_img_path . 'emailkit.png',
319 - 'desc' => esc_html__('Advanced email customizer for WooCommerce and WordPress. Build, customize, and send emails from WordPress to boost your sales!', 'shopengine'),
320 - 'docs' => 'https://wpmet.com/doc/emailkit/',
321 - ],
322 - 'wp-social/wp-social.php' => [
323 - 'name' => esc_html__('WP Social', 'shopengine'),
324 - 'url' => 'https://wordpress.org/plugins/wp-social/',
325 - 'icon' => $apps_img_path . 'wp-social.png',
326 - 'desc' => esc_html__('Add social share, login, and engagement counter — unified solution for all social media with tons of different styles for your website.', 'shopengine'),
327 - 'docs' => 'https://wpmet.com/doc/wp-social/',
328 - ],
329 - 'blocks-for-shopengine/shopengine-gutenberg-addon.php' => [
330 - 'name' => esc_html__('Blocks for ShopEngine', 'shopengine'),
331 - 'url' => 'https://wordpress.org/plugins/blocks-for-shopengine/',
332 - 'icon' => $apps_img_path. 'shopengine.gif',
333 - 'desc' => esc_html__('All in one WooCommerce solution for Gutenberg! Build your WooCommerce pages in a block editor with full customization.', 'shopengine'),
334 - 'docs' => 'https://wpmet.com/doc/shopengine/shopengine-gutenberg/',
335 - ],
336 - ]
337 - )
338 - ->call();
339 -
340 - // working get instance of elementor widget
341 - (new Manifest())->init();
342 - } );
343 -
344 -
345 -
346 - \ShopEngine\Core\MultiLanguage\Language::instance()->init();
347 -
348 176 \ShopEngine\Core\Settings\Base::instance()->init();
349 177
350 -
351 178 new Libs\Select_Api\Base();
352 179
353 180 (new Module_Manifest())->init();
354 181
182 + // working get instance of elementor widget
183 + (new Manifest())->init();
355 184
356 185 Query_Modifier::instance()->init();
357 186
358 187 (new Conflict_Manifest())->init();
@@ -361,9 +190,9 @@
361 190 add_action('get_header', [$this, 'shopengine_track_product_views']);
362 191
363 192 // database migrations
364 193 // (new \ShopEngine\Compatibility\Migrations\Migration())->init();
365 - // (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
194 + (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
366 195
367 196
368 197 // call service providers
369 198
@@ -377,33 +206,14 @@
377 206 }
378 207
379 208 }
380 209
381 - add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
382 210
383 - //it will register an option in customizer for woocommerce products catelog. It's related with our Arcive Products widget.
384 - Register_Settings::instance()->init();
385 - }
386 211
387 - public function shopengine_wcmmq_cart_validation_compat( $check, $request ) {
388 -
389 - $cart_widget_flag = isset( $_REQUEST['shopengine_cart_widget'] )
390 - ? sanitize_text_field( wp_unslash( $_REQUEST['shopengine_cart_widget'] ) )
391 - : '';
392 - $cart_widget_nonce = isset( $_REQUEST['shopengine_cart_widget_nonce'] )
393 - ? sanitize_text_field( wp_unslash( $_REQUEST['shopengine_cart_widget_nonce'] ) )
394 - : '';
395 -
396 - if ( $cart_widget_flag === '1' && wp_verify_nonce( $cart_widget_nonce, 'shopengine_cart_widget' ) ) {
397 - return false; // Skip WC MMQ validation for verified ShopEngine cart widget requests
398 - }
399 - return $check; // Proceed with normal validation for other requests
212 + add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
400 213 }
401 214
402 215
403 -
404 -
405 -
406 216 // add async and defer attributes to enqueued scripts
407 217 public function filter_load_type($tag, $handle, $src) {
408 218
409 219 if(strpos($handle, '-async') !== false) {
@@ -432,9 +242,9 @@
432 242 $cookie_name = "shopengine_recent_viewed_product";
433 243
434 244 if(isset($_COOKIE[$cookie_name])) {
435 245
436 - $cookie_ids = sanitize_text_field(wp_unslash($_COOKIE[$cookie_name]));
246 + $cookie_ids = $_COOKIE[$cookie_name];
437 247 $product_ids = explode(',', $cookie_ids);
438 248
439 249 if(!is_array($product_ids)) {
440 250 $product_ids = [$product_ids];
@@ -470,10 +280,12 @@
470 280 * Include public function
471 281 *
472 282 * @since 1.0.0
473 283 */
474 - public function js_css_public() {
475 - wp_register_style('shopengine-public', \ShopEngine::plugin_url() . 'assets/css/shopengine-public.css', false, \ShopEngine::version());
284 + public function js_css_public() {
285 + wp_enqueue_style('shopengine-icon', \ShopEngine::plugin_url() . 'assets/css/shopengine-icon.css', false, \ShopEngine::version());
286 + wp_enqueue_style('shopengine-simple-scrollbar-css', \ShopEngine::plugin_url() . 'assets/css/simple-scrollbar.css', false, \ShopEngine::version());
287 + wp_enqueue_style('shopengine-public-css', \ShopEngine::plugin_url() . 'assets/css/public-style.css', false, \ShopEngine::version());
476 288
477 289 // Modal Stylesheet
478 290 wp_register_style('shopengine-modal-styles', \ShopEngine::plugin_url() . 'assets/css/shopengine-modal.css', false, \ShopEngine::version());
479 291
@@ -522,11 +334,11 @@
522 334
523 335
524 336 public function missing_woocommerce() {
525 337
526 - if(!current_user_can('manage_options')) {
527 - return;
528 - }
338 + if(isset($_GET['activate'])) {
339 + unset($_GET['activate']);
340 + }
529 341
530 342 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
531 343
532 344 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
@@ -542,9 +354,8 @@
542 354 [
543 355 'id' => 'missing-woo',
544 356 'type' => 'error',
545 357 'dismissible' => true,
546 - 'is_required' => true,
547 358 'btn' => $btn,
548 359 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
549 360 ]
550 361 );
@@ -552,11 +363,11 @@
552 363
553 364
554 365 public function missing_elementor() {
555 366
556 - if(!current_user_can('manage_options')) {
557 - return;
558 - }
367 + if(isset($_GET['activate'])) {
368 + unset($_GET['activate']);
369 + }
559 370
560 371 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
561 372
562 373 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
@@ -567,28 +378,15 @@
567 378 $btn['label'] = esc_html__('Install Elementor', 'shopengine');
568 379 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=elementor'), 'install-plugin_elementor');
569 380 }
570 381
571 - if(file_exists(WP_PLUGIN_DIR . '/blocks-for-shopengine/shopengine-gutenberg-addon.php')) {
572 -
573 - $btn2['label'] = esc_html__('Activate Blocks for ShopEngine', 'shopengine');
574 - $btn2['url'] = wp_nonce_url('plugins.php?action=activate&plugin=blocks-for-shopengine/shopengine-gutenberg-addon.php&plugin_status=all&paged=1', 'activate-plugin_blocks-for-shopengine/shopengine-gutenberg-addon.php');
575 -
576 - } else {
577 -
578 - $btn2['label'] = esc_html__('Install Blocks for ShopEngine', 'shopengine');
579 - $btn2['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=blocks-for-shopengine'), 'install-plugin_blocks-for-shopengine');
580 - }
581 -
582 382 Utils\Notice::push(
583 383 [
584 384 'id' => 'missing-elementor',
585 385 'type' => 'error',
586 - 'is_required' => true,
587 386 'dismissible' => true,
588 387 'btn' => $btn,
589 - 'btn2' => $btn2,
590 - 'message' => esc_html__('To use ShopEngine, install Elementor (For the Elementor Builder) OR Blocks for ShopEngine (For Gutenberg Builder).', 'shopengine'),
388 + 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
591 389 ]
592 390 );
593 391 }
594 392
@@ -593,12 +391,8 @@
593 391 }
594 392
595 393
596 394 public function failed_elementor_version() {
597 -
598 - if(!current_user_can('manage_options')) {
599 - return;
600 - }
601 395
602 396 $btn['label'] = esc_html__('Update Elementor', 'shopengine');
603 397 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=elementor'), 'upgrade-plugin_elementor');
604 398