PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / WordPress / CompatibilityService.php
surecart / app / src / WordPress Last commit date
Admin 1 year ago Assets 1 year ago CLI 2 years ago Pages 1 year ago PostTypes 1 year ago Posts 1 year ago Shortcodes 1 year ago Taxonomies 1 year ago Templates 1 year ago Users 2 years ago ActionsService.php 3 years ago CompatibilityService.php 1 year ago HealthService.php 1 year ago LineItemStateService.php 2 years ago PluginService.php 1 year ago PluginServiceProvider.php 1 year ago RecaptchaValidationService.php 2 years ago StateService.php 2 years ago ThemeService.php 2 years ago ThemeServiceProvider.php 3 years ago TranslationsServiceProvider.php 1 year ago UpgradeNoticeService.php 1 year ago
CompatibilityService.php
202 lines
1 <?php
2 /**
3 * Compatibility service.
4 *
5 * @package SureCartAppCore
6 * @author SureCart <support@surecart.com>
7 * @copyright SureCart
8 * @license https://www.gnu.org/licenses/gpl-2.0.html GPL-2.0
9 * @link https://surecart.com
10 */
11
12 namespace SureCart\WordPress;
13
14 use SureCart\WordPress\Admin\Notices\AdminNoticesService;
15
16 /**
17 * Provides compatibility with other plugins.
18 */
19 class CompatibilityService {
20 /**
21 * Bootstrap the service.
22 *
23 * @return void
24 */
25 public function bootstrap() {
26 // UAG fix.
27 add_action( 'render_block_data', [ $this, 'maybeEnqueueUAGBAssets' ] );
28 // SC Form Shortcode fix.
29 add_filter( 'surecart/shortcode/render', [ $this, 'maybeEnqueueUAGBAssetsForShortcode' ], 5, 3 );
30 // rankmath fix.
31 add_action( 'rank_math/head', [ $this, 'rankMathFix' ] );
32
33 // Yoast SEO fix.
34 add_action( 'wpseo_frontend_presenters', [ $this, 'yoastSEOFix' ] );
35
36 // Show gutenberg active notice.
37 add_action( 'admin_init', [ $this, 'gutenbergActiveNotice' ] );
38
39 // Load Divi Compatibility CSS.
40 add_action( 'wp_enqueue_scripts', [ $this, 'diviCompatibility' ] );
41
42 // Load Blocks Global Styles if enabled by Merchant in the setting.
43 if ( (bool) get_option( 'surecart_load_block_assets_on_demand', false ) ) {
44 add_filter( 'should_load_separate_core_block_assets', '__return_true' );
45 }
46
47 add_action( 'render_block', [ $this, 'fixKadenceAccordionPaneButtonType' ], 10, 2 );
48 }
49
50 /**
51 * Adds type="button" to the button in the Kadence Accordion Pane.
52 * This prevents the button from submitting the form.
53 *
54 * @param string $content Block content.
55 * @param array $block Block data.
56 *
57 * @return string
58 */
59 public function fixKadenceAccordionPaneButtonType( $content, $block ) {
60 if ( 'kadence/pane' === $block['blockName'] ) {
61 $processor = new \WP_HTML_Tag_Processor( $content );
62 $has_tag = $processor->next_tag( 'button' );
63 if ( $has_tag ) {
64 $processor->set_attribute( 'type', 'button' );
65 }
66 return $processor->get_updated_html();
67 }
68 return $content;
69 }
70
71 /**
72 * Load Divi Compatibility CSS.
73 *
74 * @return void
75 */
76 public function diviCompatibility() {
77 if ( ! is_plugin_active( 'divi-builder/divi-builder.php' ) ) {
78 return;
79 }
80 wp_enqueue_style( 'surecart-divi-compatibility', plugins_url( 'styles/divi-compatibility.css', SURECART_PLUGIN_FILE ), '', \SureCart::plugin()->version(), 'all' );
81 }
82
83 /** Prevent Yoast SEO from outputing SEO meta tags on our custom pages.
84 *
85 * @param array $presenters Presenters.
86 * @return array Empty Array.
87 */
88 public function yoastSEOFix( $presenters ) {
89 if ( is_singular( 'sc_product' ) || is_singular( 'sc_collection' ) || is_singular( 'sc_upsell' ) ) {
90 $title_presenters = array_filter(
91 $presenters,
92 function ( $item ) {
93 return strpos( get_class( $item ), 'SEO\Presenters\Title_Presenter' );
94 }
95 );
96 return apply_filters( 'sc_wpseo_frontend_presenters', $title_presenters, $presenters );
97 }
98
99 return $presenters;
100 }
101
102 /**
103 * Prevent rankmath from outputting og:tags on our custom pages.
104 *
105 * @return void
106 */
107 public function rankMathFix() {
108 if ( is_singular( 'sc_product' ) || is_singular( 'sc_collection' ) || is_singular( 'sc_upsell' ) ) {
109 remove_all_actions( 'rank_math/opengraph/facebook' );
110 remove_all_actions( 'rank_math/opengraph/twitter' );
111 }
112 }
113
114 /**
115 * Render block data.
116 *
117 * @param array $parsed_block Block data.
118 *
119 * @return array
120 */
121 public function maybeEnqueueUAGBAssets( $parsed_block ) {
122 // UAGB must be activated.
123 if ( ! class_exists( '\UAGB_Post_Assets' ) ) {
124 return $parsed_block;
125 }
126
127 // must be our checkout form block.
128 if ( 'surecart/checkout-form' !== $parsed_block['blockName'] && 'surecart/upsell' !== $parsed_block['blockName'] ) {
129 return $parsed_block;
130 }
131
132 $post = get_post();
133 $upsell_id = isset( $post->upsell->id ) ? $post->upsell->id : null;
134
135 $id = $parsed_block['attrs']['id'] ?? $upsell_id;
136
137 if ( empty( $id ) ) {
138 return $parsed_block;
139 }
140
141 // If Spectra Blocks are present in the form, enqueue the assets.
142 $post_assets_instance = new \UAGB_Post_Assets( $id );
143 $post_assets_instance->enqueue_scripts(); // This will enqueue the JS and CSS files.
144
145 if ( ! empty( $post_assets_instance->file_generation ) && 'disabled' === $post_assets_instance->file_generation ) {
146 add_action( 'wp_footer', array( $post_assets_instance, 'print_stylesheet' ) ); // As on checkout page, the wp_head action is loaded late & Spectra prints inline CSS on that action for file_generation disabled case, we need to print the CSS on footer.
147 }
148
149 return $parsed_block;
150 }
151
152 /**
153 * Filter SC Form Shortcode to load the Spectra Blocks Assets.
154 *
155 * @param string $output Content.
156 * @param array $attributes Shortcode attributes.
157 * @param string $name Shortcode Tag.
158 *
159 * @return array
160 */
161 public function maybeEnqueueUAGBAssetsForShortcode( $output, $attributes, $name ) {
162 // UAGB must be activated.
163 if ( ! class_exists( '\UAGB_Post_Assets' ) ) {
164 return $output;
165 }
166
167 // must be our form shortcode.
168 if ( 'sc_form' !== $name ) {
169 return $output;
170 }
171
172 // must have an ID.
173 if ( empty( $attributes['id'] ) ) {
174 return $output;
175 }
176
177 // If Spectra Blocks are present in the form, enqueue the assets.
178 $post_assets_instance = new \UAGB_Post_Assets( $attributes['id'] );
179 $post_assets_instance->enqueue_scripts();
180
181 return $output;
182 }
183
184 /**
185 * Show the Gutenberg active notice.
186 *
187 * @return void
188 */
189 public function gutenbergActiveNotice(): void {
190 if ( is_plugin_active( 'gutenberg/gutenberg.php' ) ) {
191 ( new AdminNoticesService() )->add(
192 [
193 'name' => 'gutenberg_active_notice',
194 'type' => 'warning',
195 'title' => esc_html__( 'SureCart', 'surecart' ),
196 'text' => wp_kses_post( __( '<p>The Gutenberg plugin is currently active. SureCart blocks might not perform as expected within the block editor. If you encounter any issues, consider disabling the Gutenberg plugin.<p>', 'surecart' ) ),
197 ]
198 );
199 }
200 }
201 }
202