EffortLess AI Assistant

Description

EffortLess AI Assistant adds an intelligent chat widget to your WordPress site that can answer visitor questions based on your website content. The plugin searches your posts and pages to provide relevant, contextual answers.

Features

  • Multiple AI Providers: Choose between Anthropic (Claude) or OpenAI (ChatGPT)
  • Contextual Answers: Automatically searches your website content to provide relevant answers
  • Customizable Widget: Change colors and welcome messages to match your brand
  • Rate Limiting: Built-in protection against API abuse
  • Fully Translatable: Complete internationalization support

Supported AI Models

Anthropic:
* Claude Sonnet 4 (Recommended)
* Claude Opus 4
* Claude 3.5 Haiku

OpenAI:
* GPT-4o (Recommended)
* GPT-4o Mini
* GPT-4 Turbo

External services

This plugin may connect to one or more third-party AI provider APIs to generate responses to visitor questions. A connection is made only when a visitor submits a question in the chat widget, and only for the provider that the site administrator has configured. The user’s question and relevant website content are sent to the selected provider.

Anthropic (Claude)

Used to generate AI responses when the Anthropic provider is selected.
* Data sent: user question, relevant website content excerpts.
* Service: https://www.anthropic.com/
* Terms of use: https://www.anthropic.com/legal/consumer-terms
* Privacy policy: https://www.anthropic.com/legal/privacy

OpenAI (ChatGPT)

Used to generate AI responses when the OpenAI provider is selected.
* Data sent: user question, relevant website content excerpts.
* Service: https://openai.com/
* Terms of use: https://openai.com/policies/terms-of-use
* Privacy policy: https://openai.com/policies/privacy-policy

Google Gemini

Used to generate AI responses when the Google Gemini provider is selected.
* Data sent: user question, relevant website content excerpts.
* Service: https://ai.google.dev/
* Terms of use: https://ai.google.dev/gemini-api/terms
* Privacy policy: https://policies.google.com/privacy

Mistral AI

Used to generate AI responses when the Mistral provider is selected.
* Data sent: user question, relevant website content excerpts.
* Service: https://mistral.ai/
* Terms of use: https://mistral.ai/terms/
* Privacy policy: https://mistral.ai/privacy/

Ollama (local)

When the Ollama provider is selected the plugin connects to a locally-running Ollama instance on the server. No data leaves the server.

Installation

  1. Upload the effortless-ai-assistant folder to the /wp-content/plugins/ directory
  2. Activate the plugin through the ‘Plugins’ menu in WordPress
  3. Go to Settings > AI Assistant to configure the plugin
  4. Enter your API key from Anthropic or OpenAI
  5. Select your preferred AI provider and model
  6. Customize the widget settings as desired

FAQ

Where do I get an API key?

For Anthropic (Claude): Visit https://console.anthropic.com/
For OpenAI (ChatGPT): Visit https://platform.openai.com/api-keys

How does the plugin find answers?

The plugin searches your published posts and pages for content relevant to the user’s question. It then sends this context along with the question to the AI, which generates a helpful response based on your website’s actual content.

Is there rate limiting?

Yes, the plugin includes built-in rate limiting to prevent API abuse. By default, each IP address is limited to 10 requests per minute.

Can I customize the chat widget appearance?

