name = $name; add_action('init', [$this, 'init']); } public function enabled():bool { return Settings::is_form_location_enabled($this->name); } public function init():void { if (is_multisite()) { $blog_id = get_current_blog_id(); switch_to_blog($blog_id); } $enabled = $this->enabled(); if (is_multisite()) { restore_current_blog(); } if (!$enabled) return; $this->activate(); } abstract public function activate():void; public function render():void { Widget::render(); } public function process(WP_Error $errors):void { if (!Settings::is_connected()) return; $token = Widget::get_token(); if (empty($token)) { $errors->add(self::ERROR_EMPTY_TOKEN, Plugin::__('Error: Please complete CAPTCHA verification.')); return; } if (!API::verify($token)) { $errors->add(self::ERROR_INVALID_CAPTCHA, Plugin::__('Error: Your answer was incorrect - please try again.')); return; } } protected function print_errors(WP_Error $errors):void { if (!$errors->has_errors()) return; ob_start(); echo ''; wp_die(ob_get_clean()); } }