PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.6
ShopBuilder – WooCommerce Builder For Elementor v3.2.6
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 +72 -20 2.2.03.2.6 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 );
@@ -239,9 +275,16 @@
239 275 $set_default = BuilderFns::get_specific_category_as_default( $post_id );
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';
279 + } else {
280 + $option_name = BuilderFns::option_name( $template_type );
281 + $is_set_default = TemplateSettings::instance()->get_option( $option_name );
282 + $set_default = $is_set_default;
243 283 }
284 + if ( ! $set_default && $is_set_default === $post_id ) {
285 + $is_set_default = '';
286 + }
244 287 }
245 288 ?>
246 289 <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 290 <label class="rtsb-switch">
@@ -330,9 +373,9 @@
330 373 * @return string
331 374 */
332 375 public function builder_template( $template ) {
333 376 $builder_page_id = BuilderFns::is_builder_preview() ? get_the_ID() : BuilderFns::builder_page_id_by_page();
334 - if ( $builder_page_id ) {
377 + if ( defined( 'ELEMENTOR_VERSION' ) && $builder_page_id ) { // Elementor Check.
335 378 $page_template = get_post_meta( $builder_page_id, '_wp_page_template', true );
336 379 $new_template = RTSB_ABSPATH . 'page-templates/builder-template.php';
337 380 if ( 'elementor_canvas' === $page_template ) {
338 381 $new_template = RTSB_ABSPATH . 'page-templates/elementor-canvas.php';
@@ -347,8 +390,25 @@
347 390 return $template;
348 391 }
349 392
350 393 /**
394 + * Restrict the preview access.
395 + *
396 + * @return void
397 + */
398 + public function restrict_preview_access() {
399 + if ( ! apply_filters( 'rtsb/builder/preview/access', true ) ) {
400 + return;
401 + }
402 +
403 + if ( is_singular( 'rtsb_builder' ) ) {
404 + if ( ! is_user_logged_in() ) {
405 + wp_safe_redirect( home_url() );
406 + }
407 + }
408 + }
409 +
410 + /**
351 411 * Add/Remove edit link in dashboard.
352 412 *
353 413 * Add or remove an edit link to the post/page action links on the post/pages list table.
354 414 *
@@ -361,22 +421,14 @@
361 421 * @return array An updated array of row action links.
362 422 */
363 423 public function filter_post_row_actions( $actions ) {
364 424 if ( $this->is_current_screen() ) {
365 - // unset( $actions['view'] );
366 425 unset( $actions['inline hide-if-no-js'] );
426 +
427 + if ( isset( $actions['view'] ) ) {
428 + $actions['view'] = str_replace( __( 'View', 'shopbuilder' ), __( 'Preview', 'shopbuilder' ), $actions['view'] );
429 + }
367 430 }
368 431
369 432 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 433 }
382 434 }