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 +94 -127 4.2.11.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,41 +83,72 @@
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 - /**
117 - * migrate data
118 - */
119 - LangMigration::instance()->init();
120 - });
92 + if(is_admin() && $pagenow == 'post.php' && $_REQUEST['action'] === 'edit') {
121 93
122 - // avoid themes for loading woocommerce functions
123 - $avoid_themes = ['avada', 'avada child', 'woodmart', 'woodmart child'];
124 - if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
125 - /**
126 - * Ensuring woocommerce functions are loaded before theme is modifying those
127 - *
128 - */
129 - require_once WC_ABSPATH . '/includes/wc-template-functions.php';
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 + }
130 104 }
131 105
106 + add_action('wp_loaded', function (){
132 107
133 - if(did_action('elementor/loaded')) {
134 - // Load custom elementor controls
135 - new \ShopEngine\Core\Elementor_Controls\Init();
108 + if(isset($_REQUEST['preview']) && $_REQUEST['preview'] == 'true' && !empty($_REQUEST['preview_id'])) {
136 109
137 - //Loading the scripts and styles
138 - add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
139 - }
110 + $pid = (int) $_REQUEST['preview_id'];
140 111
112 + $po = get_post($pid);
141 113
142 - //Loading public scripts and styles
114 + if($po->post_type === Template_Cpt::TYPE) {
115 +
116 + $template = \ShopEngine\Core\Builders\Templates::get_registered_template_data($pid);
117 +
118 + if(empty($template) || !isset($template['url'])){
119 +
120 + die('There are some errors.');
121 + }
122 +
123 + $param = [
124 + 'shopengine_template_id' => $pid,
125 + 'preview_nonce' => wp_create_nonce( 'template_preview_' . $pid ),
126 + 'change_template' => '1'
127 + ];
128 +
129 + $url = \ShopEngine\Utils\Helper::add_to_url($template['url'], $param);
130 +
131 + wp_safe_redirect( $url );
132 + exit;
133 + }
134 + }
135 + });
136 +
137 +
138 + /**
139 + * Ensuring woocommerce functions are loaded before theme is modifying those
140 + *
141 + */
142 + require_once WC_ABSPATH . '/includes/wc-template-functions.php';
143 +
144 +
145 + // Load custom elementor controls
146 + new \ShopEngine\Core\Elementor_Controls\Init();
147 +
148 + //Loading the scripts and styles
143 149 add_action('wp_enqueue_scripts', [$this, 'js_css_public']);
150 + add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
144 151
145 152 //woocommece theme support
146 153 if(!current_theme_supports('woocommerce')) {
147 154 add_theme_support('woocommerce');
@@ -149,111 +156,60 @@
149 156 add_theme_support('wc-product-gallery-lightbox');
150 157 add_theme_support('wc-product-gallery-slider');
151 158 }
152 159
160 +
153 161 #Registering new post-type & etc
154 162 Base::instance()->init();
155 163
156 - Rating::instance('shopengine')
157 - ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
158 - ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
159 - ->set_priority( 10 )
160 - ->set_first_appear_day( 7 )
161 - ->set_condition( true )
162 - ->call();
163 -
164 - \ShopEngine\Core\MultiLanguage\Language::instance()->init();
165 -
166 164 \ShopEngine\Core\Settings\Base::instance()->init();
167 165
168 - new Libs\Select_Api\Base();
166 + (new Module_Manifest)->init();
169 167
170 - (new Module_Manifest())->init();
171 -
172 168 // working get instance of elementor widget
173 - (new Manifest())->init();
169 + (new Manifest)->init();
174 170
175 171 Query_Modifier::instance()->init();
176 172
177 - (new Conflict_Manifest())->init();
173 + (new Conflict_Manifest)->init();
178 174
179 175 // view count
180 - add_action('get_header', [$this, 'shopengine_track_product_views']);
176 + add_action('wp_head', [$this, 'shopengine_track_product_views']);
181 177
182 178 // database migrations
183 179 // (new \ShopEngine\Compatibility\Migrations\Migration())->init();
184 - // (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
180 + (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
185 181
186 -
187 - // call service providers
188 -
189 - $service_providers = include \ShopEngine::plugin_dir().'core/service-provider-manager.php';
190 - $method = 'init';
191 - foreach( $service_providers as $service_provider ){
192 -
193 - if(class_exists($service_provider) && method_exists($service_provider, $method)) {
194 - $instance = new $service_provider();
195 - $instance->$method();
196 - }
197 -
198 - }
199 -
200 182 add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
201 183 }
202 184
203 185
204 - // add async and defer attributes to enqueued scripts
205 - public function filter_load_type($tag, $handle, $src) {
206 -
207 - if(strpos($handle, '-async') !== false) {
208 - $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;
209 198 }
210 199
211 - if(strpos($handle, '-defer') !== false) {
212 - $tag = str_replace('<script ', '<script defer ', $tag);
213 - }
214 -
215 - return $tag;
216 - }
217 -
218 200 /**
219 201 * Public function shopengine_track_product_views
220 202 * Adding Product Views Count Meta
221 203 */
222 - public function shopengine_track_product_views() {
223 -
204 + public function shopengine_track_product_views($product_id) {
224 205 if(class_exists('WooCommerce') && !is_product()) {
225 206 return;
226 207 }
227 -
228 208 $product_id = get_the_id();
229 209
230 - $cookie_name = "shopengine_recent_viewed_product";
231 -
232 - if(isset($_COOKIE[$cookie_name])) {
233 -
234 - $cookie_ids = sanitize_text_field(wp_unslash($_COOKIE[$cookie_name]));
235 - $product_ids = explode(',', $cookie_ids);
236 -
237 - if(!is_array($product_ids)) {
238 - $product_ids = [$product_ids];
239 - }
240 -
241 - $product_ids = array_combine($product_ids, $product_ids);
242 - unset($product_ids[$product_id]);
243 - $product_ids[] = $product_id;
244 -
245 - $cookie_value = implode(',', $product_ids);
246 -
247 - } else {
248 - $cookie_value = $product_id;
249 - }
250 -
251 - setcookie($cookie_name, $cookie_value, strtotime('+30 days'), '/' );
252 -
253 210 $count_key = 'shopengine_product_views_count';
254 211 $count = get_post_meta($product_id, $count_key, true);
255 -
256 212 if($count == '') {
257 213 $count = 1;
258 214 delete_post_meta($product_id, $count_key);
259 215 add_post_meta($product_id, $count_key, '1');
@@ -268,10 +224,12 @@
268 224 * Include public function
269 225 *
270 226 * @since 1.0.0
271 227 */
272 - public function js_css_public() {
273 - 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());
274 232
275 233 // Modal Stylesheet
276 234 wp_register_style('shopengine-modal-styles', \ShopEngine::plugin_url() . 'assets/css/shopengine-modal.css', false, \ShopEngine::version());
277 235
@@ -320,8 +278,12 @@
320 278
321 279
322 280 public function missing_woocommerce() {
323 281
282 + if(isset($_GET['activate'])) {
283 + unset($_GET['activate']);
284 + }
285 +
324 286 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
325 287
326 288 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
327 289 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=woocommerce/woocommerce.php&plugin_status=all&paged=1', 'activate-plugin_woocommerce/woocommerce.php');
@@ -345,8 +307,12 @@
345 307
346 308
347 309 public function missing_elementor() {
348 310
311 + if(isset($_GET['activate'])) {
312 + unset($_GET['activate']);
313 + }
314 +
349 315 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
350 316
351 317 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
352 318 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=elementor/elementor.php&plugin_status=all&paged=1', 'activate-plugin_elementor/elementor.php');
@@ -398,5 +364,6 @@
398 364 }
399 365
400 366 return self::$instance;
401 367 }
368 +
402 369 }