PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.3.0
ShopBuilder – WooCommerce Builder For Elementor v3.3.0
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
← All changes | app/Controllers/BuilderController.php +62 -35 3.2.63.3.0 View file →
@@ -187,45 +187,50 @@
187 187 continue;
188 188 }
189 189
190 190 if ( ! empty( $element['category'] ) ) {
191 - $widget = false;
192 - $import = apply_filters( 'rtsb_import_status', false );
193 - switch ( $element['category'] ) {
194 - case 'product':
195 - if ( BuilderFns::is_product() || $import ) {
191 + try {
192 + $widget = false;
193 + $import = apply_filters( 'rtsb_import_status', false );
194 + switch ( $element['category'] ) {
195 + case 'product':
196 + if ( BuilderFns::is_product() || $import ) {
197 + $widget = new $element['base_class']();
198 + }
199 + break;
200 + case 'shop':
201 + if ( BuilderFns::is_archive() || BuilderFns::is_shop() || $import ) {
202 + $widget = new $element['base_class']();
203 + }
204 + break;
205 + case 'archive':
206 + if ( BuilderFns::is_archive() || $import ) {
207 + $widget = new $element['base_class']();
208 + }
209 + break;
210 + case 'cart':
211 + if ( BuilderFns::is_cart() || $import ) {
212 + $widget = new $element['base_class']();
213 + }
214 + break;
215 + case 'checkout':
216 + if ( BuilderFns::is_checkout() || $import ) {
217 + $widget = new $element['base_class']();
218 + }
219 + break;
220 + case 'general':
196 221 $widget = new $element['base_class']();
197 - }
198 - break;
199 - case 'shop':
200 - if ( BuilderFns::is_archive() || BuilderFns::is_shop() || $import ) {
201 - $widget = new $element['base_class']();
202 - }
203 - break;
204 - case 'archive':
205 - if ( BuilderFns::is_archive() || $import ) {
206 - $widget = new $element['base_class']();
207 - }
208 - break;
209 - case 'cart':
210 - if ( BuilderFns::is_cart() || $import ) {
211 - $widget = new $element['base_class']();
212 - }
213 - break;
214 - case 'checkout':
215 - if ( BuilderFns::is_checkout() || $import ) {
216 - $widget = new $element['base_class']();
217 - }
218 - break;
219 - case 'general':
220 - $widget = new $element['base_class']();
221 - break;
222 - default:
223 - }
224 - $widget = apply_filters( 'rtsb/element/list/init/widgets', $widget, $element );
222 + break;
223 + default:
224 + }
225 + $widget = apply_filters( 'rtsb/element/list/init/widgets', $widget, $element );
225 226
226 - if ( $widget && is_object( $widget ) ) {
227 - $widgets_manager->register( $widget );
227 + if ( $widget && is_object( $widget ) ) {
228 + $widgets_manager->register( $widget );
229 + }
230 + } catch ( \Throwable $e ) {
231 + error_log( 'ShopBuilder widget error (' . $element['base_class'] . '): ' . $e->getMessage() ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
232 + continue;
228 233 }
229 234 }
230 235 }
231 236 }
@@ -336,8 +341,29 @@
336 341 if ( BuilderFns::is_checkout() ) {
337 342 if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
338 343 return;
339 344 }
345 +
346 + $checkout = WC()->checkout();
347 +
348 + // Temporarily remove callbacks that Elementor checkout
349 + // handles via separate widgets to prevent duplicates.
350 + remove_action( 'woocommerce_before_checkout_form', [ Hooks\ActionHooks::class, 'woocommerce_checkout_login_form' ], 10 );
351 + remove_action( 'woocommerce_before_checkout_form', [ Hooks\ActionHooks::class, 'woocommerce_checkout_coupon_form' ], 10 );
352 + remove_action( 'woocommerce_before_checkout_form', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
353 +
354 + do_action( 'woocommerce_before_checkout_form', $checkout );
355 +
356 + // Restore callbacks for non-Elementor contexts.
357 + add_action( 'woocommerce_before_checkout_form', [ Hooks\ActionHooks::class, 'woocommerce_checkout_login_form' ], 10 );
358 + add_action( 'woocommerce_before_checkout_form', [ Hooks\ActionHooks::class, 'woocommerce_checkout_coupon_form' ], 10 );
359 + add_action( 'woocommerce_before_checkout_form', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
360 +
361 + // If checkout registration is disabled and not logged in, the user cannot checkout.
362 + if ( ! $checkout->is_registration_enabled() && $checkout->is_registration_required() && ! is_user_logged_in() ) {
363 + echo esc_html( apply_filters( 'woocommerce_checkout_must_be_logged_in_message', __( 'You must be logged in to checkout.', 'shopbuilder' ) ) );
364 + return;
365 + }
340 366 ?>
341 367 <!--
342 368 woocommerce-checkout added for fix issue with payment method ( Revolut Pay )
343 369 -->
@@ -369,8 +395,9 @@
369 395 }
370 396 ?>
371 397 </form>
372 398 <?php
399 + do_action( 'woocommerce_after_checkout_form', WC()->checkout() );
373 400 }
374 401 ?>
375 402 </div>
376 403 <!-- After Content end -->