• Resolved Pieter Sand

    (@beachholiday)


    Dear Support,
    Our site is experiencing an issue with the fluent forms plugin and the issue came up last evening without us making any changes to the site.

    Specifically, WordPress detected a fatal error in the admin area caused by a missing class within the plugin.

    The website is loading fine on the front end and the issue seems to be limited to certain backend functionality (like editing forms or handling form validation).

    Below I include two things:

    1. what we see when we go to https://site.com/wp-admin
    2. the systems error email we received.

    Many thanks for looking into this.

    Kind regards,
    Piet

    WP-Admin

    yles’, ‘Use fluentform/numeric_styles instead of fluentform_numeric_styles.’ ); return apply_filters(‘fluentform/numeric_styles’, $data); } public static function getNumericValue($input, $formatterName) { $formatters = static::getNumericFormatters(); if (empty($formatters[$formatterName][‘settings’])) { return $input; } $settings = $formatters[$formatterName][‘settings’]; $number = floatval(str_replace($settings[‘decimal’], ‘.’, preg_replace(‘/[^-?\d’ . preg_quote($settings[‘decimal’]) . ‘]/’, ”, $input))); return number_format($number, $settings[‘precision’], ‘.’, ”); } public static function getNumericFormatted($input, $formatterName) { if (!is_numeric($input)) { return $input; } $formatters = static::getNumericFormatters(); if (empty($formatters[$formatterName][‘settings’])) { return $input; } $settings = $formatters[$formatterName][‘settings’]; return number_format($input, $settings[‘precision’], $settings[‘decimal’], $settings[‘separator’]); } public static function getDuplicateFieldNames($fields) { $fields = json_decode($fields, true); $items = $fields[‘fields’]; $inputNames = static::getFieldNamesStatuses($items); $uniqueNames = array_unique($inputNames); if (count($inputNames) == count($uniqueNames)) { return []; } return array_diff_assoc($inputNames, $uniqueNames); } protected static function getFieldNamesStatuses($fields) { $names = []; foreach ($fields as $field) { if (‘container’ == ArrayHelper::get($field, ‘element’)) { $columns = ArrayHelper::get($field, ‘columns’, []); foreach ($columns as $column) { $columnInputs = static::getFieldNamesStatuses(ArrayHelper::get($column, ‘fields’, [])); $names = array_merge($names, $columnInputs); } } else { if ($name = ArrayHelper::get($field, ‘attributes.name’)) { $names[] = $name; } } } return $names; } public static function isConversionForm($formId) { static $cache = []; if (isset($cache[$formId])) { return $cache[$formId]; } $cache[$formId] = ‘yes’ == static::getFormMeta($formId, ‘is_conversion_form’); return $cache[$formId]; } public static function getPreviewUrl($formId, $type = ”) { if (‘conversational’ == $type) { return static::getConversionUrl($formId); } elseif (‘classic’ == $type) { return site_url(‘?fluent_forms_pages=1&design_mode=1&preview_id=’ . $formId) . ‘#ff_preview’; } else { if (static::isConversionForm($formId)) { return static::getConversionUrl($formId); } } return site_url(‘?fluent_forms_pages=1&design_mode=1&preview_id=’ . $formId) . ‘#ff_preview’; } public static function getFormAdminPermalink($route, $form) { $baseUrl = admin_url(‘admin.php?page=fluent_forms’); return $baseUrl . ‘&route=’ . $route . ‘&form_id=’ . $form->id; } public static function getFormSettingsUrl($form) { $baseUrl = admin_url(‘admin.php?page=fluent_forms’); return $baseUrl . ‘&form_id=’ . $form->id . ‘&route=settings&sub_route=form_settings#basic_settings’; } private static function getConversionUrl($formId) { $meta = static::getFormMeta($formId, ‘ffc_form_settings_meta’, []); $key = ArrayHelper::get($meta, ‘share_key’, ”); $slug = apply_filters_deprecated( ‘fluentform_conversational_url_slug’, [ ‘fluent-form’ ], FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/conversational_url_slug’, ‘Use fluentform/conversational_url_slug instead of fluentform_conversational_url_slug.’ ); $paramKey = apply_filters(‘fluentform/conversational_url_slug’, $slug); if (‘form’ == $paramKey) { $paramKey = ‘fluent-form’; } if ($key) { return static::getFrontendFacingUrl(‘?’ . $paramKey . ‘=’ . $formId . ‘&form=’ . $key); } return static::getFrontendFacingUrl(‘?’ . $paramKey . ‘=’ . $formId); } public static function fileUploadLocations() { $locations = [ [ ‘value’ => ‘default’, ‘label’ => (‘Fluent Forms Default’, ‘fluentform’), ], [ ‘value’ => ‘wp_media’, ‘label’ => (‘Media Library’, ‘fluentform’), ], ]; $locations = apply_filters_deprecated( ‘fluentform_file_upload_options’, [ $locations ], FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/file_upload_options’, ‘Use fluentform/file_upload_options instead of fluentform_file_upload_options’ ); return apply_filters(‘fluentform/file_upload_options’, $locations); } public static function unreadCount($formId) { return Submission::where(‘status’, ‘unread’) ->where(‘form_id’, $formId) ->count(); } public static function getForms() { $ff_list = Form::select([‘id’, ‘title’])->orderBy(‘id’, ‘DESC’)->get(); $forms = []; if ($ff_list) { $forms[0] = esc_html__(‘Select a Fluent Forms’, ‘fluentform’); foreach ($ff_list as $form) { $forms[$form->id] = esc_html($form->title) . ‘ (‘ . $form->id . ‘)’; } } else { $forms[0] = esc_html__(‘Create a Form First’, ‘fluentform’); } return $forms; } public static function replaceBrTag($content, $with = ”) { if (is_array($content)) { foreach ($content as $key => $value) { $content[$key] = static::replaceBrTag($value, $with); } } elseif (static::hasBrTag($content)) { $content = str_replace(‘
    ‘, $with, $content); } return $content; } public static function hasBrTag($content) { return is_string($content) && false !== strpos($content, ‘
    ‘); } public static function sanitizeForCSV($content) { $formulas = [‘=’, ‘-‘, ‘+’, ‘@’, “\t”, “\r”]; $formulas = apply_filters(‘fluentform/csv_sanitize_formulas’, $formulas); if (Str::startsWith($content, $formulas)) { $content = “‘” . $content; } return $content; } public static function sanitizeOrderValue($orderType = ”) { $orderBys = [‘ASC’, ‘DESC’]; $orderType = trim(strtoupper($orderType)); return in_array($orderType, $orderBys) ? $orderType : ‘DESC’; } public static function getForm($id) { return Form::where(‘id’, $id)->first(); } public static function shouldHidePassword($formId) { $isTruncate = apply_filters_deprecated( ‘fluentform_truncate_password_values’, [ true, $formId ], FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/truncate_password_values’, ‘Use fluentform/truncate_password_values instead of fluentform_truncate_password_values.’ ); return apply_filters(‘fluentform/truncate_password_values’, $isTruncate, $formId) && ( (defined(‘FLUENTFORM_RENDERING_ENTRIES’) && FLUENTFORM_RENDERING_ENTRIES) || (defined(‘FLUENTFORM_RENDERING_ENTRY’) && FLUENTFORM_RENDERING_ENTRY) || (defined(‘FLUENTFORM_EXPORTING_ENTRIES’) && FLUENTFORM_EXPORTING_ENTRIES) ); } // make tabular-grid value markdown format public static function getTabularGridFormatValue( $girdData, $field, $rowJoiner = ‘
    ‘, $colJoiner = ‘, ‘, $type = ” ) { if (!$girdData || !$field) { return ”; } $girdRows = ArrayHelper::get($field, ‘raw.settings.grid_rows’, ”); $girdCols = ArrayHelper::get($field, ‘raw.settings.grid_columns’, ”); $value = ”; $lastRow = key(array_slice($girdData, -1, 1, true)); foreach ($girdData as $row => $column) { $_row = $row; if ($girdRows && isset($girdRows[$row])) { $row = $girdRows[$row]; } if (‘markdown’ === $type) { $value .= ‘- ‘ . $row . ‘ : ‘; } else { $value .= $row . ‘: ‘; } if (is_array($column)) { foreach ($column as $index => $item) { $_colJoiner = $colJoiner; if ($girdCols && isset($girdCols[$item])) { $item = $girdCols[$item]; } if ($index == (count($column) – 1)) { $_colJoiner = ”; } $value .= $item . $_colJoiner; } } else { if ($girdCols && isset($girdCols[$column])) { $column = $girdCols[$column]; } $value .= $column; } if ($_row != $lastRow) { $value .= $rowJoiner; } } return $value; } public static function getInputNameFromShortCode($value) { preg_match(‘/{+(.?)}/’, $value, $matches); if ($matches && false !== strpos($matches[1], ‘inputs.’)) { return substr($matches[1], strlen(‘inputs.’)); } return ”; } public static function getRestInfo() { $config = wpFluentForm(‘config’); $namespace = $config->get(‘app.rest_namespace’); $version = $config->get(‘app.rest_version’); $restUrl = rest_url($namespace . ‘/’ . $version); $restUrl = rtrim($restUrl, ‘/\’); return [ ‘base_url’ => esc_url_raw(rest_url()), ‘url’ => $restUrl, ‘nonce’ => wp_create_nonce(‘wp_rest’), ‘namespace’ => $namespace, ‘version’ => $version, ]; } public static function getLogInitiator($action, $type = ‘log’) { if (‘log’ === $type) { $title = ucwords(implode(‘ ‘, preg_split(‘/(?=[A-Z])/’, $action))); } else { $title = ucwords( str_replace( [‘fluentform/integration_notify_’, ‘fluentform_’, ‘notification_feed’, ”], [”, ”, ”, ‘ ‘], $action ) ); } return $title; } public static function getIpinfo() { return ArrayHelper::get(get_option(‘fluentform_global_form_settings’), ‘misc.geo_provider_token’); } public static function isAutoloadCaptchaEnabled() { return ArrayHelper::get(get_option(‘_fluentform_global_form_settings’), ‘misc.autoload_captcha’); } public static function maybeDecryptUrl($url) { $uploadDir = str_replace(‘/’, ‘\/’, FLUENTFORM_UPLOAD_DIR . ‘/temp’); $pattern = “/(?<={$uploadDir}\/).$/”; preg_match($pattern, $url, $match); if (!empty($match)) { $url = str_replace($match[0], Protector::decrypt($match[0]), $url); } return $url; } public static function arrayFilterRecursive($arrayItems) { foreach ($arrayItems as $key => $item) { is_array($item) && $arrayItems[$key] = self::arrayFilterRecursive($item); if (empty($arrayItems[$key])) { unset($arrayItems[$key]); } } return $arrayItems; } public static function isBlockEditor() { return defined(‘REST_REQUEST’) && REST_REQUEST && !empty($_REQUEST[‘context’]) && $_REQUEST[‘context’] === ‘edit’; } public static function resolveValidationRulesGlobalOption(&$field) { if (isset($field[‘fields’]) && is_array($field[‘fields’])) { foreach ($field[‘fields’] as &$subField) { static::resolveValidationRulesGlobalOption($subField); } } else { if (ArrayHelper::get($field, ‘settings.validation_rules’)) { foreach ($field[‘settings’][‘validation_rules’] as $key => &$rule) { if (!isset($rule[‘global’])) { $rule[‘global’] = false; } $rule[‘global_message’] = static::getGlobalDefaultMessage($key); } } } } /** * Validate form input value against database values * * @param $field array Form Field * @param $formData array From Data * @param $form object From * @param $fieldName string optional * @param $inputValue mixed optional * * @return string * Return Error message on fail. Otherwise, return empty string / public static function validateInput($field, $formData, $form, $fieldName = ”, $inputValue = []) { $error = ”; if (!$fieldName) { $fieldName = ArrayHelper::get($field, ‘name’); } if (!$fieldName) { return $error; } if (!$inputValue) { $inputValue = ArrayHelper::get($formData, $fieldName); } if ($inputValue) { $rawField = ArrayHelper::get($field, ‘raw’); if (!$rawField) { $rawField = $field; } $fieldType = ArrayHelper::get($rawField, ‘element’); $rawField = apply_filters(‘fluentform/rendering_field_data’ . $fieldType, $rawField, $form); $options = []; if (“net_promoter_score” === $fieldType) { $options = array_flip(ArrayHelper::get($rawField, ‘options’, [])); } elseif (‘ratings’ == $fieldType) { $options = array_keys(ArrayHelper::get($rawField, ‘options’, [])); } elseif (‘gdpr_agreement’ == $fieldType || ‘terms_and_condition’ == $fieldType) { $options = [‘on’]; } elseif (in_array($fieldType, [‘input_radio’, ‘select’, ‘input_checkbox’])) { if (ArrayHelper::isTrue($rawField, ‘attributes.multiple’)) { $fieldType = ‘multi_select’; } $options = array_column( ArrayHelper::get($rawField, ‘settings.advanced_options’, []), ‘value’ ); } elseif (“dynamic_field” == $fieldType) { $dynamicFetchValue = ‘yes’ == ArrayHelper::get($rawField, ‘settings.dynamic_fetch’); if ($dynamicFetchValue) { $rawField = apply_filters(‘fluentform/dynamic_field_re_fetch_result_and_resolve_value’, $rawField); } $dfElementType = ArrayHelper::get($rawField, ‘attributes.type’); if (in_array($dfElementType, [‘radio’, ‘select’, ‘checkbox’])) { $fieldType = ‘dynamic_field_options’; $options = array_column( ArrayHelper::get($rawField, ‘settings.advanced_options’, []), ‘value’ ); } } if ($options) { $options = array_map(‘sanitize_text_field’, $options); } $isValid = true; switch ($fieldType) { case ‘input_radio’: case ‘select’: case ‘net_promoter_score’: case ‘ratings’: case ‘gdpr_agreement’: case ‘terms_and_condition’: case ‘input_checkbox’: case ‘multi_select’: case ‘dynamic_field_options’: $skipValidationInputsWithOptions = apply_filters(‘fluentform/skip_validation_inputs_with_options’, false, $fieldType, $form, $formData); if ($skipValidationInputsWithOptions) { break; } if (is_array($inputValue)) { $isValid = array_diff($inputValue, $options); $isValid = empty($isValid); } else { $isValid = in_array($inputValue, $options); } break; case ‘input_number’: if (is_array($inputValue)) { $hasNonNumricValue = in_array(false, array_map(‘is_numeric’, $inputValue)); if ($hasNonNumricValue) { $isValid = false; } } else { $isValid = is_numeric($inputValue); } break; case ‘select_country’: $fieldData = ArrayHelper::get($field, ‘raw’); $data = (new SelectCountry())->loadCountries($fieldData); $validCountries = ArrayHelper::get($fieldData, ‘settings.country_list.priority_based’, []); $validCountries = array_merge($validCountries, array_keys(ArrayHelper::get($data, ‘options’))); $isValid = in_array($inputValue, $validCountries); break; case ‘repeater_field’: case ‘repeater_container’: foreach (ArrayHelper::get($rawField, ‘fields’, []) as $index => $repeaterField) { $repeaterFieldValue = array_filter(array_column($inputValue, $index)); if ($repeaterFieldValue && $error = static::validateInput($repeaterField, $formData, $form, $fieldName, $repeaterFieldValue)) { $isValid = false; break; } } break; case ‘tabular_grid’: $rows = array_keys(ArrayHelper::get($rawField, ‘settings.grid_rows’, [])); $rows = array_map(‘trim’, $rows); $submittedRows = array_keys(ArrayHelper::get($formData, $fieldName, [])); $submittedRows = array_map(‘trim’, $submittedRows); $rowDiff = array_diff($submittedRows, $rows); $isValid = empty($rowDiff); if ($isValid) { $columns = array_keys(ArrayHelper::get($rawField, ‘settings.grid_columns’, [])); $columns = array_map(‘trim’, $columns); $submittedCols = ArrayHelper::flatten(ArrayHelper::get($formData, $fieldName, [])); $submittedCols = array_map(‘trim’, $submittedCols); $colDiff = array_diff($submittedCols, $columns); $isValid = empty($colDiff); } break; default: break; } if (!$isValid) { $error = _(‘The given data was invalid’, ‘fluentform’); } } return $error; } public static function getWhiteListedFields($formId) { $whiteListedFields = [ ‘__fluent_form_embded_post_id’, ‘_fluentform’ . $formId . ‘_fluentformnonce’, ‘_wp_http_referer’, ‘g-recaptcha-response’, ‘h-captcha-response’, ‘cf-turnstile-response’, ‘__stripe_payment_method_id’, ‘__ff_all_applied_coupons’, ‘__entry_intermediate_hash’, ‘__square_payment_method_id’, ‘__square_verify_buyer_id’, ‘ct_bot_detector_event_token’, ‘ff_ct_form_load_time’ ]; return apply_filters(‘fluentform/white_listed_fields’, $whiteListedFields, $formId); } /* * Shortcode parse on validation message * @param string $message * @param object $form * @param string $fieldName * @return string / public static function shortCodeParseOnValidationMessage($message, $form, $fieldName) { // For validation message there is no entry & form data // Add ‘current_field’ name as data array to resolve {labels.current_field} shortcode if it has return ShortCodeParser::parse( $message, (object)[‘response’ => “”, ‘form_id’ => $form->id], [‘current_field’ => $fieldName], $form ); } public static function getAjaxUrl() { return apply_filters(‘fluentform/ajax_url’, admin_url(‘admin-ajax.php’)); } public static function getDefaultDateTimeFormatForMoment() { $phpFormat = get_option(‘date_format’) . ‘ ‘ . get_option(‘time_format’); $replacements = [ ‘A’ => ‘A’, // for the sake of escaping below ‘a’ => ‘a’, // for the sake of escaping below ‘B’ => ”, // Swatch internet time (.beats), no equivalent ‘c’ => ‘YYYY-MM-DD[T]HH:mm:ssZ’, // ISO 8601 ‘D’ => ‘ddd’, ‘d’ => ‘DD’, ‘e’ => ‘zz’, // deprecated since version 1.6.0 of moment.js ‘F’ => ‘MMMM’, ‘G’ => ‘H’, ‘g’ => ‘h’, ‘H’ => ‘HH’, ‘h’ => ‘hh’, ‘I’ => ”, // Daylight Saving Time? => moment().isDST(); ‘i’ => ‘mm’, ‘j’ => ‘D’, ‘L’ => ”, // Leap year? => moment().isLeapYear(); ‘l’ => ‘dddd’, ‘M’ => ‘MMM’, ‘m’ => ‘MM’, ‘N’ => ‘E’, ‘n’ => ‘M’, ‘O’ => ‘ZZ’, ‘o’ => ‘YYYY’, ‘P’ => ‘Z’, ‘r’ => ‘ddd, DD MMM YYYY HH:mm:ss ZZ’, // RFC 2822 ‘S’ => ‘o’, ‘s’ => ‘ss’, ‘T’ => ‘z’, // deprecated since version 1.6.0 of moment.js ‘t’ => ”, // days in the month => moment().daysInMonth(); ‘U’ => ‘X’, ‘u’ => ‘SSSSSS’, // microseconds ‘v’ => ‘SSS’, // milliseconds (from PHP 7.0.0) ‘W’ => ‘W’, // for the sake of escaping below ‘w’ => ‘e’, ‘Y’ => ‘YYYY’, ‘y’ => ‘YY’, ‘Z’ => ”, // time zone offset in minutes => moment().zone(); ‘z’ => ‘DDD’, ]; // Converts escaped characters. foreach ($replacements as $from => $to) { $replacements[‘\’ . $from] = ‘[‘ . $from . ‘]’; } $format = strtr($phpFormat, $replacements); return apply_filters(‘fluentform/moment_date_time_format’, $format); } public static function isDefaultWPDateEnabled() { $globalSettings = get_option(‘_fluentform_global_form_settings’); return ‘wp_default’ === ArrayHelper::get($globalSettings, ‘misc.default_admin_date_time’); } public static function isPaymentCompatible() { if (!self::hasPro()) { return true; } else { return version_compare(FLUENTFORMPRO_VERSION, FLUENTFORM_MINIMUM_PRO_VERSION, ‘>=’) ; } } /* * Determine pro payment script is compatible or not * Script is compatible if pro version is greater than or equal to 6.0.4 * * @return bool */ public static function isProPaymentScriptCompatible() { if (self::hasPro()) { return version_compare(FLUENTFORMPRO_VERSION, ‘6.0.4’, ‘>=’) ; } return false; } public static function hasPro() { return defined(‘FLUENTFORMPRO’); } public static function getLandingPageEnabledForms() { if (class_exists(\FluentFormPro\classes\SharePage\SharePage::class)) { if (method_exists(\FluentFormPro\classes\SharePage\SharePage::class, ‘getLandingPageFormIds’)) { $sharePage = new \FluentFormPro\classes\SharePage\SharePage(); return $sharePage->getLandingPageFormIds(); } } return []; } public static function sanitizeArrayKeysAndValues($values) { if (is_array($values)) { $sanitized = []; foreach ($values as $key => $value) { $trimmedKey = sanitize_text_field(trim($key)); $trimmedValue = sanitize_text_field(trim($value)); $sanitized[$trimmedKey] = $trimmedValue; } return $sanitized; } return sanitize_text_field(trim($values)); } public static function getFrontendFacingUrl($args = ”) { return home_url($args); } }
    There has been a critical error on this website. Please check your site admin email inbox for instructions. If you continue to have problems, please try the support forums.

    Learn more about troubleshooting WordPress.

    Systems Error eMail

    Hii!

    WordPress has a built-in feature that detects when a plugin or theme causes a fatal error on your site, and notifies you with this automated email.

    In this case, WordPress caught an error with one of your plugins, Fluent Forms.

    First, visit your website (https://www.site.com/) and check for any visible issues. Next, visit the page where the error was caught (https://www.site.com/wp-admin/) and check for any visible issues.

    Please contact your host for assistance with investigating this issue further.

    If your site appears broken and you can’t access your dashboard normally, WordPress now has a special “recovery mode”. This lets you safely login to your dashboard and investigate further.

    https://www.site.com/wp-login.php?action=enter_recovery_mode&rm_token=oAZYkp9e3tgMmgwqMjZa38&rm_key=nPdi1JJxfcVau8Q4eCicJi

    To keep your site safe, this link will expire in 1 day. Don’t worry about that, though: a new link will be emailed to you if the error occurs again after it expires.

    When seeking help with this issue, you may be asked for some of the following information:
    WordPress version 6.8.1
    Active theme: GeneratePress Child (version 0.1) Current plugin: Fluent Forms (version 6.0.4) PHP version 8.1.32

    Error Details
    An error of type E_ERROR was caused in line 771 of the file /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/Container.php. Error message: Uncaught ReflectionException: Class “\FluentForm\App\Helpers\Helper” does not exist in /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/Container.php:771
    Stack trace:

    0 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/Container.php(771): ReflectionClass->__construct(‘\FluentForm\App…’)
    1 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/Container.php(663): FluentForm\Framework\Foundation\Container->build(‘\FluentForm\App…’, Array)
    2 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/FoundationTrait.php(191): FluentForm\Framework\Foundation\Container->make(‘\FluentForm\App…’)
    3 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/FoundationTrait.php(160): FluentForm\Framework\Foundation\Application->makeInstance(‘\FluentForm\App…’)
    4 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/FoundationTrait.php(106): FluentForm\Framework\Foundation\Application->parseHookHandler(Array)
    5 /home/site/public_html/wp-content/plugins/fluentform/app/Hooks/filters.php(317): FluentForm\Framework\Foundation\Application->addFilter(‘fluentform/vali…’, Array, 10, 5)
    6 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/Application.php(147): require_once(‘/home/site/…’)
    7 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/Application.php(76): FluentForm\Framework\Foundation\Application->requireCommonFiles(Object(FluentForm\Framework\Foundation\Application))
    8 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/Application.php(30): FluentForm\Framework\Foundation\Application->bootstrapApplication()
    9 /home/site/public_html/wp-content/plugins/fluentform/boot/app.php(32): FluentForm\Framework\Foundation\Application->__construct(‘/home/site/…’)
    10 /home/site/public_html/wp-content/plugins/fluentform/fluentform.php(29): {closure}(‘/home/site/…’)
    11 /home/site/public_html/wp-content/plugins/fluentform/fluentform.php(30): {closure}(Object(Closure))
    12 /home/site/public_html/wp-settings.php(545): include_once(‘/home/site/…’)
    13 /home/site/public_html/wp-config.php(93): require_once(‘/home/site/…’)
    14 /home/site/public_html/wp-load.php(50): require_once(‘/home/site/…’)
    15 /home/site/public_html/wp-admin/admin.php(35): require_once(‘/home/site/…’)
    16 /home/site/public_html/wp-admin/index.php(10): require_once(‘/home/site/…’)
    17 thrown

Viewing 6 replies - 1 through 6 (of 6 total)
  • Thread Starter Pieter Sand

    (@beachholiday)

    Sorry, I forgot to mention the FluentForm plugin version:
    Version 6.0.4

    What I also noticed is that I can’t log into the site via the following urls:
    site.com/wp-admin
    site.com/wp-login.php

    However, I can login into the backend of the site using the following url:
    site.com/wp-login.php?redirect_to=https%3A%2F%2Fwww.site.com%2Fwp-admin%2F&reauth=1

    Many thanks for your help with this issue.

    Kind regards,

    Piet

    • This reply was modified 10 months ago by Pieter Sand.
    Plugin Support Amimul Ihsan

    (@amimulihsanmahdi)

    Hello @beachholiday,

    It looks like a core file for Fluent Forms might be missing or corrupted. This often happens after an interrupted update or an incomplete installation.

    To resolve this, please follow these steps:Troubleshooting Steps

    1. Deactivate and Delete Fluent Forms (and Pro, if applicable):
      • Go to Plugins > Installed Plugins in your WordPress dashboard.
      • Find Fluent Forms (and Fluent Forms Pro, if you have it).
      • Deactivate both plugins first.
      • Then, delete both plugins.
      • Don’t worry: Your form data and entries are stored in your website’s database, so deleting the plugins themselves will not erase any of your saved information.
    2. Reinstall Fluent Forms (and Pro, if applicable):
      • Download the latest versions of Fluent Forms (from the WordPress plugin repository) and Fluent Forms Pro (from your WPManageNinja account dashboard).
      • Go to Plugins > Add New.
      • Click Upload Plugin at the top.
      • Choose the downloaded Fluent Forms .zip file and install it.
      • Repeat the process for the Fluent Forms Pro .zip file.
      • Once both are installed, activate them.

    This process will ensure that all the plugin’s core files are reinstalled correctly, which should resolve the “Class does not exist” error.

    Let me know if you encounter any issues during this process!

    Thank you

    Thread Starter Pieter Sand

    (@beachholiday)

    Dear @amimulihsanmahdi

    Many thanks for the quick response. I really appreciate it πŸ™‚

    We have followed your troubleshooting steps above and all seems to be working again.

    Thank you so much for your excellent & fast help.

    Piet

    Plugin Support Amimul Ihsan

    (@amimulihsanmahdi)

    Thank you for letting us know that the issue has been resolved. Feel free reach us anytime if you have any questions or concerns. We are here to assist you.

    Thread Starter Pieter Sand

    (@beachholiday)

    Dear @amimulihsanmahdi

    Unfortunately, the issue is back today which is very disappointing.

    We can’t log into our site via the following urls:
    – site.com/wp-admin
    – site.com/wp-login.php

    However, we can login into the backend of the site using the following url:
    – site.com/wp-login.php?redirect_to=https%3A%2F%2Fwww.site.com%2Fwp-admin%2F&reauth=1
    – site.com/my-account/
    Once logged-in like this, the site works perfectly at the back-end.

    At the front-end, it is also working perfectly.

    Below, I paste again what we see when we try to log-in via /wp-admin/ or /wp-login.php

    Thank you for your help with this.

    Piet

    Screen Shot

    yles’, ‘Use fluentform/numeric_styles instead of fluentform_numeric_styles.’ ); return apply_filters(‘fluentform/numeric_styles’, $data); } public static function getNumericValue($input, $formatterName) { $formatters = static::getNumericFormatters(); if (empty($formatters[$formatterName][‘settings’])) { return $input; } $settings = $formatters[$formatterName][‘settings’]; $number = floatval(str_replace($settings[‘decimal’], ‘.’, preg_replace(‘/[^-?\d’ . preg_quote($settings[‘decimal’]) . ‘]/’, ”, $input))); return number_format($number, $settings[‘precision’], ‘.’, ”); } public static function getNumericFormatted($input, $formatterName) { if (!is_numeric($input)) { return $input; } $formatters = static::getNumericFormatters(); if (empty($formatters[$formatterName][‘settings’])) { return $input; } $settings = $formatters[$formatterName][‘settings’]; return number_format($input, $settings[‘precision’], $settings[‘decimal’], $settings[‘separator’]); } public static function getDuplicateFieldNames($fields) { $fields = json_decode($fields, true); $items = $fields[‘fields’]; $inputNames = static::getFieldNamesStatuses($items); $uniqueNames = array_unique($inputNames); if (count($inputNames) == count($uniqueNames)) { return []; } return array_diff_assoc($inputNames, $uniqueNames); } protected static function getFieldNamesStatuses($fields) { $names = []; foreach ($fields as $field) { if (‘container’ == ArrayHelper::get($field, ‘element’)) { $columns = ArrayHelper::get($field, ‘columns’, []); foreach ($columns as $column) { $columnInputs = static::getFieldNamesStatuses(ArrayHelper::get($column, ‘fields’, [])); $names = array_merge($names, $columnInputs); } } else { if ($name = ArrayHelper::get($field, ‘attributes.name’)) { $names[] = $name; } } } return $names; } public static function isConversionForm($formId) { static $cache = []; if (isset($cache[$formId])) { return $cache[$formId]; } $cache[$formId] = ‘yes’ == static::getFormMeta($formId, ‘is_conversion_form’); return $cache[$formId]; } public static function getPreviewUrl($formId, $type = ”) { if (‘conversational’ == $type) { return static::getConversionUrl($formId); } elseif (‘classic’ == $type) { return site_url(‘?fluent_forms_pages=1&design_mode=1&preview_id=’ . $formId) . ‘#ff_preview’; } else { if (static::isConversionForm($formId)) { return static::getConversionUrl($formId); } } return site_url(‘?fluent_forms_pages=1&design_mode=1&preview_id=’ . $formId) . ‘#ff_preview’; } public static function getFormAdminPermalink($route, $form) { $baseUrl = admin_url(‘admin.php?page=fluent_forms’); return $baseUrl . ‘&route=’ . $route . ‘&form_id=’ . $form->id; } public static function getFormSettingsUrl($form) { $baseUrl = admin_url(‘admin.php?page=fluent_forms’); return $baseUrl . ‘&form_id=’ . $form->id . ‘&route=settings&sub_route=form_settings#basic_settings’; } private static function getConversionUrl($formId) { $meta = static::getFormMeta($formId, ‘ffc_form_settings_meta’, []); $key = ArrayHelper::get($meta, ‘share_key’, ”); $slug = apply_filters_deprecated( ‘fluentform_conversational_url_slug’, [ ‘fluent-form’ ], FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/conversational_url_slug’, ‘Use fluentform/conversational_url_slug instead of fluentform_conversational_url_slug.’ ); $paramKey = apply_filters(‘fluentform/conversational_url_slug’, $slug); if (‘form’ == $paramKey) { $paramKey = ‘fluent-form’; } if ($key) { return static::getFrontendFacingUrl(‘?’ . $paramKey . ‘=’ . $formId . ‘&form=’ . $key); } return static::getFrontendFacingUrl(‘?’ . $paramKey . ‘=’ . $formId); } public static function fileUploadLocations() { $locations = [ [ ‘value’ => ‘default’, ‘label’ => (‘Fluent Forms Default’, ‘fluentform’), ], [ ‘value’ => ‘wp_media’, ‘label’ => (‘Media Library’, ‘fluentform’), ], ]; $locations = apply_filters_deprecated( ‘fluentform_file_upload_options’, [ $locations ], FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/file_upload_options’, ‘Use fluentform/file_upload_options instead of fluentform_file_upload_options’ ); return apply_filters(‘fluentform/file_upload_options’, $locations); } public static function unreadCount($formId) { return Submission::where(‘status’, ‘unread’) ->where(‘form_id’, $formId) ->count(); } public static function getForms() { $ff_list = Form::select([‘id’, ‘title’])->orderBy(‘id’, ‘DESC’)->get(); $forms = []; if ($ff_list) { $forms[0] = esc_html__(‘Select a Fluent Forms’, ‘fluentform’); foreach ($ff_list as $form) { $forms[$form->id] = esc_html($form->title) . ‘ (‘ . $form->id . ‘)’; } } else { $forms[0] = esc_html__(‘Create a Form First’, ‘fluentform’); } return $forms; } public static function replaceBrTag($content, $with = ”) { if (is_array($content)) { foreach ($content as $key => $value) { $content[$key] = static::replaceBrTag($value, $with); } } elseif (static::hasBrTag($content)) { $content = str_replace(‘
    ‘, $with, $content); } return $content; } public static function hasBrTag($content) { return is_string($content) && false !== strpos($content, ‘
    ‘); } public static function sanitizeForCSV($content) { $formulas = [‘=’, ‘-‘, ‘+’, ‘@’, “\t”, “\r”]; $formulas = apply_filters(‘fluentform/csv_sanitize_formulas’, $formulas); if (Str::startsWith($content, $formulas)) { $content = “‘” . $content; } return $content; } public static function sanitizeOrderValue($orderType = ”) { $orderBys = [‘ASC’, ‘DESC’]; $orderType = trim(strtoupper($orderType)); return in_array($orderType, $orderBys) ? $orderType : ‘DESC’; } public static function getForm($id) { return Form::where(‘id’, $id)->first(); } public static function shouldHidePassword($formId) { $isTruncate = apply_filters_deprecated( ‘fluentform_truncate_password_values’, [ true, $formId ], FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/truncate_password_values’, ‘Use fluentform/truncate_password_values instead of fluentform_truncate_password_values.’ ); return apply_filters(‘fluentform/truncate_password_values’, $isTruncate, $formId) && ( (defined(‘FLUENTFORM_RENDERING_ENTRIES’) && FLUENTFORM_RENDERING_ENTRIES) || (defined(‘FLUENTFORM_RENDERING_ENTRY’) && FLUENTFORM_RENDERING_ENTRY) || (defined(‘FLUENTFORM_EXPORTING_ENTRIES’) && FLUENTFORM_EXPORTING_ENTRIES) ); } // make tabular-grid value markdown format public static function getTabularGridFormatValue( $girdData, $field, $rowJoiner = ‘
    ‘, $colJoiner = ‘, ‘, $type = ” ) { if (!$girdData || !$field) { return ”; } $girdRows = ArrayHelper::get($field, ‘raw.settings.grid_rows’, ”); $girdCols = ArrayHelper::get($field, ‘raw.settings.grid_columns’, ”); $value = ”; $lastRow = key(array_slice($girdData, -1, 1, true)); foreach ($girdData as $row => $column) { $_row = $row; if ($girdRows && isset($girdRows[$row])) { $row = $girdRows[$row]; } if (‘markdown’ === $type) { $value .= ‘- ‘ . $row . ‘ : ‘; } else { $value .= $row . ‘: ‘; } if (is_array($column)) { foreach ($column as $index => $item) { $_colJoiner = $colJoiner; if ($girdCols && isset($girdCols[$item])) { $item = $girdCols[$item]; } if ($index == (count($column) – 1)) { $_colJoiner = ”; } $value .= $item . $_colJoiner; } } else { if ($girdCols && isset($girdCols[$column])) { $column = $girdCols[$column]; } $value .= $column; } if ($_row != $lastRow) { $value .= $rowJoiner; } } return $value; } public static function getInputNameFromShortCode($value) { preg_match(‘/{+(.?)}/’, $value, $matches); if ($matches && false !== strpos($matches[1], ‘inputs.’)) { return substr($matches[1], strlen(‘inputs.’)); } return ”; } public static function getRestInfo() { $config = wpFluentForm(‘config’); $namespace = $config->get(‘app.rest_namespace’); $version = $config->get(‘app.rest_version’); $restUrl = rest_url($namespace . ‘/’ . $version); $restUrl = rtrim($restUrl, ‘/\’); return [ ‘base_url’ => esc_url_raw(rest_url()), ‘url’ => $restUrl, ‘nonce’ => wp_create_nonce(‘wp_rest’), ‘namespace’ => $namespace, ‘version’ => $version, ]; } public static function getLogInitiator($action, $type = ‘log’) { if (‘log’ === $type) { $title = ucwords(implode(‘ ‘, preg_split(‘/(?=[A-Z])/’, $action))); } else { $title = ucwords( str_replace( [‘fluentform/integration_notify_’, ‘fluentform_’, ‘notification_feed’, ”], [”, ”, ”, ‘ ‘], $action ) ); } return $title; } public static function getIpinfo() { return ArrayHelper::get(get_option(‘fluentform_global_form_settings’), ‘misc.geo_provider_token’); } public static function isAutoloadCaptchaEnabled() { return ArrayHelper::get(get_option(‘_fluentform_global_form_settings’), ‘misc.autoload_captcha’); } public static function maybeDecryptUrl($url) { $uploadDir = str_replace(‘/’, ‘\/’, FLUENTFORM_UPLOAD_DIR . ‘/temp’); $pattern = “/(?<={$uploadDir}\/).$/”; preg_match($pattern, $url, $match); if (!empty($match)) { $url = str_replace($match[0], Protector::decrypt($match[0]), $url); } return $url; } public static function arrayFilterRecursive($arrayItems) { foreach ($arrayItems as $key => $item) { is_array($item) && $arrayItems[$key] = self::arrayFilterRecursive($item); if (empty($arrayItems[$key])) { unset($arrayItems[$key]); } } return $arrayItems; } public static function isBlockEditor() { return defined(‘REST_REQUEST’) && REST_REQUEST && !empty($_REQUEST[‘context’]) && $_REQUEST[‘context’] === ‘edit’; } public static function resolveValidationRulesGlobalOption(&$field) { if (isset($field[‘fields’]) && is_array($field[‘fields’])) { foreach ($field[‘fields’] as &$subField) { static::resolveValidationRulesGlobalOption($subField); } } else { if (ArrayHelper::get($field, ‘settings.validation_rules’)) { foreach ($field[‘settings’][‘validation_rules’] as $key => &$rule) { if (!isset($rule[‘global’])) { $rule[‘global’] = false; } $rule[‘global_message’] = static::getGlobalDefaultMessage($key); } } } } /** * Validate form input value against database values * * @param $field array Form Field * @param $formData array From Data * @param $form object From * @param $fieldName string optional * @param $inputValue mixed optional * * @return string * Return Error message on fail. Otherwise, return empty string / public static function validateInput($field, $formData, $form, $fieldName = ”, $inputValue = []) { $error = ”; if (!$fieldName) { $fieldName = ArrayHelper::get($field, ‘name’); } if (!$fieldName) { return $error; } if (!$inputValue) { $inputValue = ArrayHelper::get($formData, $fieldName); } if ($inputValue) { $rawField = ArrayHelper::get($field, ‘raw’); if (!$rawField) { $rawField = $field; } $fieldType = ArrayHelper::get($rawField, ‘element’); $rawField = apply_filters(‘fluentform/rendering_field_data’ . $fieldType, $rawField, $form); $options = []; if (“net_promoter_score” === $fieldType) { $options = array_flip(ArrayHelper::get($rawField, ‘options’, [])); } elseif (‘ratings’ == $fieldType) { $options = array_keys(ArrayHelper::get($rawField, ‘options’, [])); } elseif (‘gdpr_agreement’ == $fieldType || ‘terms_and_condition’ == $fieldType) { $options = [‘on’]; } elseif (in_array($fieldType, [‘input_radio’, ‘select’, ‘input_checkbox’])) { if (ArrayHelper::isTrue($rawField, ‘attributes.multiple’)) { $fieldType = ‘multi_select’; } $options = array_column( ArrayHelper::get($rawField, ‘settings.advanced_options’, []), ‘value’ ); } elseif (“dynamic_field” == $fieldType) { $dynamicFetchValue = ‘yes’ == ArrayHelper::get($rawField, ‘settings.dynamic_fetch’); if ($dynamicFetchValue) { $rawField = apply_filters(‘fluentform/dynamic_field_re_fetch_result_and_resolve_value’, $rawField); } $dfElementType = ArrayHelper::get($rawField, ‘attributes.type’); if (in_array($dfElementType, [‘radio’, ‘select’, ‘checkbox’])) { $fieldType = ‘dynamic_field_options’; $options = array_column( ArrayHelper::get($rawField, ‘settings.advanced_options’, []), ‘value’ ); } } if ($options) { $options = array_map(‘sanitize_text_field’, $options); } $isValid = true; switch ($fieldType) { case ‘input_radio’: case ‘select’: case ‘net_promoter_score’: case ‘ratings’: case ‘gdpr_agreement’: case ‘terms_and_condition’: case ‘input_checkbox’: case ‘multi_select’: case ‘dynamic_field_options’: $skipValidationInputsWithOptions = apply_filters(‘fluentform/skip_validation_inputs_with_options’, false, $fieldType, $form, $formData); if ($skipValidationInputsWithOptions) { break; } if (is_array($inputValue)) { $isValid = array_diff($inputValue, $options); $isValid = empty($isValid); } else { $isValid = in_array($inputValue, $options); } break; case ‘input_number’: if (is_array($inputValue)) { $hasNonNumricValue = in_array(false, array_map(‘is_numeric’, $inputValue)); if ($hasNonNumricValue) { $isValid = false; } } else { $isValid = is_numeric($inputValue); } break; case ‘select_country’: $fieldData = ArrayHelper::get($field, ‘raw’); $data = (new SelectCountry())->loadCountries($fieldData); $validCountries = ArrayHelper::get($fieldData, ‘settings.country_list.priority_based’, []); $validCountries = array_merge($validCountries, array_keys(ArrayHelper::get($data, ‘options’))); $isValid = in_array($inputValue, $validCountries); break; case ‘repeater_field’: case ‘repeater_container’: foreach (ArrayHelper::get($rawField, ‘fields’, []) as $index => $repeaterField) { $repeaterFieldValue = array_filter(array_column($inputValue, $index)); if ($repeaterFieldValue && $error = static::validateInput($repeaterField, $formData, $form, $fieldName, $repeaterFieldValue)) { $isValid = false; break; } } break; case ‘tabular_grid’: $rows = array_keys(ArrayHelper::get($rawField, ‘settings.grid_rows’, [])); $rows = array_map(‘trim’, $rows); $submittedRows = array_keys(ArrayHelper::get($formData, $fieldName, [])); $submittedRows = array_map(‘trim’, $submittedRows); $rowDiff = array_diff($submittedRows, $rows); $isValid = empty($rowDiff); if ($isValid) { $columns = array_keys(ArrayHelper::get($rawField, ‘settings.grid_columns’, [])); $columns = array_map(‘trim’, $columns); $submittedCols = ArrayHelper::flatten(ArrayHelper::get($formData, $fieldName, [])); $submittedCols = array_map(‘trim’, $submittedCols); $colDiff = array_diff($submittedCols, $columns); $isValid = empty($colDiff); } break; default: break; } if (!$isValid) { $error = _(‘The given data was invalid’, ‘fluentform’); } } return $error; } public static function getWhiteListedFields($formId) { $whiteListedFields = [ ‘__fluent_form_embded_post_id’, ‘_fluentform’ . $formId . ‘_fluentformnonce’, ‘_wp_http_referer’, ‘g-recaptcha-response’, ‘h-captcha-response’, ‘cf-turnstile-response’, ‘__stripe_payment_method_id’, ‘__ff_all_applied_coupons’, ‘__entry_intermediate_hash’, ‘__square_payment_method_id’, ‘__square_verify_buyer_id’, ‘ct_bot_detector_event_token’, ‘ff_ct_form_load_time’ ]; return apply_filters(‘fluentform/white_listed_fields’, $whiteListedFields, $formId); } /* * Shortcode parse on validation message * @param string $message * @param object $form * @param string $fieldName * @return string / public static function shortCodeParseOnValidationMessage($message, $form, $fieldName) { // For validation message there is no entry & form data // Add ‘current_field’ name as data array to resolve {labels.current_field} shortcode if it has return ShortCodeParser::parse( $message, (object)[‘response’ => “”, ‘form_id’ => $form->id], [‘current_field’ => $fieldName], $form ); } public static function getAjaxUrl() { return apply_filters(‘fluentform/ajax_url’, admin_url(‘admin-ajax.php’)); } public static function getDefaultDateTimeFormatForMoment() { $phpFormat = get_option(‘date_format’) . ‘ ‘ . get_option(‘time_format’); $replacements = [ ‘A’ => ‘A’, // for the sake of escaping below ‘a’ => ‘a’, // for the sake of escaping below ‘B’ => ”, // Swatch internet time (.beats), no equivalent ‘c’ => ‘YYYY-MM-DD[T]HH:mm:ssZ’, // ISO 8601 ‘D’ => ‘ddd’, ‘d’ => ‘DD’, ‘e’ => ‘zz’, // deprecated since version 1.6.0 of moment.js ‘F’ => ‘MMMM’, ‘G’ => ‘H’, ‘g’ => ‘h’, ‘H’ => ‘HH’, ‘h’ => ‘hh’, ‘I’ => ”, // Daylight Saving Time? => moment().isDST(); ‘i’ => ‘mm’, ‘j’ => ‘D’, ‘L’ => ”, // Leap year? => moment().isLeapYear(); ‘l’ => ‘dddd’, ‘M’ => ‘MMM’, ‘m’ => ‘MM’, ‘N’ => ‘E’, ‘n’ => ‘M’, ‘O’ => ‘ZZ’, ‘o’ => ‘YYYY’, ‘P’ => ‘Z’, ‘r’ => ‘ddd, DD MMM YYYY HH:mm:ss ZZ’, // RFC 2822 ‘S’ => ‘o’, ‘s’ => ‘ss’, ‘T’ => ‘z’, // deprecated since version 1.6.0 of moment.js ‘t’ => ”, // days in the month => moment().daysInMonth(); ‘U’ => ‘X’, ‘u’ => ‘SSSSSS’, // microseconds ‘v’ => ‘SSS’, // milliseconds (from PHP 7.0.0) ‘W’ => ‘W’, // for the sake of escaping below ‘w’ => ‘e’, ‘Y’ => ‘YYYY’, ‘y’ => ‘YY’, ‘Z’ => ”, // time zone offset in minutes => moment().zone(); ‘z’ => ‘DDD’, ]; // Converts escaped characters. foreach ($replacements as $from => $to) { $replacements[‘\’ . $from] = ‘[‘ . $from . ‘]’; } $format = strtr($phpFormat, $replacements); return apply_filters(‘fluentform/moment_date_time_format’, $format); } public static function isDefaultWPDateEnabled() { $globalSettings = get_option(‘_fluentform_global_form_settings’); return ‘wp_default’ === ArrayHelper::get($globalSettings, ‘misc.default_admin_date_time’); } public static function isPaymentCompatible() { if (!self::hasPro()) { return true; } else { return version_compare(FLUENTFORMPRO_VERSION, FLUENTFORM_MINIMUM_PRO_VERSION, ‘>=’) ; } } /* * Determine pro payment script is compatible or not * Script is compatible if pro version is greater than or equal to 6.0.4 * * @return bool */ public static function isProPaymentScriptCompatible() { if (self::hasPro()) { return version_compare(FLUENTFORMPRO_VERSION, ‘6.0.4’, ‘>=’) ; } return false; } public static function hasPro() { return defined(‘FLUENTFORMPRO’); } public static function getLandingPageEnabledForms() { if (class_exists(\FluentFormPro\classes\SharePage\SharePage::class)) { if (method_exists(\FluentFormPro\classes\SharePage\SharePage::class, ‘getLandingPageFormIds’)) { $sharePage = new \FluentFormPro\classes\SharePage\SharePage(); return $sharePage->getLandingPageFormIds(); } } return []; } public static function sanitizeArrayKeysAndValues($values) { if (is_array($values)) { $sanitized = []; foreach ($values as $key => $value) { $trimmedKey = sanitize_text_field(trim($key)); $trimmedValue = sanitize_text_field(trim($value)); $sanitized[$trimmedKey] = $trimmedValue; } return $sanitized; } return sanitize_text_field(trim($values)); } public static function getFrontendFacingUrl($args = ”) { return home_url($args); } }

    There has been a critical error on this website. Please check your site admin email inbox for instructions. If you continue to have problems, please try the support forums.

    Learn more about troubleshooting WordPress.

    Plugin Support Amimul Ihsan

    (@amimulihsanmahdi)

    Hello again,

    Could you please try the debugging steps I shared earlier to see if they help resolve the issue? Additionally, we need to investigate why this is happening in the first place. Do you happen to have any security plugins or firewalls active on your website? In some cases, these can interfere with or even remove core plugin files.

    It would also be helpful if you could reach out to our team here, so we can take a closer look and assist you further.

    Thank you

Viewing 6 replies - 1 through 6 (of 6 total)

The topic ‘missing class within the plugin?’ is closed to new replies.