Title: Well, Actually&#8230;
Author: brento
Published: <strong>Agẹmọ  31, 2026</strong>
Last modified: Agẹmọ  31, 2026

---

Ṣàwárí àwọn plugin

![](https://ps.w.org/well-actually/assets/icon-256x256.png?rev=3629815)

# Well, Actually…

 Láti ọwọ́ [brento](https://profiles.wordpress.org/brento/)

[Ṣe ìgbàsílẹ̀](https://downloads.wordpress.org/plugin/well-actually.1.8.2.zip)

 * [Àwọn àlàyé](https://yor.wordpress.org/plugins/well-actually/#description)
 * [Àwọn àgbéyẹ̀wò](https://yor.wordpress.org/plugins/well-actually/#reviews)
 *  [Ìgbéwọlẹ̀](https://yor.wordpress.org/plugins/well-actually/#installation)
 * [Ìdàgbàsókè](https://yor.wordpress.org/plugins/well-actually/#developers)

 [Ìrànlọ́wọ́](https://wordpress.org/support/plugin/well-actually/)

## Àpèjúwe

“Well, Actually…” turns your archive of blog posts into a Tinder-style knowledge
game. Mark any post with a one-line “Swipe Statement” and a True/False/Debatable
verdict, and visitors at your chosen URL (default `/swipe`) will see it full screen.
They swipe right to agree, left to disagree, or up if theyÌtumọ̀ Yorùbá: ’re not
sure. Get it wrong — or arenÌtumọ̀ Yorùbá: ’t sure — and theyÌtumọ̀ Yorùbá: ’ll 
see the post that explains why.

Progress is tracked locally for anonymous visitors and synced to their account when
logged in, so their score follows them.

The swipe page also includes configurable social sharing metadata. Pick its preview
title, description, and image under Settings  “Well, Actually…” so links shared 
on social networks and messaging apps look intentional.

Because the focused swipe template does not inherit analytics from your theme, it
can optionally add a Google tag, Meta Pixel, or LinkedIn Insight Tag directly. All
three are off until you enter an ID.

### External Services

By default, activating the plugin and playing the public swipe game do not contact
an external service. Administrators can optionally configure page-view tags for 
Google, Meta, or LinkedIn under Settings  “Well, Actually…”  Analytics and advertising.
Blank fields load nothing.

**Optional tracking services**

When configured, the selected tags load when a visitor opens the swipe page. Like
ordinary web requests, the providers can receive the page URL, IP address, browser
information, and referrer, and may set cookies or similar identifiers. The plugin
sends only each providerÌtumọ̀ Yorùbá: ’s standard page-view signal: it does not
send swipe answers, scores, post content, WordPress accounts, or custom events.

 * **Google tag:** loads `https://www.googletagmanager.com/gtag/js` and sends the
   standard Google tag page-view configuration. [Google Analytics Terms](https://marketingplatform.google.com/about/analytics/terms/us/)
   and [Google Privacy Policy](https://policies.google.com/privacy).
 * **Meta Pixel:** loads `https://connect.facebook.net/en_US/fbevents.js`, sends
   a `PageView` event, and provides the standard no-script fallback at `https://
   www.facebook.com/tr`. [Meta Business Tools Terms](https://www.facebook.com/legal/technology_terms)
   and [Meta Privacy Policy](https://www.facebook.com/privacy/policy/).
 * **LinkedIn Insight Tag:** loads `https://snap.licdn.com/li.lms-analytics/insight.
   min.js` and provides the standard no-script fallback at `https://px.ads.linkedin.
   com/collect/`. [LinkedIn Ads Agreement](https://www.linkedin.com/legal/sas-terms)
   and [LinkedIn Privacy Policy](https://www.linkedin.com/legal/privacy-policy).

Site owners are responsible for configuring consent tools and privacy disclosures
appropriate for their visitors. Developers can return `false` from the `wellactually_tracking_allowed`
filter to suppress every configured tag for a request.

**Optional AI drafting service**

The optional “Draft with AI” feature sends post content to an external AI service.

**What is sent:** the postÌtumọ̀ Yorùbá: ’s title, plus either its manual excerpt(
if one exists) or up to the first 3,000 characters of the postÌtumọ̀ Yorùbá: ’s 
body as plain text (HTML and code blocks stripped). No reader data, user accounts,
or site credentials are ever sent.

**When it is sent:** post content is sent only when a logged-in administrator or
editor clicks “Draft with AI” on the Swipe Setup screen, and only for the posts 
queued in that run — nothing automatic, nothing on a schedule. Separately, when 
an administrator opens this pluginÌtumọ̀ Yorùbá: ’s settings or Swipe Setup screens,
the plugin asks the selected provider plugin whether itÌtumọ̀ Yorùbá: ’s configured;
depending on the provider, that check may involve a round-trip to the providerÌtumọ̀
Yorùbá: ’s API (no post content is included in it, and the result is cached briefly).

**Where it goes:** to the AI provider _you_ select and configure. This plugin does
not bundle or default to any vendor — it talks to whatever provider plugin the site
administrator has registered with the WordPress AI client (see the [WordPress AI documentation](https://make.wordpress.org/ai/))
and chosen in Settings  Well, Actually… Examples include Nano-GPT or any other AI-
client-compatible provider. You will generally need your own account and API key
with that provider.

**Terms and privacy:** because the destination is your chosen provider, its terms
of service and privacy policy govern the transfer — consult the documentation of
the provider plugin you install (for example, [Nano-GPTÌtumọ̀ Yorùbá: ’s terms](https://nano-gpt.com/legal/terms-of-service)
and [privacy policy](https://nano-gpt.com/legal/privacy-policy) if you choose Nano-
GPT). Review them before drafting content you consider sensitive.

**What comes back:** a suggested swipe statement and verdict, stored as a draft 
suggestion on the post. Nothing goes live until a human reviews and saves it.

## Àwọn àwòrán ìbòjú

[⌊The full-screen phone game: readers can Agree, Disagree, or choose Not sure.⌉⌊
The full-screen phone game: readers can Agree, Disagree, or choose Not sure.⌉[

The full-screen phone game: readers can Agree, Disagree, or choose Not sure.

[⌊A wrong answer reveals the verdict and the original post that explains it.⌉⌊A 
wrong answer reveals the verdict and the original post that explains it.⌉[

A wrong answer reveals the verdict and the original post that explains it.

[⌊The bulk Swipe Setup screen with filters, AI drafting, view counts, and page-wide
Skip or Never controls.⌉⌊The bulk Swipe Setup screen with filters, AI drafting, 
view counts, and page-wide Skip or Never controls.⌉[

The bulk Swipe Setup screen with filters, AI drafting, view counts, and page-wide
Skip or Never controls.

[⌊The Reports scoreboard shows total swipes and right and wrong percentages for 
every card in the deck.⌉⌊The Reports scoreboard shows total swipes and right and
wrong percentages for every card in the deck.⌉[

The Reports scoreboard shows total swipes and right and wrong percentages for every
card in the deck.

## Ìgbéwọlẹ̀

 1. Upload the plugin to `/wp-content/plugins/well-actually` or install via the Plugins
    screen.
 2. Activate the plugin.
 3. Visit Settings  “Well, Actually…” to set the swipe page slug (default `swipe`).
 4. Edit any post and fill in the “Swipe Statement” and verdict fields to add it to
    the deck.
 5. Send visitors to `yoursite.com/swipe`.

The optional “Draft with AI” feature uses the AI client APIs that ship in WordPress
7.0, which is why thatÌtumọ̀ Yorùbá: ’s the minimum version. It also needs an AI
provider plugin (any provider registered with the WordPress AI client works, including
Nano-GPT) configured with your own API key — see External Services below for exactly
what gets sent where.

## FAQ

### Do I need an AI provider account?

No. The whole game works without one — you write Swipe Statements by hand. An AI
provider only comes into play if you use the optional “Draft with AI” button on 
the Swipe Setup screen to generate suggested statements for your review.

### Which posts show up in swipe mode?

Any published post with both a Swipe Statement and a verdict (True, False, or Debatable)
set.

### Does this work with page caching?

Yes — the swipe page itself can be cached, but all game state (deck contents, scoring)
comes from REST endpoints marked non-cacheable.

### What counts as “correct” on a Debatable statement?

Any answer (agree, disagree, or not sure) counts as correct, but the post is always
shown afterward since the nuance is the point.

### Does my score follow me between devices?

Only when youÌtumọ̀ Yorùbá: ’re logged in. Anonymous progress is stored in your 
browserÌtumọ̀ Yorùbá: ’s local storage; logging in merges it with your accountÌtumọ̀
Yorùbá: ’s saved progress.

### Can I see which statements fool the most readers?

Yes — the Posts list has a “Swipe stats” column showing the agree percentage and
total swipe count for each post in the deck.

### Can I control how the swipe page looks when someone shares it?

Yes. Under Settings  “Well, Actually…”  Social sharing, set the preview title, description,
and image. Blank text fields use built-in defaults, and a blank image uses the WordPress
site icon when one is available.

### Can I add analytics to the swipe page?

Yes. Under Settings  “Well, Actually…”  Analytics and advertising, enter a Google
tag ID, Meta Pixel ID, or LinkedIn Partner ID. The selected standard page-view tags
load only on the swipe page. Leave every field blank to load none of them.

## Àwọn àgbéyẹ̀wò

Kò sí àwọn àgbéyẹ̀wò fún plugin yìí.

## Àwọn Olùkópa & Olùgbéejáde

“Well, Actually…” jẹ́ ètò ìṣàmúlò orísun ṣíṣí sílẹ̀. Àwọn ènìyàn wọ̀nyí ti ṣe ìkópa
sí plugin yìí.

Àwọn Olùkópa

 *   [ brento ](https://profiles.wordpress.org/brento/)

[Túmọ̀ “Well, Actually…” sí èdè rẹ.](https://translate.wordpress.org/projects/wp-plugins/well-actually)

### Ṣe o nífẹ̀ẹ́ sí ìdàgbàsókè?

[Ṣàwárí koodu](https://plugins.trac.wordpress.org/browser/well-actually/), ṣàyẹ̀wò
[ibi ìpamọ́ SVN](https://plugins.svn.wordpress.org/well-actually/), tàbí ṣe àgbékalẹ̀
sí [àkọsílẹ̀ ìdàgbàsókè](https://plugins.trac.wordpress.org/log/well-actually/) 
nípasẹ̀ [RSS](https://plugins.trac.wordpress.org/log/well-actually/?limit=100&mode=stop_on_copy&format=rss).

## Àkọsílẹ̀ àwọn àyípadà

#### 1.8.2

 * Add optional Google tag, Meta Pixel, and LinkedIn Insight Tag settings for measuring
   swipe-page visits.
 * Tracking is disabled by default and no provider loads until its ID is configured.
 * Document the data each optional tag can send, link to provider terms and privacy
   policies, and add the configured services to WordPressÌtumọ̀ Yorùbá: ’s suggested
   privacy-policy text.

#### 1.8.1

 * Add configurable social-sharing preview title, description, and image for the
   swipe page.
 * Require per-post edit permission before AI drafting can queue or process a post.
 * Match the WordPress.org `well-actually` text domain and translation catalog name.
 * Update Nano-GPTÌtumọ̀ Yorùbá: ’s Terms of Service and Privacy Policy links.

#### 1.8.0

 * Internal rename, no change to how the plugin works. Everything the plugin owns
   behind the scenes — its settings, its database tables, the data stored against
   each post, and the names other plugins can hook into — moved from the two-letter“
   wa” prefix to the full “wellactually” one, because WordPress.org asks plugins
   to use a name that canÌtumọ̀ Yorùbá: ’t collide with anyone elseÌtumọ̀ Yorùbá:’
   s.
 * Upgrading carries your data across automatically the first time the site loads
   after the update: settings, swipe statements and verdicts, swipe scores, AI drafts
   still waiting for review, and every playerÌtumọ̀ Yorùbá: ’s saved progress. Nothing
   to click, and it only runs once.
 * Also renamed: the script and style handles (`wa-swipe` is now `wellactually-swipe`,
   and the admin ones are `wellactually-admin-*`) and the pluginÌtumọ̀ Yorùbá: ’
   s JavaScript globals (`waSwipe` is now `wellactuallySwipe`, and the same for 
   the rest). These were never documented as a public API, so nothing supported 
   depends on them — but if you wrote custom JavaScript against the swipe page, 
   or dequeued an asset by handle, those references need the new names.
 * If you (or a developer) hook into this pluginÌtumọ̀ Yorùbá: ’s actions and filters,
   theyÌtumọ̀ Yorùbá: ’ve been renamed too. The full list: `wa_activate` is now `
   wellactually_activate`, `wa_ai_available` is `wellactually_ai_available`, `wa_ai_concurrency`
   is `wellactually_ai_concurrency`, `wa_ai_pre_draft` is `wellactually_ai_pre_draft`,`
   wa_ai_system_instruction` is `wellactually_ai_system_instruction`, `wa_debug_setup`
   is `wellactually_debug_setup`, and `wa_min_swipes_for_stat` is `wellactually_min_swipes_for_stat`.
   The old names no longer fire.
 * Fix: “Needs to be set up” now verifies every candidate against the postÌtumọ̀
   Yorùbá: ’s current verdict, skip flag, and AI state before counting or displaying
   it. This final check bypasses cached query results and the denormalized status
   index, so an already-configured or excluded post cannot appear in that view—or
   be sent back through Draft with AI—even if a hosting cache serves an obsolete
   candidate list.
 * Remove the confusing “X% of readers agreed” line from the post-reveal overlay.
 * Add an author dropdown to the bulk swipe setup screen. The selection applies 
   to every status view and to Draft with AI.
 * Add page-wide Skip for Now and Never checkboxes to the setup grid, while keeping
   every row individually adjustable before saving.
 * Show each postÌtumọ̀ Yorùbá: ’s author beside its date in the setup grid.
 * Add JetpackÌtumọ̀ Yorùbá: ’s “Views: 30 days” figures to the setup grid, with
   ascending and descending popularity sorting.
 * Fix stale JavaScript and CSS after plugin updates on hosts with long-lived static-
   file caches. Asset URLs now change whenever their file changes, so new page markup
   cannot be paired with an older cached script.

#### 1.7.0

 * You can now edit the instructions sent to the AI, under Settings  “Well, Actually…”
   Drafting instructions, so statements can be written in your own voice and for
   your own subject matter. Leave it blank to use the wording the plugin ships with,
   which is shown in the box as a starting point. The technical bit that tells the
   AI how to format its reply is added automatically and isnÌtumọ̀ Yorùbá: ’t part
   of what you edit, so rewriting the instructions canÌtumọ̀ Yorùbá: ’t stop drafts
   being saved.
 * Fix: asking to draft a given number of posts could quietly draft fewer — ask 
   for 100 and get 53. Posts still held by an earlier drafting run (a tab closed
   mid-run, or a run stopped by a rate limit) were skipped, and those skips came
   straight off the total instead of being made up from the thousands of other eligible
   posts. It now keeps looking until the batch is full. Posts that failed to draft
   in the past were never the cause; theyÌtumọ̀ Yorùbá: ’ve always been eligible
   to try again.
 * Work left behind by an abandoned drafting run is now released after 15 minutes
   rather than an hour, so it stops holding those posts back sooner.
 * Fix: “0 suggestions ready to review” no longer appears on the “Well, Actually…”
   screen when thereÌtumọ̀ Yorùbá: ’s nothing to review.

#### 1.6.1

 * If your AI provider refuses a request for being too frequent (a “Too Many Requests”
   rate limit), drafting now stops the whole run straight away and tells you: “Your
   AI provider said youÌtumọ̀ Yorùbá: ’re sending too many requests at a time, so
   we stopped here. Try again later.” Previously each post would fail separately
   and be recorded as a drafting error, so a rate limit looked like a batch of broken
   posts.
 * Posts caught by a rate limit arenÌtumọ̀ Yorùbá: ’t marked as failed — nothing
   about them was wrong. They stay queued, so clicking Draft with AI again picks
   up exactly where it stopped once the limit has passed.
 * If the rate limiting is coming from drafting too many at once, lower “Parallel
   requests” under Settings  “Well, Actually…”.

#### 1.6.0

 * New Reports tab under Settings  “Well, Actually…”. Lists every post currently
   in the swipe deck with its swipe headline, the right answer, how many times itÌtumọ̀
   Yorùbá: ’s been swiped, and what percentage of players got it right and wrong.
   Post titles link through to the live post.
 * Sort the report by swipes, % right, or % wrong by clicking those column headings.
   Posts nobody has swiped yet sort to the bottom of the percentage columns rather
   than crowding the top with blanks.
 * Quick Edit on each row, like the Posts list: change the swipe headline and the
   right answer inline and save without leaving the page. Paginated 20 at a time.
 * Fix: on narrow phones the Agree button wrapped onto its own line. The three answer
   buttons now share one row at any phone width, with the label size scaling to 
   fit.

#### 1.5.0

 * Swipe left or right on the reveal card to carry on, instead of reaching for the
   Continue button. The button still works, and vertical swipes still scroll a long
   reveal rather than dismissing it.
 * Remove the control hints under the swipe buttons — the buttons already say what
   they do.
 * In that space, cards now show how many players got them wrong (“80% got this 
   one wrong”) while the statement is still up, before you answer. It appears once
   a card has at least 5 swipes recorded, so a single answer canÌtumọ̀ Yorùbá: ’
   t produce a misleading “100%”, and never on Debatable cards — they have no wrong
   answer, and a figure there would give the verdict away. Developers can change
   the threshold with the `wellactually_min_swipes_for_stat` filter (named `wa_min_swipes_for_stat`
   before 1.8.0).
 * That figure costs one extra database lookup per batch of 20 cards, against a 
   table indexed by post, so it doesnÌtumọ̀ Yorùbá: ’t measurably affect how quickly
   the quiz loads.

#### 1.4.4

 * Fix: posts could appear under the wrong filter on the “Well, Actually…” screen—
   most visibly, posts with “Never” already ticked showing up under “Needs to be
   set up”. Each post carries a summary of its state that those filters sort on,
   and if that summary was ever written incorrectly (see 1.4.2 for how that could
   happen), the post stays in the wrong list indefinitely: the filters read the 
   summary, so nothing that reads them can spot the mistake. Every mismatched post
   is now corrected automatically on update, whatever the cause.
 * Add a “Rebuild status index” button under Settings  “Well, Actually…”  Diagnostics.
   It rechecks every post and repairs any that are filed wrongly, so this is fixable
   on the spot rather than waiting for a plugin update. Safe to run whenever.

#### 1.4.3

 * Fix: saving a page of posts could land you back on the same screen with the same
   posts still listed, as though the save hadnÌtumọ̀ Yorùbá: ’t happened — even 
   though it had. After saving, the screen asked the database which posts still 
   needed attention, and on managed hosting that question can be answered by a database
   copy that hasnÌtumọ̀ Yorùbá: ’t caught up yet, which truthfully replies with 
   the posts you just dealt with. No amount of adjusting the query could fix that,
   because the updated information genuinely isnÌtumọ̀ Yorùbá: ’t visible to it 
   yet. The screen no longer asks: the save already knows which posts it handled,
   and passes that list forward so theyÌtumọ̀ Yorùbá: ’re hidden on the page you
   land on. It applies to that one page load only, and only to the view you were
   working in, so those posts still appear normally under “All posts” or whichever
   status they moved to.

#### 1.4.2

 * Fix: the “Draft with AI” panel could report suggestions ready to review while
   the “Has AI suggestions” grid showed no posts at all, leaving drafts stranded
   with no way to reach them. Existing stranded suggestions are repaired automatically
   on update — theyÌtumọ̀ Yorùbá: ’ll be waiting on that screen after you upgrade.
 * The underlying cause: after saving a suggestion, the plugin immediately re-read
   the value it had just written in order to update a summary field used by the 
   filters. On managed hosting that read can be served from a database replica that
   hasnÌtumọ̀ Yorùbá: ’t caught up, returning the _previous_ value — and the wrong
   answer was then saved. The summary field said “needs setup” while the suggestion
   really was ready, and because the grid searched on that field, the post could
   never appear (so nothing could notice or repair it either). Those writes no longer
   re-read what they just wrote, and the grid now searches the suggestionÌtumọ̀ 
   Yorùbá: ’s own status, which is the field that actually decides whether a draft
   is reviewable.
 * The count in the panel and the grid below it now use identical rules — same handling
   of skipped posts, posts already set up, and skipped categories — so they canÌtumọ̀
   Yorùbá: ’t disagree.
 * Remove the row-by-row verification the setup screen ran on every page load. It
   compared two separately-read values and discarded rows whenever they disagreed,
   which is what emptied the screen after a bulk save in 1.3.x and again after AI
   drafting. A briefly out-of-date row is normal and corrects itself; a blank screen
   doesnÌtumọ̀ Yorùbá: ’t.

#### 1.4.1

 * Fix a set of race conditions in 1.4.0Ìtumọ̀ Yorùbá: ’s parallel drafting, found
   in code review. Drafting work is now tracked in its own small database table 
   instead of post meta. Post meta has no way to enforce “only one drafting run 
   may hold this post”, so every check-then-write left a gap; a table can enforce
   it outright, and each change of state is now a single conditional statement that
   either wins or doesnÌtumọ̀ Yorùbá: ’t.
 * Fix: starting a second drafting run while one was in progress could take over
   posts the first run was actively drafting — paying for the same post twice and
   letting the two results overwrite each other. A run can no longer touch another
   runÌtumọ̀ Yorùbá: ’s posts.
 * Fix: the recovery sweep for interrupted runs could overwrite a suggestion that
   had just been saved, reverting finished work and drafting it again. Recovery 
   now only reclaims a post if nothing has happened to it since, and a request that
   lost ownership while running discards its result instead of overwriting the newer
   one.
 * Fix: two drafting runs (two browser tabs, or two people) drew from the same pool
   and consumed each otherÌtumọ̀ Yorùbá: ’s work, so each reported nonsense progress.
   Each run now owns its own set of posts.
 * Fix: failed requests could display impossible progress such as “Done — -5 drafted”.
   Successes, provider errors and unconfirmed requests are now counted separately
   and never subtracted from one another, and a run only reports “Done” when the
   server confirms no work is left — otherwise it says how much remains and invites
   you to resume.
 * Fix: the “Parallel requests” limit was only enforced per browser tab, so several
   tabs could multiply it and overload the provider (and the siteÌtumọ̀ Yorùbá: ’
   s PHP workers). The ceiling is now enforced site-wide; requests over it are told
   to wait briefly and retry rather than failing.
 * An interrupted run can be resumed by clicking Draft with AI again, picking up
   exactly the posts it didnÌtumọ̀ Yorùbá: ’t finish. Runs abandoned for an hour
   release their posts automatically.

#### 1.4.0

 * Drafting with AI is several times faster. Nearly all of the time was spent waiting
   on the AI provider — about 2.2 seconds per post, of which under 10 milliseconds
   was this plugin — and posts were being sent one at a time. Several are now drafted
   at once: in testing, 10 posts went from roughly 22 seconds to under 6.
 * Add a “Parallel requests” setting (Settings  “Well, Actually…”, default 5) controlling
   how many posts are drafted simultaneously. Lower it if your provider starts rejecting
   requests for arriving too quickly. Going much above 5 gave little further gain
   in testing — the provider becomes the limit.
 * Posts are now handed to workers with an atomic claim, so running several at once
   can never make two of them draft the same post and pay for it twice. If a batch
   is interrupted (tab closed, request times out), the posts it had claimed are 
   released back to the queue when you next start drafting.
 * Drop a redundant set of database queries that ran on every drafted post to recalculate
   counts the progress display never used while running.
 * Tip: the model matters as much as the settings here. In testing, google/gemini-
   3.5-flash averaged 2.2 seconds per post while openai/gpt-oss-120b averaged 7.3—
   over three times slower for the same one-line result.

#### 1.3.6

 * The diagnostic logging switch is now a checkbox under Settings  “Well, Actually…”
   Setup, instead of needing a line added to wp-config.php — which isnÌtumọ̀ Yorùbá:’
   t practical on managed hosting where that file isnÌtumọ̀ Yorùbá: ’t readily editable.

#### 1.3.5

 * Fix, for real this time: the empty “No posts match this filter” screen after 
   saving a page. The previous two attempts both assumed the stale data came from
   WordPressÌtumọ̀ Yorùbá: ’s query cache, and neither held up. The deeper problem
   is that this screen finds rows with a database query but double-checks each one
   against freshly-read post meta — and on managed hosting those two can legitimately
   disagree for a while after a save, because reads may be served by a database 
   replica that hasnÌtumọ̀ Yorùbá: ’t caught up yet. When every row on the page 
   was affected, the check discarded all of them and left an empty screen under 
   an accurate, non-zero count. The page is no longer whatever a single query returned:
   it now scans forward past any rows that donÌtumọ̀ Yorùbá: ’t hold up until it
   has assembled a full page, so stale data costs an extra lookup instead of an 
   empty screen — whatever the cause.
 * Add opt-in diagnostics for that screen: when enabled, each page load logs how
   many rows were examined, how many had out-of-date status information, how many
   were shown, and the total — so this can be diagnosed from real numbers instead
   of guesswork.
 * Skipping a category now skips its child categories too, at every level. Checking
   a parent on Settings  “Well, Actually…”  Categories ticks and locks everything
   beneath it, and the exclusion is expanded server-side, so child categories created
   later are covered automatically without having to revisit the setting.

#### 1.3.4

 * Fix: drafting could quietly use a completely different model than the one shown.
   Asking the WordPress AI client for a model is only a _preference_ — it first 
   narrows to models whose published capabilities cover what the prompt needs, and
   because drafting asks for a JSON-schema response, any model that doesnÌtumọ̀ 
   Yorùbá: ’t advertise structured output gets dropped and the client silently substitutes
   another one. ThatÌtumọ̀ Yorùbá: ’s how a request for openai/gpt-5-nano ended 
   up being served by an unrelated model. The configured model is now pinned, so
   the model named on screen is the model that actually runs.
 * Models that donÌtumọ̀ Yorùbá: ’t support schema-enforced JSON are no longer shut
   out: drafting simply omits the schema for them and asks for JSON in the prompt
   instead, which the tolerant response parser already handles. So your chosen model
   is used either way.
 * Add an up-front note, on both Settings  “Well, Actually…” and the Draft with 
   AI panel, when the selected model doesnÌtumọ̀ Yorùbá: ’t advertise schema-enforced
   JSON — drafting will still work, but results are less consistent, and itÌtumọ̀
   Yorùbá: ’s better to know while picking the model than after running a batch.
   If support canÌtumọ̀ Yorùbá: ’t be determined, nothing is shown rather than guessing.

#### 1.3.3

 * Fix: the empty “No posts match this filter” screen after saving, properly this
   time. The 1.3.2 fix invalidated WordPressÌtumọ̀ Yorùbá: ’s cached query results
   on every status change, but that only helps if the invalidation is seen immediately—
   on managed hosting it isnÌtumọ̀ Yorùbá: ’t, which is why the screen would right
   itself on its own after roughly 30-60 seconds (the cache entryÌtumọ̀ Yorùbá: ’
   s own lifetime). Rather than depending on any hostÌtumọ̀ Yorùbá: ’s invalidation
   timing, the “Well, Actually…” screen and the AI candidate picker now always read
   live from the database. Both are small, already-indexed queries, so thereÌtumọ̀
   Yorùbá: ’s no meaningful cost — and it means a save is reflected on the very 
   next page load, every time.
 * Fix: post titles and excerpts could show raw HTML entities (“There’s a Bug…” 
   instead of “ThereÌtumọ̀ Yorùbá: ’s a Bug…”) on the swipe cards, the reveal card,
   and the setup screen. WordPress hands back titles and excerpts already HTML-encoded,
   and both the game and the admin screen were then escaping them a second time.
   All post text is now decoded once before display, and swipe statements are shown
   decoded when editing too, so what you type is what gets stored.

#### 1.3.2

 * Fix: saving a page of the “Well, Actually…” screen and landing back on the same
   filtered view could show “No posts match this filter” even though the post count
   at the top was correct and nonzero. On sites with a persistent object cache (
   common on managed hosting), WordPress caches a queryÌtumọ̀ Yorùbá: ’s matching
   post IDs and only invalidates that cache when a post itself changes — not when
   post meta does, which is all our status field is. Saving changed the meta but
   left the cached ID list stale, so the very next page load re-served the posts
   that were _just_ handled; this pluginÌtumọ̀ Yorùbá: ’s own stale-status safety
   net then (correctly) recognized every one of them as no longer belonging and 
   dropped them all, emptying the page. Every place that changes a postÌtumọ̀ Yorùbá:’
   s swipe status now also invalidates that cache, so the next query is always fresh.

#### 1.3.1

 * On the “Well, Actually…” screen, add “Date modified” and “Comment count” as sort
   options alongside “Date published” — all three are indexed core columns, so they
   stay cheap even on a large archive.
 * Speed up Draft with AI: send far less post text per request (30,000 characters
   down to 3,000), prefer a postÌtumọ̀ Yorùbá: ’s manual excerpt when it has one
   instead of its full content, and drop code samples entirely before building the
   prompt — none of that helps pick a one-line true/false/debatable statement, and
   smaller requests mean faster drafts.

#### 1.3.0

 * Rebrand: the plugin now displays on-screen as “Well, Actually…” everywhere (Plugins
   list, admin screens, share text). No change to the pluginÌtumọ̀ Yorùbá: ’s internal
   slug, files, or database keys.
 * Rename the Posts submenu screen (formerly “Well Actually Setup”) to just “Well,
   Actually…”.
 * Add category exclusion: Settings  “Well, Actually…”  Categories lists every category(
   with parent/child indenting and post counts) with a “Skip This Category” checkbox.
   Skipped categories’ posts are hidden from every status view on the “Well, Actually…”
   screen and are never offered to AI drafting.
 * Settings  “Well, Actually…” is now a tabbed page: Setup, Categories, and a new
   Errors tab listing AI drafting failures from the last 7 days (with the post title,
   error message, and a link to fix it) — previously a failed draft was silently
   discarded with no way to see why.
 * Fix: the “AI error” chip on the “Well, Actually…” screen looked clickable (cursor
   changed to a question mark) but did nothing. ItÌtumọ̀ Yorùbá: ’s now a real link
   to the new Errors tab.
 * Fix: a denormalized status value could go stale and let an already-configured
   post linger in the “Needs to be set up” filter (or a similar mismatch in the 
   other status filters). Each filtered page of results now double-checks its own
   rows against the postÌtumọ̀ Yorùbá: ’s actual verdict/AI-status/skip meta and
   self-corrects any mismatch — bounded to one page of results, so it stays cheap
   at archive scale.
 * Fix: clicking “Draft with AI” without an explicit model chosen in this pluginÌtumọ̀
   Yorùbá: ’s settings would fail outright on providers (like Nano-GPT) that reject
   a request with no model at all, even when the site owner had already picked a
   default model in that providerÌtumọ̀ Yorùbá: ’s own settings. It now asks the
   provider for its published default model first.
 * Rename: “Needs setup”  “Needs to be set up”, “Skipped”  “Skipped for Now”, and
   the “Skip” column header  “Skip for Now”, for clarity.
 * Fix: the site name in the share-your-score text could show a raw HTML entity (
   e.g. “Brent’s Blog”) instead of an apostrophe. WordPressÌtumọ̀ Yorùbá: ’s get_bloginfo(‘
   name’) returns HTML-entity-encoded text even without asking for it, and the frontend
   was escaping it a second time.
 * Fix: a literal double-quote character in the share text (from the new “Well, 
   Actually…” branding) could break the share text box and corrupt the markup after
   it — the frontendÌtumọ̀ Yorùbá: ’s HTML-escaping helper wasnÌtumọ̀ Yorùbá: ’t
   escaping quote characters, only the ones unsafe in plain text.
 * The share-score prompt now includes a link back to the quiz so whoever itÌtumọ̀
   Yorùbá: ’s shared with can play, and appears every 20 swipes in addition to the
   end-of-deck screen, so players who donÌtumọ̀ Yorùbá: ’t finish a (large) deck
   still get invited to share.
 * Hardened the reveal cardÌtumọ̀ Yorùbá: ’s Continue button against a first-tap-
   does-nothing issue some players hit — it now also responds to the pointer-down
   that starts a tap/click, rather than waiting on the full click event alone.

#### 1.2.4

 * Fix: Well Actually Setup (and the Posts list filter behind it) could still take
   many seconds — or time out — on a large archive, even after the 1.2.3 caching
   fix. The “Needs setup” / “Has AI suggestions” / “In swipe deck” views were built
   from a meta_query spanning three separate post-meta keys with NOT EXISTS branches
   on each, which at real archive scale (thousands of posts, tens of thousands of
   postmeta rows once other plugins’ data is counted) required several joins across
   the entire postmeta table — measured at 6.6 seconds for a single query against
   a 3,000-post/50,000-row test table, versus 7 milliseconds for an equivalent single-
   key lookup. Replaced it with one denormalized status field, recomputed automatically
   whenever a postÌtumọ̀ Yorùbá: ’s verdict, AI suggestion, or skip flag changes,
   cutting that same query to well under a tenth of a second. Existing sites are
   migrated automatically the first time any admin page loads after updating — no
   action needed.

#### 1.2.3

 * Rename the Posts submenu screen from “Swipe Setup” to “Well Actually Setup.”
 * Fix: opening that screen (and Settings  WellActually) could take tens of seconds
   because checking whether an AI provider is configured can involve a live round-
   trip to the provider (e.g. validating the key or checking account balance) — 
   some providers do this on every check. That check is now cached for 5 minutes
   and cleared immediately whenever you save settings, so only the first load after
   a change pays the cost.

#### 1.2.2

 * Add a “Settings” quick link to this pluginÌtumọ̀ Yorùbá: ’s row on the Plugins
   list page.

#### 1.2.1

 * Fix: a failed swipe request (network hiccup, expired nonce, rate limit) no longer
   records a wrong answer and skips the card — progress is left untouched and the
   same card stays up to retry.
 * Fix: on a slow connection, running out of the current 20-card batch no longer
   shows the final score screen early; the app waits for the next batch (or a confirmed
   empty result) before deciding.
 * Fix: merging progress across devices no longer resurrects a card as “wrong” when
   it was corrected on another device or the server.
 * Fix: the swipe page now actually outputs a noindex robots meta tag (the filter
   was registered but never rendered).
 * Fix: the reveal cardÌtumọ̀ Yorùbá: ’s keyboard focus trap no longer strands keyboard/
   screen-reader users on the Continue button — Tab and Shift+Tab now cycle through
   the post links too.
 * Fix: long reveal cards can now be scrolled with one-finger touch on small screens
   instead of getting stuck.

#### 1.2.0

 * AI drafting: send needs-setup posts to a configured AI provider (via WordPress
   7Ìtumọ̀ Yorùbá: ’s AI client) to draft a swipe statement and verdict for your
   review. Pick the provider and model in Settings  WellActually; works with any
   registered provider, including Nano-GPT.
 * On Swipe Setup, a “Draft with AI” panel queues a batch (default 10, respects 
   the category filter) and drafts them in the background with live progress. Drafts
   appear under a new “Has AI suggestions” filter, pre-filled for review — nothing
   goes live until you Save it.
 * New per-post “Skip for now” checkbox: set a post aside (out of the deck and the
   review lists) without deleting its statement, verdict, or AI suggestion. Distinct
   from the permanent “Never” exclude. A “Skipped” filter lists them.

#### 1.1.0

 * New “Swipe Setup” screen (Posts  Swipe Setup) for configuring many existing posts
   at once: filter by status (needs setup / in deck / excluded / all), category,
   and date; edit the statement and verdict inline, or mark a post as never getting
   a swipe setup; save a whole page at once.
 * Posts can now be explicitly excluded from swipe mode (e.g. personal news), separate
   from “not set up yet.”
 * Posts list gains “Needs setup” and “Excluded” filters.

#### 1.0.0

 * Initial public release: full swipe mode experience, meta box, aggregate stats,
   anonymous + logged-in progress tracking, replay mode.

## Àkójọpọ̀ Meta

 *  Ẹ̀yà **1.8.2**
 *  Ìgbàgbọ́hùn tó kẹ́yìn **oṣù 1 sẹ́yìn**
 *  Àwọn ìgbéwọlẹ̀ tó ṣiṣẹ́ **Tó kéré sí 10**
 *  Ẹ̀yà WordPress ** 7.0 tàbí ju bẹ́ẹ̀ lọ **
 *  Dánwò dé **7.0.4**
 *  Ẹ̀yà PHP ** 7.4 tàbí ju bẹ́ẹ̀ lọ **
 *  Èdè
 * [English (US)](https://wordpress.org/plugins/well-actually/)
 * Àwọn àmì
 * [blog](https://yor.wordpress.org/plugins/tags/blog/)[engagement](https://yor.wordpress.org/plugins/tags/engagement/)
   [gamification](https://yor.wordpress.org/plugins/tags/gamification/)[quiz](https://yor.wordpress.org/plugins/tags/quiz/)
 *  [Ìwòye Tó Péye](https://yor.wordpress.org/plugins/well-actually/advanced/)

## Àwọn ìbò

Kò sí ìwádìí tí a tíì fi ránṣẹ́.

[Your review](https://wordpress.org/support/plugin/well-actually/reviews/#new-post)

[Wo gbogbo àwọn àgbéyẹ̀wò](https://wordpress.org/support/plugin/well-actually/reviews/)

## Àwọn Olùkópa

 *   [ brento ](https://profiles.wordpress.org/brento/)

## Ìrànlọ́wọ́

Nǹkan wà tí o fẹ́ sọ? Ṣé o nílò ìrànlọ́wọ́?

 [Wo àpéjọ ìrànlọ́wọ́](https://wordpress.org/support/plugin/well-actually/)