admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'wpforo_ai_features_nonce' ), 'adminNonce' => wp_create_nonce( 'wpforo_admin_ajax' ), 'debugMode' => (bool) wpforo_setting( 'general', 'debug_mode' ), ] ); } ?> settings->header( 'ai' ); ?>
settings->form_field( 'ai', 'assistant' ); WPF()->settings->form_field( 'ai', 'assistant_open' ); WPF()->settings->form_field( 'ai', 'assistant_classic_search' ); WPF()->settings->form_field( 'ai', 'assistant_preferences' ); WPF()->settings->form_field( 'ai', 'assistant_highlight' ); WPF()->settings->form_field( 'ai', 'assistant_icon' ); ?>
settings->form_field( 'ai', 'search' ); WPF()->settings->form_field( 'ai', 'search_quality' ); WPF()->settings->form_field( 'ai', 'search_min_score' ); WPF()->settings->form_field( 'ai', 'search_enhance' ); WPF()->settings->form_field( 'ai', 'search_enhance_quality' ); WPF()->settings->form_field( 'ai', 'search_language' ); WPF()->settings->form_field( 'ai', 'search_max_results' ); ?>
settings->form_field( 'ai', 'translation' ); WPF()->settings->form_field( 'ai', 'translation_quality' ); ?>
settings->form_field( 'ai', 'topic_summary' ); WPF()->settings->form_field( 'ai', 'topic_summary_quality' ); WPF()->settings->form_field( 'ai', 'topic_summary_style' ); WPF()->settings->form_field( 'ai', 'topic_summary_min_replies' ); WPF()->settings->form_field( 'ai', 'topic_summary_language' ); ?>
settings->form_field( 'ai', 'topic_suggestions' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_quality' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_min_words' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_max_calls' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_show_related' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_show_answer' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_max_similar' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_max_related' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_similarity' ); WPF()->settings->form_field( 'ai', 'topic_suggestions_language' ); ?>
settings->form_field( 'ai', 'moderation_spam' ); WPF()->settings->form_field( 'ai', 'moderation_spam_quality' ); WPF()->settings->form_field( 'ai', 'moderation_spam_action_detected' ); WPF()->settings->form_field( 'ai', 'moderation_spam_action_suspected' ); WPF()->settings->form_field( 'ai', 'moderation_spam_action_uncertain' ); WPF()->settings->form_field( 'ai', 'moderation_spam_action_clean' ); // Only show forum context settings if storage mode is 'cloud' (Lambda can access S3 Vectors) $storage_mode = WPF()->vector_storage ? WPF()->vector_storage->get_storage_mode() : 'local'; if ( $storage_mode === 'cloud' ) { WPF()->settings->form_field( 'ai', 'moderation_spam_use_context' ); WPF()->settings->form_field( 'ai', 'moderation_spam_min_indexed' ); } // Custom display for usergroups with "Dashboard - Moderate Topics & Posts" permission $aup_groupids = array_map( 'intval', WPF()->usergroup->get_groupids_by_can( 'aum' ) ); $usergroups = WPF()->usergroup->get_usergroups( 'full' ); $aup_groups = []; foreach( $usergroups as $group ) { if( in_array( (int) $group['groupid'], $aup_groupids, true ) ) { $aup_groups[] = $group; } } ?>

  • »
 
settings->form_field( 'ai', 'moderation_spam_exempt_minposts' ); WPF()->settings->form_field( 'ai', 'moderation_spam_autoban_unapproved' ); ?>
settings->form_field( 'ai', 'moderation_toxicity' ); WPF()->settings->form_field( 'ai', 'moderation_toxicity_sensitivity' ); WPF()->settings->form_field( 'ai', 'moderation_toxicity_action' ); ?>
settings->form_field( 'ai', 'moderation_compliance' ); // Get built-in policy and rules status $legal_settings = WPF()->settings->legal; $policy_enabled = ! empty( $legal_settings['checkbox_forum_privacy'] ); $policy_text = trim( $legal_settings['forum_privacy_text'] ?? '' ); $policy_word_count = $policy_enabled && $policy_text ? str_word_count( strip_tags( $policy_text ) ) : 0; $rules_enabled = ! empty( $legal_settings['rules_checkbox'] ); $rules_text = trim( $legal_settings['rules_text'] ?? '' ); $rules_word_count = $rules_enabled && $rules_text ? str_word_count( strip_tags( $rules_text ) ) : 0; // Get all pages for custom policy/rules dropdowns $pages = get_pages( [ 'post_status' => 'publish', 'sort_column' => 'post_title' ] ); $current_custom_policy = intval( wpforo_setting( 'ai', 'moderation_compliance_custom_policy' ) ); $current_custom_rules = intval( wpforo_setting( 'ai', 'moderation_compliance_custom_rules' ) ); ?>

