PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.1.3
ShopBuilder – WooCommerce Builder For Elementor v3.1.3
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/Builder/BuilderCpt.php +68 -20 2.2.0 → 3.1.3 View file →
@@ -35,17 +35,50 @@
35 35 add_action( 'manage_' . BuilderFns::$post_type_tb . '_posts_custom_column', [ $this, 'custom_columns' ], 10, 2 );
36 36 add_filter( 'manage_edit-' . BuilderFns::$post_type_tb . '_sortable_columns', [ $this, 'register_sortable_columns' ] );
37 37 add_action( 'pre_get_posts', [ $this, 'sortable_columns_query' ] );
38 38 add_filter( 'template_include', [ $this, 'builder_template' ], 99 );
39 + add_filter( 'template_redirect', [ $this, 'restrict_preview_access' ], 99 );
39 40
40 41 add_filter( 'parse_query', [ $this, 'query_filter' ] );
41 - // add filter for search.
42 + // Add filter for search.
42 43 add_action( 'restrict_manage_posts', [ $this, 'add_filter' ] );
44 + // Post Content Remove For Elementor Builder.
45 + add_action( 'save_post_' . BuilderFns::$post_type_tb, [ $this, 'on_save_post' ], 10, 2 );
46 + }
43 47
44 - add_action( 'in_admin_header', [ $this, 'remove_all_notices' ], 1000 );
48 + /**
49 + * Hook into post save to clear post content for specific post type and editor.
50 + *
51 + * This method checks if the post is being updated (not newly created),
52 + * and if the post type matches the target type defined in BuilderFns::$post_type_tb.
53 + * If the post is edited with Elementor, it clears the post_content directly
54 + * from the database and clears the post cache.
55 + *
56 + * @param int $post_ID ID of the post being saved.
57 + * @param WP_Post $post Post object.
58 + *
59 + * @return void
60 + */
61 + public function on_save_post( $post_ID, $post ) {
62 + // Only proceed on update and specific post type.
63 + if ( BuilderFns::$post_type_tb !== $post->post_type ) {
64 + return;
65 + }
66 + if ( 'elementor' !== Fns::page_edit_with( $post_ID ) ) {
67 + return;
68 + }
69 + global $wpdb;
70 + // Directly update the post_content to empty.
71 + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
72 + $wpdb->update(
73 + $wpdb->posts,
74 + [ 'post_content' => '' ],
75 + [ 'ID' => $post_ID ]
76 + );
77 + // Clear cache so changes reflect properly.
78 + clean_post_cache( $post_ID );
45 79 }
46 80
47 -
48 81 /**
49 82 * Public function add_filter.
50 83 * Added search filter for type of template
51 84 *
@@ -129,10 +162,10 @@
129 162 'with_front' => true,
130 163 'feeds' => false,
131 164 ],
132 165 'query_var' => true,
133 - 'publicly_queryable' => apply_filters( 'rtsb/builder/args/publicly_queryable', true ),
134 - 'capability_type' => 'product',
166 + 'publicly_queryable' => true,
167 + // 'capability_type' => 'product', Will Remove this line in the future.
135 168 'show_in_rest' => true,
136 169 'rest_base' => BuilderFns::$post_type_tb,
137 170 ];
138 171
@@ -186,9 +219,9 @@
186 219 * @param string $post_id Post id.
187 220 *
188 221 * @return void
189 222 */
190 - public function custom_columns( $column, $post_id ) {
223 + public function custom_columns( $column, $post_id ) { // phpcs:ignore Generic.Metrics.NestingLevel.TooHigh
191 224 $post_id = absint( $post_id );
192 225 $types = BuilderFns::builder_page_types();
193 226 $template_type = BuilderFns::builder_type( $post_id ) ? BuilderFns::builder_type( $post_id ) : array_key_first( $types );
194 227
@@ -213,8 +246,11 @@
213 246 $set_default = BuilderFns::get_specific_product_as_default( $post_id );
214 247 if ( $set_default ) {
215 248 $is_set_default = $post_id;
216 249 }
250 + if ( ! $set_default && $is_set_default === $post_id ) {
251 + $is_set_default = '';
252 + }
217 253 break;
218 254 case 'product_cats':
219 255 $page_type_for = 'product-page-template-' . $post_id . '-specific-category';
220 256 $set_default_option_name = BuilderFns::option_name_product_page_specific_cat_set_default( $post_id );
@@ -231,9 +267,9 @@
231 267 $is_set_default = $post_id;
232 268 }
233 269 break;
234 270 default:
235 - break;
271 + break;
236 272 }
237 273 } elseif ( 'archive' === $template_type ) {
238 274 $categories_name = apply_filters( 'rtsb/template/builder/selected/categories', [], $post_id, $template_type );
239 275 $set_default = BuilderFns::get_specific_category_as_default( $post_id );
@@ -240,8 +276,11 @@
240 276 if ( ! empty( $categories_name ) && $set_default ) {
241 277 $is_set_default = $post_id;
242 278 $page_type_for = 'template-' . $post_id . '-specific-category';
243 279 }
280 + if ( ! $set_default && $is_set_default === $post_id ) {
281 + $is_set_default = '';
282 + }
244 283 }
245 284 ?>
246 285 <span class="rtsb-switch-wrapper page-type-<?php echo esc_attr( $page_type_for ); ?>" <?php echo ! $is_published ? 'style="pointer-events: none;"' : null; ?> title="<?php esc_html_e( 'Only publish post can set default ', 'shopbuilder' ); ?>">
247 286 <label class="rtsb-switch">
@@ -330,9 +369,9 @@
330 369 * @return string
331 370 */
332 371 public function builder_template( $template ) {
333 372 $builder_page_id = BuilderFns::is_builder_preview() ? get_the_ID() : BuilderFns::builder_page_id_by_page();
334 - if ( $builder_page_id ) {
373 + if ( defined( 'ELEMENTOR_VERSION' ) && $builder_page_id ) { // Elementor Check.
335 374 $page_template = get_post_meta( $builder_page_id, '_wp_page_template', true );
336 375 $new_template = RTSB_ABSPATH . 'page-templates/builder-template.php';
337 376 if ( 'elementor_canvas' === $page_template ) {
338 377 $new_template = RTSB_ABSPATH . 'page-templates/elementor-canvas.php';
@@ -347,8 +386,25 @@
347 386 return $template;
348 387 }
349 388
350 389 /**
390 + * Restrict the preview access.
391 + *
392 + * @return void
393 + */
394 + public function restrict_preview_access() {
395 + if ( ! apply_filters( 'rtsb/builder/preview/access', true ) ) {
396 + return;
397 + }
398 +
399 + if ( is_singular( 'rtsb_builder' ) ) {
400 + if ( ! is_user_logged_in() ) {
401 + wp_safe_redirect( home_url() );
402 + }
403 + }
404 + }
405 +
406 + /**
351 407 * Add/Remove edit link in dashboard.
352 408 *
353 409 * Add or remove an edit link to the post/page action links on the post/pages list table.
354 410 *
@@ -361,22 +417,14 @@
361 417 * @return array An updated array of row action links.
362 418 */
363 419 public function filter_post_row_actions( $actions ) {
364 420 if ( $this->is_current_screen() ) {
365 - // unset( $actions['view'] );
366 421 unset( $actions['inline hide-if-no-js'] );
422 +
423 + if ( isset( $actions['view'] ) ) {
424 + $actions['view'] = str_replace( __( 'View', 'shopbuilder' ), __( 'Preview', 'shopbuilder' ), $actions['view'] );
425 + }
367 426 }
368 427
369 428 return $actions;
370 - }
371 -
372 - /**
373 - * Remove admin notices
374 - */
375 - public function remove_all_notices() {
376 - $screen = get_current_screen();
377 - if ( 'edit-rtsb_builder' === $screen->id ) {
378 - remove_all_actions( 'admin_notices' );
379 - remove_all_actions( 'all_admin_notices' );
380 - }
381 429 }
382 430 }