get_error_message()); } return new WP_Error('captcha_error', esc_html__('CAPTCHA verification failed. Please try again.', 'ai-captcha')); } $result = json_decode(wp_remote_retrieve_body($verify)); if (empty($result) || !isset($result->success) || !$result->success) { wp_die( esc_html__('CAPTCHA verification failed. Please try again.', 'ai-captcha') ); } return $user_login; } /** * Enqueue required scripts and styles */ function ai_captcha_enqueue_scripts() { if (!ai_captcha_is_needed()) { return; } wp_enqueue_script( 'ai-captcha-api', esc_url('https://aicaptcha.site/api.js'), [], null, [ 'in_footer' => true, 'strategy' => 'async' ] ); wp_enqueue_style( 'ai-captcha-style', esc_url(plugins_url('assets/css/ai-captcha.css', __DIR__)), [], AI_CAPTCHA_VERSION ); } /** * Add CAPTCHA field to forms */ function ai_captcha_add_to_form() { $site_key = sanitize_text_field(get_option('ai_captcha_site_key')); if (empty($site_key)) { if (current_user_can('manage_options')) { add_settings_error( 'ai_captcha_messages', 'ai_captcha_missing_key', esc_html__('AI Captcha Error: Site Key is empty! Please configure it in settings.', 'ai-captcha'), 'error' ); } return; } echo '
'; echo '
'; echo '
'; } /** * Add CAPTCHA to login form */ add_action('login_form', 'ai_captcha_add_to_login'); function ai_captcha_add_to_login() { if (in_array('login', (array) get_option('ai_captcha_forms', []))) { ai_captcha_add_to_form(); wp_nonce_field('ai_captcha_login_action', 'ai_captcha_nonce', true, true); } } /** * Add CAPTCHA to lost password form */ function ai_captcha_add_to_lostpassword() { if (in_array('lostpassword', (array) get_option('ai_captcha_forms', []))) { ai_captcha_add_to_form(); wp_nonce_field('ai_captcha_lostpassword_action', 'ai_captcha_nonce', true, true); } } /** * Add CAPTCHA to registration form */ add_action('register_form', 'ai_captcha_add_to_register'); function ai_captcha_add_to_register() { if (in_array('register', (array) get_option('ai_captcha_forms', []))) { ai_captcha_add_to_form(); wp_nonce_field('ai_captcha_register_action', 'ai_captcha_nonce', true, true); } } /** * Add CAPTCHA to comment form */ add_action('comment_form_after_fields', 'ai_captcha_add_to_comments'); function ai_captcha_add_to_comments() { if (in_array('comment', (array) get_option('ai_captcha_forms', []))) { ai_captcha_add_to_form(); wp_nonce_field('ai_captcha_comment_action', 'ai_captcha_nonce', true, true); } } /** * WooCommerce integration */ if (ai_captcha_is_woocommerce_active()) { add_action('woocommerce_after_checkout_billing_form', 'ai_captcha_add_to_woocommerce'); add_action('woocommerce_login_form', 'ai_captcha_add_to_woocommerce'); add_action('woocommerce_register_form', 'ai_captcha_add_to_woocommerce'); function ai_captcha_add_to_woocommerce() { if (in_array('woocommerce', (array) get_option('ai_captcha_forms', []))) { ai_captcha_add_to_form(); wp_nonce_field('ai_captcha_woocommerce_action', 'ai_captcha_nonce', true, true); } } } /** * Contact Form 7 integration */ if (defined('WPCF7_VERSION')) { add_filter('wpcf7_form_elements', 'ai_captcha_add_to_cf7'); function ai_captcha_add_to_cf7($elements) { if (!in_array('contact', (array) get_option('ai_captcha_forms', []))) { return $elements; } ob_start(); ai_captcha_add_to_form(); wp_nonce_field('ai_captcha_cf7_action', 'ai_captcha_nonce', true, true); $captcha = ob_get_clean(); return $elements . $captcha; } }