PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.0.0
ShopBuilder – WooCommerce Builder For Elementor v2.0.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 +109 -234 3.4.02.0.0 View file →
@@ -6,16 +6,17 @@
6 6 */
7 7
8 8 namespace RadiusTheme\SB\Controllers;
9 9
10 +use Elementor\Plugin;
10 11 use RadiusTheme\SB\Helpers\Fns;
11 12 use RadiusTheme\SB\Helpers\BuilderFns;
12 -use RadiusTheme\SB\Models\ElementList;
13 13 use RadiusTheme\SB\Traits\SingletonTrait;
14 14 use RadiusTheme\SB\Controllers\Builder\BuilderCpt;
15 15 use RadiusTheme\SB\Controllers\Hooks\BuilderHooks;
16 16 use RadiusTheme\SB\Elementor\Controls\ImageSelectorControl;
17 17 use RadiusTheme\SB\Elementor\Controls\Select2AjaxControl;
18 +use RadiusTheme\SB\Models\ElementList;
18 19
19 20 // Do not allow directly accessing this file.
20 21 if ( ! defined( 'ABSPATH' ) ) {
21 22 exit( 'This script cannot be accessed directly.' );
@@ -25,13 +26,8 @@
25 26 * Builder Controller
26 27 */
27 28 class BuilderController {
28 29 /**
29 - * @var array
30 - */
31 - private static $cache = [];
32 -
33 - /**
34 30 * Builder page id.
35 31 *
36 32 * @var integer
37 33 */
@@ -54,24 +50,25 @@
54 50 */
55 51 private function __construct() {
56 52 $this->builder_page_id = BuilderFns::builder_page_id_by_page();
57 53 $this->page_edit_with = Fns::page_edit_with( $this->builder_page_id );
54 +
58 55 if ( ! is_admin() ) {
59 56 BuilderHooks::instance();
60 57 }
61 58
62 59 BuilderCpt::instance();
63 - if ( defined( 'ELEMENTOR_VERSION' ) ) {
64 - $this->elementor_init();
65 - $this->both_builder_frontend();
66 - add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'editor_scripts' ] );
67 - }
60 +
61 + add_action( 'elementor/init', [ $this, 'elementor_init' ] );
62 + add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'editor_scripts' ] );
63 + add_action( 'template_redirect', [ $this, 'both_builder_frontend' ], 99 );
64 +
68 65 // RT Select2 Ajax.
69 - add_action( 'wp_ajax_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
70 - add_action( 'wp_ajax_nopriv_rtsb_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
66 + add_action( 'wp_ajax_rt_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
67 + add_action( 'wp_ajax_nopriv_rt_select2_object_search', [ $this, 'select2_ajax_posts_filter_autocomplete' ] );
71 68 // Select2 ajax save data.
72 - add_action( 'wp_ajax_rtsb_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
73 - add_action( 'wp_ajax_nopriv_rtsb_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
69 + add_action( 'wp_ajax_rt_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
70 + add_action( 'wp_ajax_nopriv_rt_select2_get_title', [ $this, 'select2_ajax_get_posts_value_titles' ] );
74 71 }
75 72
76 73 /**
77 74 * Apply for frontend.
@@ -88,20 +85,13 @@
88 85 *
89 86 * @return void
90 87 */
91 88 public function elementor_init() {
92 - add_action(
93 - 'init',
94 - function () {
95 - if ( Fns::should_load_elementor_scripts() ) {
96 - add_action( 'elementor/elements/categories_registered', [ $this, 'add_elementor_widget_categories' ] );
97 - add_action( 'elementor/widgets/register', [ $this, 'init_widgets' ] );
98 - add_action( 'elementor/controls/register', [ $this, 'init_controls' ] );
99 - add_filter( 'elementor/editor/localize_settings', [ $this, 'promotePremiumWidgets' ] );
100 - add_action( 'elementor/icons_manager/additional_tabs', [ $this, 'rtsb_icons' ] );
101 - }
102 - }
103 - );
89 + add_action( 'elementor/elements/categories_registered', [ $this, 'add_elementor_widget_categories' ] );
90 + add_action( 'elementor/widgets/register', [ $this, 'init_widgets' ] );
91 + add_action( 'elementor/controls/register', [ $this, 'init_controls' ] );
92 + add_filter( 'elementor/editor/localize_settings', [ $this, 'promotePremiumWidgets' ] );
93 + add_action( 'elementor/icons_manager/additional_tabs', [ $this, 'rtsb_icons' ] );
104 94 }
105 95
106 96 /**
107 97 * Register Category
@@ -110,29 +100,21 @@
110 100 *
111 101 * @return void
112 102 */
113 103 public function add_elementor_widget_categories( $elements_manager ) {
114 - $categories = [];
115 - $builder_id = get_queried_object_id();
116 - $id = Fns::wpml_object_id( $builder_id, BuilderFns::$post_type_tb, 'default' );
117 - $type = BuilderFns::builder_type( $id );
104 + $type = BuilderFns::builder_type( get_the_ID() );
105 + $builder_type = ! empty( BuilderFns::builder_page_types()[ $type ] ) ? BuilderFns::builder_page_types()[ $type ] : '';
106 + $builder_type = str_replace( 'My Account - ', '', $builder_type );
107 + $categories['rtsb-shopbuilder'] = [
108 + 'title' => esc_html__( 'ShopBuilder', 'shopbuilder' ) . ' - ' . ucfirst( $builder_type ),
109 + 'icon' => 'fa fa-plug',
110 + ];
111 + $categories['rtsb-shopbuilder-general'] = [
112 + 'title' => esc_html__( 'Shopbuilder - General', 'shopbuilder' ),
113 + 'icon' => 'fa fa-plug',
114 + ];
118 115
119 - if ( $type && 'popup-builder' !== $type ) {
120 - $builder_type = ! empty( BuilderFns::builder_page_types()[ $type ] ) ? BuilderFns::builder_page_types()[ $type ] : '';
121 - $builder_type = str_replace( [ 'My Account - ', 'Endpoint: ' ], '', $builder_type );
122 - $categories['rtsb-shopbuilder'] = [
123 - 'title' => esc_html__( 'ShopBuilder', 'shopbuilder' ) . ' - ' . ucfirst( $builder_type ),
124 - 'icon' => 'fa fa-plug',
125 - ];
126 - }
127 - if ( 'quick-view' !== $type ) {
128 - $categories['rtsb-shopbuilder-general'] = [
129 - 'title' => esc_html__( 'Shopbuilder - General', 'shopbuilder' ),
130 - 'icon' => 'fa fa-plug',
131 - ];
132 - }
133 - $categories = apply_filters( 'rtsb_elementor_widgets_category_lists', $categories );
134 -
116 + $categories = apply_filters( 'rtsb_elementor_widgets_category_lists', $categories );
135 117 $other_categories = $elements_manager->get_categories();
136 118 $categories = array_merge(
137 119 array_slice( $other_categories, 0, 1 ),
138 120 $categories,
@@ -138,10 +120,10 @@
138 120 $categories,
139 121 array_slice( $other_categories, 1 )
140 122 );
141 123
142 - $set_categories = function ( $categories ) use ( $elements_manager ) {
143 - $elements_manager->categories = $categories;
124 + $set_categories = function ( $categories ) {
125 + $this->categories = $categories;
144 126 };
145 127
146 128 $set_categories->call( $elements_manager, $categories );
147 129 }
@@ -162,20 +144,21 @@
162 144
163 145 /**
164 146 * Init Widgets
165 147 *
166 - * Include widget files and register them
148 + * Include widgets files and register them
167 149 *
168 - * @param object $widgets_manager Widgets Manager.
169 - *
170 - * @return void
171 - *
172 150 * @since 1.0.0
173 151 */
174 152 public function init_widgets( $widgets_manager ) {
153 + $product = Fns::get_product();
175 154
176 - $get_list = ElementList::instance()->get_list( true, 'active' );
177 - foreach ( $get_list as $element ) {
155 + // TODO: Need to remove below condition and make compitability in each widgets.
156 + if ( ! $product ) {
157 + return;
158 + }
159 +
160 + foreach ( ElementList::instance()->get_list( true, 'active' ) as $element ) {
178 161 if ( isset( $element['active'] ) && 'on' !== $element['active'] ) {
179 162 continue;
180 163 }
181 164
@@ -187,24 +170,45 @@
187 170 continue;
188 171 }
189 172
190 173 if ( ! empty( $element['category'] ) ) {
191 - try {
192 - $widget = false;
193 - $import = apply_filters( 'rtsb_import_status', false );
194 -
195 - if ( $this->should_register_widget( $element['category'], $import ) ) {
174 + $widget = false;
175 + $import = apply_filters( 'rtsb_import_status', false );
176 + switch ( $element['category'] ) {
177 + case 'product':
178 + if ( BuilderFns::is_product() || $import ) {
179 + $widget = new $element['base_class']();
180 + }
181 + break;
182 + case 'shop':
183 + if ( BuilderFns::is_archive() || BuilderFns::is_shop() || $import ) {
184 + $widget = new $element['base_class']();
185 + }
186 + break;
187 + case 'archive':
188 + if ( BuilderFns::is_archive() || $import ) {
189 + $widget = new $element['base_class']();
190 + }
191 + break;
192 + case 'cart':
193 + if ( BuilderFns::is_cart() || $import ) {
194 + $widget = new $element['base_class']();
195 + }
196 + break;
197 + case 'checkout':
198 + if ( BuilderFns::is_checkout() || $import ) {
199 + $widget = new $element['base_class']();
200 + }
201 + break;
202 + case 'general':
196 203 $widget = new $element['base_class']();
197 - }
204 + break;
205 + default:
206 + }
207 + $widget = apply_filters( 'rtsb/element/list/init/widgets', $widget, $element );
198 208
199 - $widget = apply_filters( 'rtsb/element/list/init/widgets', $widget, $element );
200 -
201 - if ( $widget && is_object( $widget ) ) {
202 - $widgets_manager->register( $widget );
203 - }
204 - } catch ( \Throwable $e ) {
205 - error_log( 'ShopBuilder widget error (' . $element['base_class'] . '): ' . $e->getMessage() ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
206 - continue;
209 + if ( $widget && is_object( $widget ) ) {
210 + $widgets_manager->register( $widget );
207 211 }
208 212 }
209 213 }
210 214 }
@@ -209,36 +213,8 @@
209 213 }
210 214 }
211 215
212 216 /**
213 - * Determine whether a widget for the given category should be registered
214 - * in the current request context.
215 - *
216 - * @param string $category Element category.
217 - * @param bool $import Whether an import is in progress.
218 - *
219 - * @return bool
220 - */
221 - protected function should_register_widget( $category, $import ) {
222 - switch ( $category ) {
223 - case 'product':
224 - return BuilderFns::is_product() || $import;
225 - case 'shop':
226 - return BuilderFns::is_archive() || BuilderFns::is_shop() || $import;
227 - case 'archive':
228 - return BuilderFns::is_archive() || $import;
229 - case 'cart':
230 - return BuilderFns::is_cart() || $import;
231 - case 'checkout':
232 - return BuilderFns::is_checkout() || $import;
233 - case 'general':
234 - return true;
235 - default:
236 - return false;
237 - }
238 - }
239 -
240 - /**
241 217 * Adding custom icons in Elementor
242 218 *
243 219 * @param array $tabs Tabs.
244 220 *
@@ -244,10 +220,23 @@
244 220 *
245 221 * @return array
246 222 */
247 223 public function rtsb_icons( $tabs = [] ) {
248 - $custom_icons = Fns::get_custom_icon_names();
224 + $fonts = rtsb()->get_assets_uri( 'fonts/rtsb-icons.json' );
249 225
226 + $response = wp_remote_get( $fonts );
227 +
228 + if ( is_wp_error( $response ) ) {
229 + return $tabs;
230 + }
231 +
232 + $icons_json = wp_remote_retrieve_body( $response );
233 + $custom_icons = json_decode( $icons_json, true );
234 +
235 + if ( null === $custom_icons ) {
236 + return $tabs;
237 + }
238 +
250 239 $tabs['shopbuilder-icons'] = [
251 240 'name' => 'rtsb-fonts',
252 241 'label' => esc_html__( 'ShopBuilder Icons', 'shopbuilder' ),
253 242 'labelIcon' => 'fab fa-elementor',
@@ -303,34 +292,16 @@
303 292 *
304 293 * @since 2.0.0
305 294 */
306 295 if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) {
307 - do_action( 'elementor/page_templates/header-footer/before_content' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
296 + do_action( 'elementor/page_templates/header-footer/before_content' );
308 297 }
309 298
310 299 $parent_class = apply_filters( 'rtsb/builder/content/parent_class', [] );
311 300
312 301 if ( BuilderFns::is_product() ) {
313 - $product_id = Fns::get_prepared_product_id();
314 -
315 - // Ensure the WordPress global $product is a valid WC_Product before
316 - // wc_get_product_class() fires the `woocommerce_post_class` filter.
317 - // Some themes (e.g. Blocksy) read the global $product directly inside
318 - // that filter and call methods like get_type() on it, which throws a
319 - // fatal error when the global is still an unresolved string.
320 - $_product = Fns::get_product();
321 -
302 + $product_id = Fns::get_prepared_product_id();
322 303 $parent_class = wc_get_product_class( $parent_class, $product_id );
323 -
324 - if ( function_exists( 'rtwpvs' ) && $_product instanceof \WC_Product ) {
325 - if ( $_product->is_type( 'variable' ) ) {
326 - $parent_class[] = 'rtwpvs-product';
327 - $beside_label = function_exists( 'rtwpvsp' ) && rtwpvs()->get_option( 'attribute_on_click_behavior' );
328 - if ( $beside_label ) {
329 - $parent_class[] = 'rtwpvs-selected-term-beside-label';
330 - }
331 - }
332 - }
333 304 }
334 305
335 306 if ( BuilderFns::is_shop() ) {
336 307 $parent_class[] = 'shop';
@@ -346,39 +317,10 @@
346 317
347 318 ?>
348 319 <!-- Before Content start -->
349 320 <div class="<?php echo esc_attr( implode( ' ', $parent_class ) ); ?>">
350 - <?php
351 - if ( BuilderFns::is_checkout() ) {
352 - if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
353 - return;
354 - }
355 -
356 - $checkout = WC()->checkout();
357 -
358 - // Temporarily remove callbacks that Elementor checkout
359 - // handles via separate widgets to prevent duplicates.
360 - remove_action( 'woocommerce_before_checkout_form', [ Hooks\ActionHooks::class, 'woocommerce_checkout_login_form' ], 10 );
361 - remove_action( 'woocommerce_before_checkout_form', [ Hooks\ActionHooks::class, 'woocommerce_checkout_coupon_form' ], 10 );
362 - remove_action( 'woocommerce_before_checkout_form', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
363 -
364 - do_action( 'woocommerce_before_checkout_form', $checkout );
365 -
366 - // Restore callbacks for non-Elementor contexts.
367 - add_action( 'woocommerce_before_checkout_form', [ Hooks\ActionHooks::class, 'woocommerce_checkout_login_form' ], 10 );
368 - add_action( 'woocommerce_before_checkout_form', [ Hooks\ActionHooks::class, 'woocommerce_checkout_coupon_form' ], 10 );
369 - add_action( 'woocommerce_before_checkout_form', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
370 -
371 - // If checkout registration is disabled and not logged in, the user cannot checkout.
372 - if ( ! $checkout->is_registration_enabled() && $checkout->is_registration_required() && ! is_user_logged_in() ) {
373 - echo esc_html( apply_filters( 'woocommerce_checkout_must_be_logged_in_message', __( 'You must be logged in to checkout.', 'shopbuilder' ) ) );
374 - return;
375 - }
376 - ?>
377 - <!--
378 - woocommerce-checkout added for fix issue with payment method ( Revolut Pay )
379 - -->
380 - <form name="checkout" method="post" class="rtsb-woocommerce-checkout woocommerce-checkout checkout" action="<?php echo esc_url( wc_get_checkout_url() ); ?>" enctype="multipart/form-data">
321 + <?php if ( BuilderFns::is_checkout() ) { ?>
322 + <form name="checkout" method="post" class="rtsb-woocommerce-checkout checkout" action="<?php echo esc_url( wc_get_checkout_url() ); ?>" enctype="multipart/form-data">
381 323 <?php
382 324 }
383 325 }
384 326
@@ -395,19 +337,15 @@
395 337 *
396 338 * @since 2.0.0
397 339 */
398 340 if ( did_action( 'elementor/loaded' ) && 'elementor' === $this->page_edit_with ) {
399 - do_action( 'elementor/page_templates/header-footer/after_content' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
341 + do_action( 'elementor/page_templates/header-footer/after_content' );
400 342 }
401 343
402 344 if ( BuilderFns::is_checkout() ) {
403 - if ( ! apply_filters( 'rtsb/multi/step/checkout/widget', true ) ) {
404 - return;
405 - }
406 345 ?>
407 346 </form>
408 347 <?php
409 - do_action( 'woocommerce_after_checkout_form', WC()->checkout() );
410 348 }
411 349 ?>
412 350 </div>
413 351 <!-- After Content end -->
@@ -419,28 +357,24 @@
419 357 *
420 358 * @return void
421 359 */
422 360 public function select2_ajax_posts_filter_autocomplete() {
423 - if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) ) {
424 - wp_send_json_error( [] );
425 - }
361 +
426 362 $query_per_page = 15;
427 363 $post_type = 'post';
428 364 $source_name = 'post_type';
429 - $paged = absint( $_POST['page'] ?? 1 );
365 + $paged = $_POST['page'] ?? 1;
366 +
430 367 if ( ! empty( $_POST['post_type'] ) ) {
431 - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
432 368 $post_type = sanitize_text_field( $_POST['post_type'] );
433 369 }
434 370
435 371 if ( ! empty( $_POST['source_name'] ) ) {
436 - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
437 372 $source_name = sanitize_text_field( $_POST['source_name'] );
438 373 }
439 374
440 - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
441 375 $search = ! empty( $_POST['search'] ) ? sanitize_text_field( $_POST['search'] ) : '';
442 - $results = $post_list = []; // phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.Found
376 + $results = $post_list = [];
443 377 switch ( $source_name ) {
444 378 case 'taxonomy':
445 379 $args = [
446 380 'hide_empty' => false,
@@ -445,13 +379,13 @@
445 379 $args = [
446 380 'hide_empty' => false,
447 381 'orderby' => 'name',
448 382 'order' => 'ASC',
449 - 'name__like' => $search,
383 + 'search' => $search,
450 384 'number' => '5',
451 385 ];
452 386
453 - if ( 'all' !== $post_type ) {
387 + if ( $post_type !== 'all' ) {
454 388 $args['taxonomy'] = $post_type;
455 389 }
456 390
457 391 $post_list = wp_list_pluck( get_terms( $args ), 'name', 'term_id' );
@@ -498,22 +432,17 @@
498 432 * @return void
499 433 */
500 434 public function select2_ajax_get_posts_value_titles() {
501 435
502 - if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) ) {
503 - wp_send_json_error( [] );
504 - }
505 -
506 436 if ( empty( $_POST['id'] ) ) {
507 437 wp_send_json_error( [] );
508 438 }
509 439
510 - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
511 440 if ( empty( array_filter( $_POST['id'] ) ) ) {
512 441 wp_send_json_error( [] );
513 442 }
514 443 $ids = array_map( 'intval', $_POST['id'] );
515 - $source_name = ! empty( $_POST['source_name'] ) ? sanitize_text_field( $_POST['source_name'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
444 + $source_name = ! empty( $_POST['source_name'] ) ? sanitize_text_field( $_POST['source_name'] ) : '';
516 445
517 446 switch ( $source_name ) {
518 447 case 'taxonomy':
519 448 $args = [
@@ -522,11 +451,9 @@
522 451 'order' => 'ASC',
523 452 'include' => implode( ',', $ids ),
524 453 ];
525 454
526 - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
527 - if ( 'all' !== $_POST['post_type'] ) {
528 - // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
455 + if ( $_POST['post_type'] !== 'all' ) {
529 456 $args['taxonomy'] = sanitize_text_field( $_POST['post_type'] );
530 457 }
531 458
532 459 $response = wp_list_pluck( get_terms( $args ), 'name', 'term_id' );
@@ -544,9 +471,9 @@
544 471 break;
545 472 default:
546 473 $post_info = get_posts(
547 474 [
548 - 'post_type' => sanitize_text_field( $_POST['post_type'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
475 + 'post_type' => sanitize_text_field( $_POST['post_type'] ),
549 476 'include' => implode( ',', $ids ),
550 477 ]
551 478 );
552 479 $response = wp_list_pluck( $post_info, 'post_title', 'ID' );
@@ -562,12 +489,12 @@
562 489
563 490 /**
564 491 * Ajax callback for rt-select2
565 492 *
566 - * @param string $post_type Post type.
567 - * @param int $limit Limit.
568 - * @param string $search Search.
569 - * @param int $paged Paged.
493 + * @param $post_type
494 + * @param $limit
495 + * @param $search
496 + * @param $paged
570 497 *
571 498 * @return array
572 499 */
573 500 public function get_query_data( $post_type = 'any', $limit = 10, $search = '', $paged = 1 ) {
@@ -604,19 +531,10 @@
604 531 if ( ! empty( $search ) ) {
605 532 $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_title LIKE %s", '%' . esc_sql( $search ) . '%' );
606 533 }
607 534
608 - // Add a query for shop_coupon post-type to check 'show on frontend' meta.
609 - if ( 'shop_coupon' === $post_type ) {
610 - $where .= " AND {$wpdb->posts}.ID IN (
611 - SELECT post_id FROM {$wpdb->postmeta}
612 - WHERE meta_key = 'rtsb_show_on_frontend'
613 - AND meta_value = 'on'
614 - )";
615 - }
616 -
617 535 $query = "select post_title,ID from $wpdb->posts where post_status = 'publish' {$where} {$limit}";
618 - $results = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
536 + $results = $wpdb->get_results( $query );
619 537
620 538 if ( ! empty( $results ) ) {
621 539 foreach ( $results as $row ) {
622 540 $data[ $row->ID ] = $row->post_title . ' [#' . $row->ID . ']';
@@ -647,10 +565,10 @@
647 565
648 566 $pro_widgets = [
649 567 [
650 568 'name' => 'rtsb-ajax-product-filters',
651 - 'title' => esc_html__( 'Ajax Product Filters', 'shopbuilder' ),
652 - 'description' => esc_html__( 'Ajax Product Filters', 'shopbuilder' ),
569 + 'title' => esc_html__( 'Ajax Product Filters', 'testimonial-slider-showcase' ),
570 + 'description' => esc_html__( 'Ajax Product Filters', 'testimonial-slider-showcase' ),
653 571 'icon' => 'rtsb-el-custom rtsb-element icon-rtsb-ajax-product-filters rtsb-promotional-element',
654 572 'categories' => '[ "rtsb-shopbuilder" ]',
655 573 ],
656 574 ];
@@ -661,49 +579,6 @@
661 579 }
662 580 }
663 581
664 582 return $config;
665 - }
666 -
667 - /**
668 - * Get Icons.
669 - *
670 - * @return array
671 - */
672 - public function get_icons() {
673 - return [
674 - 'heart-empty',
675 - 'heart',
676 - 'eye',
677 - 'exchange',
678 - 'plus',
679 - 'minus',
680 - 'avatar',
681 - 'pay',
682 - 'share',
683 - 'clock',
684 - 'check-alt',
685 - 'check',
686 - 'delete',
687 - 'marker',
688 - 'list',
689 - 'list-2',
690 - 'power',
691 - 'cart',
692 - 'cart-2',
693 - 'cart-3',
694 - 'downloads',
695 - 'zoom',
696 - 'user-edit',
697 - 'grid',
698 - 'filter',
699 - 'billing',
700 - 'login',
701 - 'payment',
702 - 'search',
703 - 'edit',
704 - 'coupon',
705 - 'arrows-cw',
706 - 'trash-empty',
707 - ];
708 583 }
709 584 }