PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.4.2
ShopBuilder – WooCommerce Builder For Elementor v2.4.2
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
shopbuilder / app / Controllers / Hooks / ActionHooks.php

ActionHooks.php in ShopBuilder – WooCommerce Builder For Elementor 2.4.2, at app/Controllers/Hooks/ActionHooks.php

336 lines 12.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Main ActionHooks class.
4 *
5 * @package RadiusTheme\SB
6 */
7
8 namespace RadiusTheme\SB\Controllers\Hooks;
9
10 use RadiusTheme\SB\Helpers\Fns;
11 use RadiusTheme\SB\Models\GeneralList;
12 use RadiusTheme\SB\Helpers\BuilderFns;
13 use RadiusTheme\SB\Models\TemplateSettings;
14 use RadiusTheme\SB\Elementor\Render\Render;
15
16 defined( 'ABSPATH' ) || exit();
17
18 /**
19 * Main ActionHooks class.
20 */
21 class ActionHooks {
22 /**
23 * Init Hooks.
24 *
25 * @return void
26 */
27 public static function init_hooks() {
28 add_action( 'wp_head', [ __CLASS__, 'og_metatags_for_sharing' ], 1 );
29 add_action( 'woocommerce_share', [ __CLASS__, 'shopbuilder_share' ], 20 );
30 add_action( 'rtsb/wcqv/product/summary', [ __CLASS__, 'shopbuilder_share' ], 40 );
31 add_action( 'rtsb/shop/product/image', [ __CLASS__, 'render_image' ], 10, 2 );
32
33 add_action(
34 'admin_init',
35 function () {
36 remove_post_type_support( BuilderFns::$post_type_tb, 'revisions' );
37 }
38 );
39 add_action( 'deleted_post', [ __CLASS__, 'deleted_post' ], 10, 2 );
40 add_action( 'rtsb/elements/render/before_query', [ __CLASS__, 'modify_wc_query_args' ] );
41 add_action( 'rtsb/elements/render/after_query', [ __CLASS__, 'reset_wc_query_args' ] );
42 // Cart Table.
43 remove_action( 'woocommerce_cart_is_empty', 'wc_empty_cart_message', 10 );
44 add_action( 'woocommerce_cart_is_empty', [ __CLASS__, 'cart_is_empty' ], 10 );
45 /**
46 * Notices.
47 */
48 remove_action( 'woocommerce_cart_is_empty', 'woocommerce_output_all_notices', 5 );
49 remove_action( 'woocommerce_shortcode_before_product_cat_loop', 'woocommerce_output_all_notices', 10 );
50 remove_action( 'woocommerce_before_shop_loop', 'woocommerce_output_all_notices', 10 );
51 remove_action( 'woocommerce_before_single_product', 'woocommerce_output_all_notices', 10 );
52 remove_action( 'woocommerce_before_cart', 'woocommerce_output_all_notices', 10 );
53 remove_action( 'woocommerce_before_checkout_form_cart_notices', 'woocommerce_output_all_notices', 10 );
54 remove_action( 'woocommerce_before_checkout_form', 'woocommerce_output_all_notices', 10 );
55 remove_action( 'woocommerce_account_content', 'woocommerce_output_all_notices', 5 );
56 remove_action( 'woocommerce_before_customer_login_form', 'woocommerce_output_all_notices', 10 );
57 remove_action( 'woocommerce_before_lost_password_form', 'woocommerce_output_all_notices', 10 );
58 remove_action( 'before_woocommerce_pay', 'woocommerce_output_all_notices', 10 );
59 remove_action( 'woocommerce_before_reset_password_form', 'woocommerce_output_all_notices', 10 );
60
61 /**
62 * Notices.
63 */
64 // add_action( 'woocommerce_cart_is_empty', [ Fns::class, 'woocommerce_output_all_notices' ], 5 );
65 add_action( 'woocommerce_shortcode_before_product_cat_loop', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
66 add_action( 'woocommerce_before_shop_loop', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
67 add_action( 'woocommerce_before_single_product', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
68 add_action( 'woocommerce_before_cart', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
69 add_action( 'woocommerce_before_checkout_form_cart_notices', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
70 add_action( 'woocommerce_before_checkout_form', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
71 add_action( 'woocommerce_account_content', [ Fns::class, 'woocommerce_output_all_notices' ], 5 );
72 add_action( 'woocommerce_before_customer_login_form', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
73 add_action( 'woocommerce_before_lost_password_form', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
74 add_action( 'before_woocommerce_pay', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
75 add_action( 'woocommerce_before_reset_password_form', [ Fns::class, 'woocommerce_output_all_notices' ], 10 );
76
77 // Checkout Page.
78 remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_login_form', 10 );
79 remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
80 add_action( 'woocommerce_before_checkout_form', [ __CLASS__, 'woocommerce_checkout_login_form' ], 10 );
81 add_action( 'woocommerce_before_checkout_form', [ __CLASS__, 'woocommerce_checkout_coupon_form' ], 10 );
82 // My Account Order Page.
83 add_action( 'woocommerce_before_account_orders', [ __CLASS__, 'before_account_orders' ], 10 );
84 add_action( 'woocommerce_after_account_orders', [ __CLASS__, 'after_account_orders' ], 10 );
85 }
86
87
88 /**
89 * @param boolen $has_orders Order exist or not.
90 *
91 * @return void
92 */
93 public static function after_account_orders( $has_orders ) {
94 if ( ! $has_orders ) {
95 echo '</div>';
96 }
97 }
98
99 /**
100 * @param boolen $has_orders Order exist or not.
101 *
102 * @return void
103 */
104 public static function before_account_orders( $has_orders ) {
105 if ( ! $has_orders ) {
106 echo '<div class="rtsb-notice">';
107 }
108 }
109
110
111 /**
112 * @return void
113 */
114 public static function woocommerce_checkout_coupon_form() {
115 echo '<div class="rtsb-notice">';
116 woocommerce_checkout_coupon_form();
117 echo '</div>';
118 }
119
120 /**
121 * @return void
122 */
123 public static function woocommerce_checkout_login_form() {
124 echo '<div class="rtsb-notice">';
125 woocommerce_checkout_login_form();
126 echo '</div>';
127 }
128
129 /**
130 * @return void
131 */
132 public static function cart_is_empty() {
133 echo '<div class="rtsb-notice">';
134 wc_empty_cart_message();
135 echo '</div>';
136 }
137
138 /**
139 * @param int $post_id Post Ids.
140 * @param object $post Post Object.
141 *
142 * @return void
143 */
144 public static function deleted_post( $post_id, $post ) {
145 if ( BuilderFns::$post_type_tb !== $post->post_type ) {
146 return;
147 }
148
149 $options = BuilderFns::option_name_for_specific_product_set_default( $post_id );
150 TemplateSettings::instance()->delete_option( $options );
151
152 $template_options = BuilderFns::option_name_by_template_id( $post_id );
153 TemplateSettings::instance()->delete_option( $template_options );
154
155 $archive_options = BuilderFns::archive_option_name_by_template_id( $post_id );
156 TemplateSettings::instance()->delete_option( $archive_options );
157
158 $category_options = BuilderFns::option_name_for_specific_category_set_default( $post_id );
159 TemplateSettings::instance()->delete_option( $category_options );
160
161 $selected_category_options = BuilderFns::archive_option_name_by_template_id( $post_id );
162 TemplateSettings::instance()->delete_option( $selected_category_options );
163
164 // Delete Data From Options.
165 $options_product_selected_cat = BuilderFns::option_name_product_page_selected_cat( $post_id );
166 $cat_list = TemplateSettings::instance()->get_option( $options_product_selected_cat );
167 if ( ! empty( $cat_list ) ) {
168 foreach ( $cat_list as $old_slug ) {
169 $OldcatList = get_term_by( 'slug', $old_slug, 'product_cat' );
170 if ( ! empty( $OldcatList ) && ! is_wp_error( $OldcatList ) ) {
171 delete_term_meta( $OldcatList->term_id, BuilderFns::$categories_product_page_template, $post_id );
172 }
173 }
174 }
175 TemplateSettings::instance()->delete_option( $options_product_selected_cat );
176
177 $set_default_option = BuilderFns::option_name_product_page_specific_cat_set_default( $post_id );
178 TemplateSettings::instance()->delete_option( $set_default_option );
179
180 // Tags Remove.
181 $options_product_selected_tag = BuilderFns::option_name_product_page_selected_tag( $post_id );
182 $tag_list = TemplateSettings::instance()->get_option( $options_product_selected_tag );
183 if ( ! empty( $tag_list ) ) {
184 foreach ( $tag_list as $old_slug ) {
185 $OldTagList = get_term_by( 'slug', $old_slug, 'product_tag' );
186 if ( ! empty( $OldTagList ) && ! is_wp_error( $OldTagList ) ) {
187 delete_term_meta( $OldTagList->term_id, BuilderFns::$tags_product_page_template, $post_id );
188 }
189 }
190 }
191 TemplateSettings::instance()->delete_option( $options_product_selected_tag );
192
193 // Tag Set Default Option.
194 $tag_set_default_option = BuilderFns::option_name_product_page_specific_tag_set_default( $post_id );
195 TemplateSettings::instance()->delete_option( $tag_set_default_option );
196
197 global $wpdb;
198 // Prepare and execute the SQL query.
199 $sql = $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %d", BuilderFns::$view_template_for_products_meta, $post_id );
200 $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
201
202 // Prepare and execute the SQL query.
203 $sql = $wpdb->prepare( "DELETE FROM $wpdb->termmeta WHERE meta_key = %s AND meta_value = %d", BuilderFns::$view_template_for_archive_meta, $post_id );
204 $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
205 }
206 /**
207 * Meta tags for social sharing.
208 *
209 * @return void
210 */
211 public static function shopbuilder_share() {
212 $generalList = GeneralList::instance()->get_data();
213
214 if (
215 empty( $generalList['social_share']['share_platforms_to_product_page'] ) ||
216 'on' !== $generalList['social_share']['share_platforms_to_product_page'] ||
217 empty( $generalList['social_share']['share_platforms'] )
218 ) {
219 return;
220 }
221
222 $share_platforms = [];
223
224 foreach ( $generalList['social_share']['share_platforms'] as $value ) {
225 $share_platforms[ $value ] = [
226 'share_items' => $value,
227 'share_text' => ucwords( $value ),
228 ];
229 }
230
231 $settings['share_platforms'] = $share_platforms;
232 $settings['layout'] = ! empty( $generalList['social_share']['share_icon_layout'] ) ? $generalList['social_share']['share_icon_layout'] : 1;
233 $settings['show_share_icon'] = 1;
234
235 // TODO:: Implement Later ! empty( $generalList['social_share']['share_icon_show_to_product_page'] ) && 'on' === $generalList['social_share']['share_icon_show_to_product_page'];
236 Fns::print_html( Render::instance()->social_share_view( 'elementor/general/social-share', $settings ), true );
237 }
238
239 /**
240 * Meta tags for social sharing.
241 *
242 * @return void
243 */
244 public static function og_metatags_for_sharing() {
245 global $post;
246
247 if ( ! isset( $post ) ) {
248 return;
249 }
250
251 if ( ! is_singular( 'product' ) ) {
252 return;
253 }
254
255 Fns::print_html( '<meta property="og:url" content="' . get_the_permalink() . '" />', true );
256 Fns::print_html( '<meta property="og:type" content="article" />', true );
257 Fns::print_html( '<meta property="og:title" content="' . $post->post_title . '" />', true );
258 Fns::print_html( '<meta property="og:description" content="' . wp_trim_words( $post->post_content, 150 ) . '" />' );
259
260 $attachment = get_the_post_thumbnail_url();
261
262 if ( ! empty( $attachment ) ) {
263 Fns::print_html( '<meta property="og:image" content="' . $attachment . '" />', true );
264 }
265
266 Fns::print_html( '<meta property="og:site_name" content="' . get_bloginfo( 'name' ) . '" />', true );
267 Fns::print_html( '<meta name="twitter:card" content="summary" />', true );
268 }
269
270 /**
271 * Render image.
272 *
273 * @param array $args Image args.
274 * @param array $settings Settings array.
275 *
276 * @return void
277 */
278 public static function render_image( $args, $settings ) {
279 if ( $args['image_link'] ) {
280 $aria_label = esc_attr(
281 /* translators: Product Name */
282 sprintf( __( 'Image link for Product: %s', 'shopbuilder' ), $args['title'] )
283 );
284 ?>
285 <figure>
286 <a class="woocommerce-LoopProduct-link rtsb-img-link" href="<?php echo esc_url( $args['p_link'] ); ?>" aria-label="<?php echo esc_attr( $aria_label ); ?>">
287 <?php
288 Fns::get_product_image( $args['img_html'], $args['hover_img_html'] );
289 ?>
290 </a>
291 </figure>
292 <?php
293 } else {
294 echo '<figure class="rtsb-img-link">';
295 Fns::get_product_image( $args['img_html'], $args['hover_img_html'] );
296 echo '</figure>';
297 }
298 }
299
300 /**
301 * Modify WooCommerce query arguments for product retrieval.
302 *
303 * @param array $settings The settings array.
304 *
305 * @return void
306 */
307 public static function modify_wc_query_args( $settings ) {
308 if ( ( isset( $settings['tax_relation'] ) && 'OR' === $settings['tax_relation'] ) ||
309 ( isset( $settings['relation'] ) && 'OR' === $settings['relation'] ) ) {
310 add_filter( 'woocommerce_product_data_store_cpt_get_products_query', [ FilterHooks::class, 'extra_query_args' ], 10, 2 );
311 }
312
313 if ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) ) {
314 add_filter( 'woocommerce_product_data_store_cpt_get_products_query', [ FilterHooks::class, 'extra_query_args_outofstock' ] );
315 }
316 }
317
318 /**
319 * Reset WooCommerce query arguments for product retrieval.
320 *
321 * @param array $settings The settings array.
322 *
323 * @return void
324 */
325 public static function reset_wc_query_args( $settings ) {
326 if ( ( isset( $settings['tax_relation'] ) && 'OR' === $settings['tax_relation'] ) ||
327 ( isset( $settings['relation'] ) && 'OR' === $settings['relation'] ) ) {
328 remove_filter( 'woocommerce_product_data_store_cpt_get_products_query', [ FilterHooks::class, 'extra_query_args' ] );
329 }
330
331 if ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) ) {
332 remove_filter( 'woocommerce_product_data_store_cpt_get_products_query', [ FilterHooks::class, 'extra_query_args_outofstock' ] );
333 }
334 }
335 }
336