Yes, you can change the widget’s primary color and welcome message from the settings page.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“EffortLess AI Assistant” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.2.16

  • Fix: admin-settings.js — added /** file docblock and phpcbf formatting fixes to pass PHPCS WordPress standard with zero errors/warnings

1.2.15

  • Fix: inline and in admin-settings.php moved to properly enqueued files (assets/css/admin-settings.css, assets/js/admin-settings.js) via admin_enqueue_scripts hook
  • Fix: all streaming methods refactored from direct curl to WordPress HTTP API + http_api_curl hook (stream_request() helper)
  • Fix: added == External services == section to readme.txt documenting Anthropic, OpenAI, Google Gemini, Mistral, and Ollama with ToS and Privacy Policy links

1.2.14

  • Fix: main plugin class renamed from WP_AI_Assistant to ELAIA_Plugin to satisfy WordPress prefix naming convention (PHPCS NonPrefixedClassFound)

1.2.13

  • Fix: main plugin class renamed from WP_AI_Assistant to ELAIA_AI_Assistant to satisfy WordPress prefix naming convention (PHPCS NonPrefixedClassFound)

1.2.12

  • Fix: readme short description reworded to plain English without AI/brand terms
  • Fix: DB queries restructured using inline bypass-pattern conditions — no dynamic WHERE SQL variable

1.2.11

  • Removed Plugin URI and Author URI from plugin header

1.2.10

  • Fix: readme short description simplified to plain English (no brand names)
  • Fix: DB count and logs queries inlined to resolve Plugin Check UnescapedDBParameter warnings
  • Fix: added correct PreparedSQLPlaceholders sniff ignores for dynamic WHERE clauses

1.2.9

  • Updated “Tested up to” to WordPress 7.0

1.2.8

  • Fix: text domain changed to effortless-ai-assistant throughout all PHP files
  • Fix: replaced forbidden wp_get_sidebars_widgets() with get_option(‘sidebars_widgets’)
  • Fix: removed deprecated load_plugin_textdomain() call (WP 4.6+ auto-loads)
  • Fix: all non-prefixed template variables prefixed with elaia_
  • Fix: DB queries use registered $wpdb->elaia_conversations table property
  • Fix: Plugin URI updated from example.com placeholder to domclic.com
  • Fix: language files renamed to match effortless-ai-assistant text domain
  • Fix: Tested up to updated to 6.8; tags reduced to 5

1.2.7

  • Renamed plugin title to EffortLess AI Assistant

1.2.6

  • Refactor: all plugin identifiers renamed from wpai_ prefix to elaia_ — PHP constants (ELAIA_), options, hooks, transients, nonces, CSS classes (.elaia-), JS script handles, and the JS config object (elaiaConfig)

1.2.5

  • Security: External URL validation now uses a trusted-domain allowlist (Google, Maps, Facebook, Instagram, LinkedIn, X/Twitter, YouTube, WhatsApp, Telegram, TikTok, Pinterest, Yelp, TripAdvisor) instead of passing all external URLs unconditionally — filterable via wpai_trusted_external_hosts
  • Fixed: Valid internal links to category archives, tag pages, taxonomy terms, and nav-menu URLs were silently stripped because url_to_postid() cannot resolve archive URLs — the verified content index is now checked first, with url_to_postid() as a fallback only
  • Fixed: url_to_postid() DB queries inside strip_unverified_links() are now deduplicated — the same URL appearing N times in one response only queries the DB once
  • Fixed: Malformed URLs (e.g. http:///path) where wp_parse_url() cannot extract a hostname are now rejected instead of being passed as external
  • Fixed: Logged-in users now bypass the per-minute rate limit as well as the daily/monthly usage limits — the two limit functions were inconsistent
  • Fixed: home_url() was called twice in strip_unverified_links() on every request — now called once and reused

1.2.4

  • i18n: Added Traditional Chinese (zh_TW), Korean (ko_KR), and Japanese (ja) translations — all strings 100% translated

1.2.3

  • i18n: POT file regenerated from source — 19 new strings added from v1.1.4–v1.2.2 (widget position labels, nav menu, meta box, new error messages, etc.)
  • i18n: French (fr_FR), Spanish (es_ES), and Portuguese Brazil (pt_BR) translations fully updated and compiled
  • i18n: All languages now 100% translated with no missing msgstr entries

1.2.2

  • Added: Logged-in WordPress users bypass daily and monthly usage limits entirely
  • Improved: Internal URL verification now uses WordPress core url_to_postid() instead of the cached content index — deleted pages are caught immediately, no transient staleness
  • Fixed: Home URL always passes validation even though url_to_postid() returns 0 for the site root

1.2.1

  • Fixed: External URLs (Google Maps, phone, email, social media) are now always allowed through the link validator — only internal site URLs are checked against the content index
  • System prompt updated: AI may construct external service URLs (e.g. Google Maps from an address) but must never invent internal site page URLs
  • JS isVerifiedUrl() now uses URL hostname comparison so external links are never suppressed

1.2.0

  • Fixed root cause of hallucinated links: nav menu item URLs are no longer embedded in the AI context text, removing the URL pattern the AI was using to construct non-existent sub-page links
  • Context instruction updated: AI is told to use only the exact “Source:” URL shown above each content block, never to construct or guess URLs
  • Server-side link stripping (strip_unverified_links) now runs on both AJAX and streaming paths before any response leaves PHP
  • Nav menu item URLs and home_url() added to verified URL set; wp_template_part excluded
  • Trailing-slash normalization in both PHP and JS URL comparison

1.1.8

  • Fixed: AI-generated source links validated against content index client-side; unverified URLs show as plain text only
  • Bare URL auto-linking removed from the chat widget
  • System prompt instructs AI to cite only URLs that appear verbatim in the provided content

1.1.7

  • Fixed: address/contact info in block-theme template parts (footer, header) now always indexed automatically — no checkbox required
  • Fixed: Custom Post Types were missing from the content-type checklist when registered with show_ui:true but not fully public; list now uses show_ui:true as the filter
  • Added no_found_rows:true to the content index query for better performance on large sites
  • Settings description now reminds to click “Refresh Content Index” after changing post type selection

1.1.6

  • Fixed grey scrollbar track visible in textarea input (overflow-y now hidden by default, auto only when text exceeds max height)
  • Fixed send button showing an empty circle with no icon (SVG stroke now set via explicit CSS stroke property scoped under .wpai-chat-widget to survive theme overrides)

1.1.5

  • Content index now automatically includes all widget areas (sidebars, footer widgets) and navigation menus
  • Added wp_template_part and wp_template as selectable content types for block themes (indexes footer/header templates)
  • Settings page notes which content is always auto-included

1.1.4

  • Added WordPress Multisite Network support: when network-activated, settings are managed from the Network Admin dashboard only; per-site logs remain per-site
  • Network admin menu shows all plugin settings; individual sites show only the AI Chat Logs page
  • All plugin options route through get_site_option() when network-activated

1.1.3

  • Added widget position setting: choose any corner of the screen (bottom-right, bottom-left, top-right, top-left)
  • Chat window automatically opens upward for bottom corners and downward for top corners
  • Visual corner picker in Settings > Widget Settings

1.1.2

  • Added streaming responses via Server-Sent Events (SSE) using curl WRITEFUNCTION for real-time output
  • Added conversation history (last 5 exchanges kept in context for all providers)
  • Changed chat input from single-line to auto-resizing textarea (Shift+Enter for newline)
  • Added token usage tracking: all providers now return token counts, logged to DB
  • Added Total Tokens stat card on the logs admin page
  • Added Export Logs as CSV button on the logs admin page
  • Added per-page widget visibility: hide the chat widget on specific posts/pages via a meta box
  • Added nightly WP-Cron job to automatically rebuild the content index
  • Code: Full PHPCS WordPress standard compliance (zero errors, zero warnings)

1.1.1

  • Fixed security issue: IP detection now uses REMOTE_ADDR only (spoofable headers removed)
  • Fixed security issue: API key sanitization regex updated to allow dots and colons (Mistral, Ollama)
  • Fixed cache key mismatch in content index refresh
  • Fixed missing wp_die() after all wp_send_json_*() calls
  • Fixed build_content_index() called with incorrect argument count
  • Fixed off-by-one error in content chunk count
  • Fixed empty system prompt fallback
  • Code: Full PHPCS WordPress standard compliance (zero errors, zero warnings)
  • Code: Yoda conditions, strict in_array(), wp_unslash() on all $_GET reads
  • Code: All functions have PHPDoc blocks

1.0.0

  • Initial release
  • Support for Anthropic Claude and OpenAI ChatGPT
  • Customizable chat widget
  • Rate limiting protection
  • Full internationalization support