Legal & Privacy.' ); ?>

: 0 ) : ?> ()
: 0 ) : ?> ()

Legal & Privacy, or select custom pages below.' ); ?>

 

 

 
settings->form_field( 'ai', 'moderation_compliance_action' ); ?>
ai_client ) && WPF()->ai_client->is_feature_available( 'ai_bot_reply' ); ?>
settings->form_field( 'ai', 'bot_reply' ); WPF()->settings->form_field( 'ai', 'bot_reply_quality' ); WPF()->settings->form_field( 'ai', 'bot_reply_style' ); WPF()->settings->form_field( 'ai', 'bot_reply_tone' ); WPF()->settings->form_field( 'ai', 'bot_reply_length' ); WPF()->settings->form_field( 'ai', 'bot_reply_knowledge_source' ); WPF()->settings->form_field( 'ai', 'bot_reply_includes' ); WPF()->settings->form_field( 'ai', 'bot_reply_language' ); ?>
settings->form_field( 'ai', 'bot_reply_unapproved' ); ?>
settings->ai['bot_reply_user_id']; $bot_user_label = ''; if ( $bot_user_id ) { $user = get_userdata( $bot_user_id ); if ( $user ) { $role = ! empty( $user->roles ) ? ucfirst( $user->roles[0] ) : ''; $bot_user_label = sprintf( '%s (%s)%s', $user->display_name, $user->user_login, $role ? ' - ' . $role : '' ); } } ?>

 
settings->form_field( 'ai', 'bot_reply_max_per_topic' ); WPF()->settings->form_field( 'ai', 'bot_reply_max_per_day' ); ?>
 
ai_client ) && WPF()->ai_client->is_feature_available( 'ai_assistant_chatbot' ); ?>
settings->form_field( 'ai', 'chatbot' ); WPF()->settings->form_field( 'ai', 'chatbot_quality' ); WPF()->settings->form_field( 'ai', 'chatbot_welcome_message' ); WPF()->settings->form_field( 'ai', 'chatbot_no_content_message' ); WPF()->settings->form_field( 'ai', 'chatbot_max_conversations' ); WPF()->settings->form_field( 'ai', 'chatbot_context_update_threshold' ); WPF()->settings->form_field( 'ai', 'chatbot_use_rag' ); WPF()->settings->form_field( 'ai', 'chatbot_use_local_context' ); WPF()->settings->form_field( 'ai', 'chatbot_allowed_groups' ); WPF()->settings->form_field( 'ai', 'chatbot_language' ); WPF()->settings->form_field( 'ai', 'chatbot_min_score' ); ?>
 

__( 'AI Semantic Search', 'wpforo' ), 'translation' => __( 'AI Translation', 'wpforo' ), 'summarization' => __( 'AI Topic Summarization', 'wpforo' ), 'suggestions' => __( 'AI Topic Suggestions', 'wpforo' ), 'chatbot' => __( 'AI Chat Assistant', 'wpforo' ), ]; ?> $feature_label ) : // Skip chatbot if not available (requires Business+ plan) if ( $feature_key === 'chatbot' && ! $wpf_ai_chatbot_available ) { continue; } $guest_limit = isset( $rate_limits[$feature_key]['guest'] ) ? (int) $rate_limits[$feature_key]['guest'] : 0; $user_limit = isset( $rate_limits[$feature_key]['user'] ) ? (int) $rate_limits[$feature_key]['user'] : 0; $guest_disabled = ( $feature_key === 'chatbot' ); // Chatbot requires login ?>