PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 1.4.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v1.4.0
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 +76 -139 4.1.01.4.0 View file →
@@ -3,13 +3,11 @@
3 3 namespace ShopEngine;
4 4
5 5 use ShopEngine\Compatibility\Conflicts\Manifest as Conflict_Manifest;
6 6 use ShopEngine\Core\Builders\Base;
7 -use ShopEngine\Compatibility\Migrations\LangMigration;
8 7 use ShopEngine\Core\Query_Modifier;
9 8 use ShopEngine\Core\Template_Cpt;
10 9 use ShopEngine\Libs\License\License_Route;
11 -use ShopEngine\Libs\Rating\Rating;
12 10 use ShopEngine\Libs\Updater\Init as Updater;
13 11 use ShopEngine\Modules\Manifest as Module_Manifest;
14 12 use ShopEngine\Widgets\Manifest;
15 13
@@ -51,50 +49,28 @@
51 49
52 50 $error = true;
53 51 }
54 52
55 - $check_elementor_version = false;
56 -
57 53 // Check if Elementor installed and activated.
58 - if(!did_action('elementor/loaded')) {
54 + if(!did_action('elementor/loaded')) {
55 + add_action('admin_notices', [$this, 'missing_elementor']);
59 56
60 - if(!did_action('shopengine-gutenberg-addon/before_loaded')) {
57 + $error = true;
58 + }
61 59
62 - add_action('admin_notices', [$this, 'missing_elementor']);
63 -
64 - $error = true;
65 - }
66 - }
67 -
68 60 // Check for required Elementor version.
69 - if(did_action('elementor/loaded') && defined('ELEMENTOR_VERSION') && !version_compare(ELEMENTOR_VERSION, '3.0.0', '>=')) {
61 + if(defined('ELEMENTOR_VERSION') && !version_compare(ELEMENTOR_VERSION, '3.0.0', '>=')) {
62 + add_action('admin_notices', [$this, 'failed_elementor_version']);
70 63
71 - add_action('admin_notices', [$this, 'failed_elementor_version']);
64 + $error = true;
65 + }
72 66
73 - $error = true;
74 - }
67 + if($error) {
75 68
76 - if($error) {
77 69 return;
78 70 }
79 -
80 - add_filter("plugin_action_links_shopengine/shopengine.php", function ($links) {
81 - $free = esc_html__("Go To Shopengine","shopengine");
82 - $pro = esc_html__("Go To ShopenginePro","shopengine");
83 71
84 - $custom_links[] = '<a title="' . $free . '" href="'.admin_url('edit.php?post_type=shopengine-template#getting-started').'" target="_blank">' . esc_html__('Settings', 'shopengine') . '</a>';
85 72
86 - foreach ($custom_links as $custom_link):
87 - array_unshift($links, $custom_link);
88 - endforeach;
89 -
90 - if (!is_plugin_active('shopengine-pro/shopengine-pro.php')) {
91 - $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>';
92 - }
93 - return $links;
94 - });
95 -
96 -
97 73 /**
98 74 * Routes initialization
99 75 *
100 76 */
@@ -107,17 +83,32 @@
107 83 add_action('admin_init', function () {
108 84 if(class_exists('ShopEngine_Pro')) {
109 85 new Updater();
110 86 }
111 - new \ShopEngine\Compatibility\Migrations\Direct_Checkout;
87 +
112 88 });
113 89
90 + global $pagenow;
114 91
115 - add_action('wp_loaded', function () {
116 - //phpcs:ignore WordPress.Security.NonceVerification.Recommended --It's a fronted user part, not possible to verify nonce here
92 + if(is_admin() && $pagenow == 'post.php' && $_REQUEST['action'] === 'edit') {
93 +
94 + $pid = $_REQUEST['post'];
95 + $po = get_post($pid);
96 +
97 + if($po->post_type === Template_Cpt::TYPE) {
98 +
99 + $url = get_admin_url(). 'edit.php?post_type='.Template_Cpt::TYPE.'#'.Template_Cpt::TYPE;
100 +
101 + wp_safe_redirect( $url );
102 + exit;
103 + }
104 + }
105 +
106 + add_action('wp_loaded', function (){
107 +
117 108 if(isset($_REQUEST['preview']) && $_REQUEST['preview'] == 'true' && !empty($_REQUEST['preview_id'])) {
118 109
119 - $pid = (int)$_REQUEST['preview_id']; //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- It's a fronted user part, not possible to verify nonce here
110 + $pid = (int) $_REQUEST['preview_id'];
120 111
121 112 $po = get_post($pid);
122 113
123 114 if($po->post_type === Template_Cpt::TYPE) {
@@ -123,55 +114,41 @@
123 114 if($po->post_type === Template_Cpt::TYPE) {
124 115
125 116 $template = \ShopEngine\Core\Builders\Templates::get_registered_template_data($pid);
126 117
127 - if(empty($template) || !isset($template['url'])) {
128 - return;
118 + if(empty($template) || !isset($template['url'])){
119 +
120 + die('There are some errors.');
129 121 }
130 122
131 123 $param = [
132 124 'shopengine_template_id' => $pid,
133 - 'preview_nonce' => wp_create_nonce('template_preview_' . $pid),
134 - 'change_template' => '1',
125 + 'preview_nonce' => wp_create_nonce( 'template_preview_' . $pid ),
126 + 'change_template' => '1'
135 127 ];
136 128
137 - $tem_url = (get_post_meta($pid, 'shopengine_template__post_meta__type' , true) == 'order') ? $po->guid : $template['url'];
138 - $url = \ShopEngine\Utils\Helper::add_to_url($tem_url, $param);
129 + $url = \ShopEngine\Utils\Helper::add_to_url($template['url'], $param);
139 130
140 - wp_safe_redirect($url);
131 + wp_safe_redirect( $url );
141 132 exit;
142 133 }
143 134 }
144 -
145 - /**
146 - * migrate data
147 - */
148 - LangMigration::instance()->init();
149 135 });
150 136
151 - // avoid themes for loading woocommerce functions
152 - $avoid_themes = ['avada', 'avada child'];
153 137
154 - if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
155 - /**
156 - * Ensuring woocommerce functions are loaded before theme is modifying those
157 - *
158 - */
159 - require_once WC_ABSPATH . '/includes/wc-template-functions.php';
160 - }
138 + /**
139 + * Ensuring woocommerce functions are loaded before theme is modifying those
140 + *
141 + */
142 + require_once WC_ABSPATH . '/includes/wc-template-functions.php';
161 143
162 144
163 - if(did_action('elementor/loaded')) {
164 - // Load custom elementor controls
165 - new \ShopEngine\Core\Elementor_Controls\Init();
145 + // Load custom elementor controls
146 + new \ShopEngine\Core\Elementor_Controls\Init();
166 147
167 - //Loading the scripts and styles
168 - add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
169 - }
170 -
171 -
172 - //Loading public scripts and styles
148 + //Loading the scripts and styles
173 149 add_action('wp_enqueue_scripts', [$this, 'js_css_public']);
150 + add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
174 151
175 152 //woocommece theme support
176 153 if(!current_theme_supports('woocommerce')) {
177 154 add_theme_support('woocommerce');
@@ -179,111 +156,60 @@
179 156 add_theme_support('wc-product-gallery-lightbox');
180 157 add_theme_support('wc-product-gallery-slider');
181 158 }
182 159
160 +
183 161 #Registering new post-type & etc
184 162 Base::instance()->init();
185 163
186 - Rating::instance('shopengine')
187 - ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
188 - ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
189 - ->set_priority( 10 )
190 - ->set_first_appear_day( 7 )
191 - ->set_condition( true )
192 - ->call();
193 -
194 - \ShopEngine\Core\MultiLanguage\Language::instance()->init();
195 -
196 164 \ShopEngine\Core\Settings\Base::instance()->init();
197 165
198 - new Libs\Select_Api\Base();
166 + (new Module_Manifest)->init();
199 167
200 - (new Module_Manifest())->init();
201 -
202 168 // working get instance of elementor widget
203 - (new Manifest())->init();
169 + (new Manifest)->init();
204 170
205 171 Query_Modifier::instance()->init();
206 172
207 - (new Conflict_Manifest())->init();
173 + (new Conflict_Manifest)->init();
208 174
209 175 // view count
210 - add_action('get_header', [$this, 'shopengine_track_product_views']);
176 + add_action('wp_head', [$this, 'shopengine_track_product_views']);
211 177
212 178 // database migrations
213 179 // (new \ShopEngine\Compatibility\Migrations\Migration())->init();
214 - // (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
180 + (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
215 181
216 -
217 - // call service providers
218 -
219 - $service_providers = include \ShopEngine::plugin_dir().'core/service-provider-manager.php';
220 - $method = 'init';
221 - foreach( $service_providers as $service_provider ){
222 -
223 - if(class_exists($service_provider) && method_exists($service_provider, $method)) {
224 - $instance = new $service_provider();
225 - $instance->$method();
226 - }
227 -
228 - }
229 -
230 182 add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
231 183 }
232 184
233 185
234 - // add async and defer attributes to enqueued scripts
235 - public function filter_load_type($tag, $handle, $src) {
236 -
237 - if(strpos($handle, '-async') !== false) {
238 - $tag = str_replace(' src', ' async="async" src', $tag);
186 + // add async and defer attributes to enqueued scripts
187 + public function filter_load_type($tag, $handle, $src) {
188 +
189 + if (strpos($handle, '-async') !== false) {
190 + $tag = str_replace(' src', ' async="async" src', $tag);
191 + }
192 +
193 + if (strpos($handle, '-defer') !== false) {
194 + $tag = str_replace('<script ', '<script defer ', $tag);
195 + }
196 +
197 + return $tag;
239 198 }
240 199
241 - if(strpos($handle, '-defer') !== false) {
242 - $tag = str_replace('<script ', '<script defer ', $tag);
243 - }
244 -
245 - return $tag;
246 - }
247 -
248 200 /**
249 201 * Public function shopengine_track_product_views
250 202 * Adding Product Views Count Meta
251 203 */
252 - public function shopengine_track_product_views() {
253 -
204 + public function shopengine_track_product_views($product_id) {
254 205 if(class_exists('WooCommerce') && !is_product()) {
255 206 return;
256 207 }
257 -
258 208 $product_id = get_the_id();
259 209
260 - $cookie_name = "shopengine_recent_viewed_product";
261 -
262 - if(isset($_COOKIE[$cookie_name])) {
263 -
264 - $cookie_ids = sanitize_text_field(wp_unslash($_COOKIE[$cookie_name]));
265 - $product_ids = explode(',', $cookie_ids);
266 -
267 - if(!is_array($product_ids)) {
268 - $product_ids = [$product_ids];
269 - }
270 -
271 - $product_ids = array_combine($product_ids, $product_ids);
272 - unset($product_ids[$product_id]);
273 - $product_ids[] = $product_id;
274 -
275 - $cookie_value = implode(',', $product_ids);
276 -
277 - } else {
278 - $cookie_value = $product_id;
279 - }
280 -
281 - setcookie($cookie_name, $cookie_value, strtotime('+30 days'), '/' );
282 -
283 210 $count_key = 'shopengine_product_views_count';
284 211 $count = get_post_meta($product_id, $count_key, true);
285 -
286 212 if($count == '') {
287 213 $count = 1;
288 214 delete_post_meta($product_id, $count_key);
289 215 add_post_meta($product_id, $count_key, '1');
@@ -298,10 +224,12 @@
298 224 * Include public function
299 225 *
300 226 * @since 1.0.0
301 227 */
302 - public function js_css_public() {
303 - wp_register_style('shopengine-public', \ShopEngine::plugin_url() . 'assets/css/shopengine-public.css', false, \ShopEngine::version());
228 + public function js_css_public() {
229 + wp_enqueue_style('shopengine-icon', \ShopEngine::plugin_url() . 'assets/css/shopengine-icon.css', false, \ShopEngine::version());
230 + wp_enqueue_style('shopengine-simple-scrollbar-css', \ShopEngine::plugin_url() . 'assets/css/simple-scrollbar.css', false, \ShopEngine::version());
231 + wp_enqueue_style('shopengine-public-css', \ShopEngine::plugin_url() . 'assets/css/public-style.css', false, \ShopEngine::version());
304 232
305 233 // Modal Stylesheet
306 234 wp_register_style('shopengine-modal-styles', \ShopEngine::plugin_url() . 'assets/css/shopengine-modal.css', false, \ShopEngine::version());
307 235
@@ -350,8 +278,12 @@
350 278
351 279
352 280 public function missing_woocommerce() {
353 281
282 + if(isset($_GET['activate'])) {
283 + unset($_GET['activate']);
284 + }
285 +
354 286 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
355 287
356 288 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
357 289 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=woocommerce/woocommerce.php&plugin_status=all&paged=1', 'activate-plugin_woocommerce/woocommerce.php');
@@ -375,8 +307,12 @@
375 307
376 308
377 309 public function missing_elementor() {
378 310
311 + if(isset($_GET['activate'])) {
312 + unset($_GET['activate']);
313 + }
314 +
379 315 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
380 316
381 317 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
382 318 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=elementor/elementor.php&plugin_status=all&paged=1', 'activate-plugin_elementor/elementor.php');
@@ -428,5 +364,6 @@
428 364 }
429 365
430 366 return self::$instance;
431 367 }
368 +
432 369 }