'' . esc_html__('Settings', 'simple-cloudflare-turnstile') . ''); $actions = array_merge($settings, $actions); } return $actions; } /** * Enqueue admin scripts */ function cfturnstile_admin_script_enqueue() { if (isset($_GET['page']) && $_GET['page'] == 'cfturnstile') { $defer = get_option('cfturnstile_defer_scripts', 1) ? array('strategy' => 'defer') : array(); wp_enqueue_script('cfturnstile-admin-js', plugins_url('/js/admin-scripts.js', __FILE__), '', '2.10', true); wp_enqueue_style('cfturnstile-admin-css', plugins_url('/css/admin-style.css', __FILE__), array(), '2.10'); // Load Turnstile API without defer on the settings page for reliable admin test rendering wp_enqueue_script("cfturnstile", "https://challenges.cloudflare.com/turnstile/v0/api.js?render=auto", array(), '', array()); } } add_action('admin_enqueue_scripts', 'cfturnstile_admin_script_enqueue'); // Include Errors include_once(plugin_dir_path(__FILE__) . 'inc/errors.php'); // Resource hints for Turnstile include_once(plugin_dir_path(__FILE__) . 'inc/integrations/other/resource-hints.php'); /** * If keys are set, load Turnstile */ if (!empty(get_option('cfturnstile_key')) && !empty(get_option('cfturnstile_secret'))) { /** * Enqueue turnstile scripts and styles */ add_action("cfturnstile_enqueue_scripts", "cfturnstile_script_enqueue"); add_action("login_enqueue_scripts", "cfturnstile_script_enqueue"); function cfturnstile_script_enqueue() { // Get current theme $current_theme = wp_get_theme(); // Check defer scripts option $defer = get_option('cfturnstile_defer_scripts', 1) ? array('strategy' => 'defer') : array(); /* Turnstile */ if ( !wp_script_is('cfturnstile', 'enqueued') ) { $turnstile_render_mode = ( function_exists('cfturnstile_is_block_based_checkout') && cfturnstile_is_block_based_checkout() ) ? 'explicit' : 'auto'; wp_enqueue_script("cfturnstile", "https://challenges.cloudflare.com/turnstile/v0/api.js?render=" . $turnstile_render_mode, array(), null, $defer); } /* Disable Button */ if ( get_option('cfturnstile_disable_button') && !wp_script_is('cfturnstile-js', 'enqueued') ) { wp_enqueue_script('cfturnstile-js', plugins_url('/js/disable-submit.js', __FILE__), array('cfturnstile'), '5.0'); } /* WooCommerce */ if ( cft_is_plugin_active('woocommerce/woocommerce.php') && !wp_script_is('cfturnstile-woo-js', 'enqueued') ) { wp_enqueue_script('cfturnstile-woo-js', plugins_url('/js/integrations/woocommerce.js', __FILE__), array('jquery', 'cfturnstile', 'wp-data'), '1.3', $defer); } /* WPDiscuz */ if ( cft_is_plugin_active('wpdiscuz/class.WpdiscuzCore.php') && !wp_style_is('cfturnstile-css', 'enqueued') ) { wp_enqueue_style('cfturnstile-css', plugins_url('/css/cfturnstile.css', __FILE__), array(), '1.2'); } /* Blocksy */ if ( 'blocksy' === $current_theme->get('TextDomain') && !wp_script_is('cfturnstile-blocksy-js', 'enqueued') ) { wp_enqueue_script('cfturnstile-blocksy-js', plugins_url('/js/integrations/blocksy.js', __FILE__), array('cfturnstile'), '1.1', false); } /* Custom Hook for Integrations */ do_action("cfturnstile_enqueue_scripts_custom"); } /** * Add data-cfasync="false" to Turnstile script tag */ function cfturnstile_add_data_attribute($tag, $handle) { if ('cfturnstile' === $handle) { $tag = str_replace("src='", "data-cfasync='false' src='", $tag); } return $tag; } add_filter('script_loader_tag', 'cfturnstile_add_data_attribute', 10, 2); /** * Include Functions */ include_once(plugin_dir_path(__FILE__) . 'inc/failsafe.php'); include_once(plugin_dir_path(__FILE__) . 'inc/verification.php'); include_once(plugin_dir_path(__FILE__) . 'inc/turnstile.php'); /** * Include Whitelist */ include_once(plugin_dir_path(__FILE__) . 'inc/whitelist.php'); /** * Include Integrations */ if(empty(get_option('cfturnstile_tested')) || get_option('cfturnstile_tested') == 'yes') { // Performance Plugins Compatibility if ( get_option('cfturnstile_perf_compat', 1) && (cft_is_plugin_active('sg-cachepress/sg-cachepress.php') || cft_is_plugin_active('litespeed-cache/litespeed-cache.php') || cft_is_plugin_active('wp-rocket/wp-rocket.php')) ) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/other/perf.php'); } // Include WordPress include_once(plugin_dir_path(__FILE__) . 'inc/wordpress.php'); // Include WooCommerce if (cft_is_plugin_active('woocommerce/woocommerce.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/ecommerce/woocommerce.php'); } // Include EDD if (cft_is_plugin_active('easy-digital-downloads/easy-digital-downloads.php') || cft_is_plugin_active('easy-digital-downloads-pro/easy-digital-downloads.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/ecommerce/edd.php'); } // Include PMP if (cft_is_plugin_active('paid-memberships-pro/paid-memberships-pro.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/ecommerce/pmp.php'); } // Include Sunshine Photo Cart if (cft_is_plugin_active('sunshine-photo-cart/sunshine-photo-cart.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/ecommerce/sunshine-photo-cart.php'); } // Include MC4WP if (cft_is_plugin_active('mailchimp-for-wp/mailchimp-for-wp.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/newsletters/mc4wp.php'); } // Include MailPoet if (cft_is_plugin_active('mailpoet/mailpoet.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/newsletters/mailpoet.php'); } // Include Contact Form 7 if (cft_is_plugin_active('contact-form-7/wp-contact-form-7.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/contact-form-7.php'); } // Include WPForms if (cft_is_plugin_active('wpforms-lite/wpforms.php') || cft_is_plugin_active('wpforms/wpforms.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/wpforms.php'); } // Include Fluent Forms if (cft_is_plugin_active('fluentform/fluentform.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/fluent-forms.php'); } // Include SureForms if (cft_is_plugin_active('sureforms/sureforms.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/sureforms.php'); } // Include Formidable Forms if (cft_is_plugin_active('formidable/formidable.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/formidable.php'); } // Include Forminator Forms if (cft_is_plugin_active('forminator/forminator.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/forminator.php'); } // Include Gravity Forms if (cft_is_plugin_active('gravityforms/gravityforms.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/gravity-forms.php'); } // Include Buddypress if (cft_is_plugin_active('buddypress/bp-loader.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/community/buddypress.php'); } // Include BBPress if (cft_is_plugin_active('bbpress/bbpress.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/community/bbpress.php'); } // Include WPDiscuz if (cft_is_plugin_active('wpdiscuz/class.WpdiscuzCore.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/community/wpdiscuz.php'); } // Include Elementor Forms if ( cft_is_plugin_active('elementor-pro/elementor-pro.php') || cft_is_plugin_active('pro-elements/pro-elements.php') ) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/other/elementor.php'); } // Include Kadence if (cft_is_plugin_active('kadence-blocks/kadence-blocks.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/kadence.php'); } // Include Ultimate Member if (cft_is_plugin_active('ultimate-member/ultimate-member.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/membership/ultimate-member.php'); } // Include MemberPress if (cft_is_plugin_active('memberpress/memberpress.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/membership/memberpress.php'); } // Include WP-Members if (cft_is_plugin_active('wp-members/wp-members.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/membership/wp-members.php'); } // Include WP User Frontend if (cft_is_plugin_active('wp-user-frontend/wpuf.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/membership/wpuf.php'); } // WP User Manager if (cft_is_plugin_active('wp-user-manager/wp-user-manager.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/membership/wp-user-manager.php'); } // Clean Login if (cft_is_plugin_active('clean-login/clean-login.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/other/clean-login.php'); } // Jetpack Forms if (cft_is_plugin_active('jetpack/jetpack.php')) { include_once(plugin_dir_path(__FILE__) . 'inc/integrations/forms/jetpack.php'); } } } /** * Compatible with HPOS */ add_action( 'before_woocommerce_init', function() { if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) { \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true ); \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', __FILE__, true ); \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'product_block_editor', __FILE__, true ); } });