# Changelog
All notable changes to **WP Logbook** (formerly **A-WP-Notes** through v3.1.0) are documented here.
Format: [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/) — versioning: [SemVer](https://semver.org/).
---
## [Unreleased]
---
## [3.2.0] — 2026-05-25
**Plugin rebrand: `A-WP-Notes` → `WP Logbook`.** Bundles the rename
with the About-page rewrite and the working Leave-Feedback form that
were sitting in the post-3.1.0 unreleased block.
The plugin's identity has shifted over the day's work — from a notes
pad to a work-logbook with time tracking, earnings, and a Wallet
tile on the v4 roadmap. "WP Notes" undersold what it had become and
collided semantically with WordPress's *notes-as-memos* connotation;
"WP Logbook" matches both the freelancer-proof-of-work use case
("logbook for clients") and the student-evidence-of-work use case
("logbook for teachers"), and matches the exact word the plugin's
own About-page intro had been using all day.
### Changed
- **Plugin Name** header: `A-WP-Notes` → `WP Logbook`.
- **Description** header rewritten from "A plugin to add your notes
to the WordPress dashboard with import/export functionality" to
*"A lightweight task & logbook plugin for WordPress. Log your
daily work, mark tasks done, and keep a tidy record inside the
dashboard. Perfect for freelancers showing clients what's been
delivered and students proving work to teachers."*
- **Version bumped** v3.1.0 → v3.2.0 (header + `WP_NOTES_VERSION`
constant).
- **Admin menu top-level** `WP Notes` → `WP Logbook`.
- **Admin sidebar submenu** `My Notes` → `My Log` (matches the
new parent name; reads cleanly as "WP Logbook → My Log").
- **Admin bar count menu** `WP Notes (N)` → `WP Logbook (N)`.
- **Dashboard widget** title `WP Notes` → `WP Logbook`.
- **Settings page H1** `WP Notes Settings` → `WP Logbook Settings`.
- **Main page H1** `WP Notes` → `WP Logbook`.
- **About page** every brand mention updated (intro card, "What WP
Logbook does" heading, "Go to My Log →" CTA on the side-by-side
intro that used to say "Go to WP Notes →").
- **About page version history** now leads with v3.2.0 (this
release) as `latest` and demotes v3.1.0 to the previous entry.
- **CPT `menu_name` label** `WP Notes` → `WP Logbook` (cosmetic
only; CPT is hidden from admin UI since the duplicate-form fix in
v3.1.0).
- **Migration notice text** "WP Notes needs to migrate…" → "WP
Logbook needs to migrate…".
- **Email-feedback subject** `[Site] WP Notes feedback from X` →
`[Site] WP Logbook feedback from X`. Body intro line same change.
- **Legacy feedback.php subjects** (`WP Notes Feedback` /
`WP Notes Help Request`) → `WP Logbook Feedback` /
`WP Logbook Help Request`. These render only if the unused legacy
feedback file is ever required-in; brought along for hygiene.
- **`error_log()` prefix** `[WP Notes]` → `[WP Logbook]`.
### Notably NOT changed (zero-migration commitment)
- **All internal function names** keep `wp_notes_*` prefix.
- **All constants** keep `WP_NOTES_*` names.
- **All DB option keys** (`wp_notes`, `wp_done_notes`,
`wp_notes_settings`, `wp_notes_migration_completed`,
`wp_notes_version`, `wp_notes_dismissed_empty_active|completed`)
stay as-is. **No data migration runs on upgrade.**
- **All `user_meta` keys** stay as-is.
- **Admin page slug** `wp-notes` stays — preserves bookmarks, the
admin-bar `#new-note` anchor, and the legacy
`?page=wp-notes-create` → `?page=wp-notes` redirect added in
v3.1.0.
- **Plugin text domain** `a-wp-notes` stays — would otherwise
invalidate any future translation files.
- **File and directory names** unchanged (`wp-notes.php`,
`inc/wp-notes-*.php`, `assets/wp-notes-banner.jpg`). The Gitea
repo `ranger/a-wp-notes-v3` is unchanged too — David can rename
it on the Gitea side separately if he wants.
The rename is **purely user-facing strings**. Existing installs see
the new name appear after a plugin file refresh, with zero behaviour
change. No re-activation needed.
### Changed — Leave Feedback form (more options, multi-select, wired to email)
The right-column "Leave Feedback" form on the About page has been
expanded from two radio buttons to **seven checkboxes** (users can
pick more than one), a new optional message textarea, and a submit
button that **actually does something** — it AJAX-posts to a new
WP handler that emails the site admin via `wp_mail()`.
**Form options (checkboxes — multi-select):**
- I have ideas to improve this plugin
- I need help with this plugin
- I found a bug
- I'd like to request a new feature
- I'd like to share my use case
- Just saying thanks 🍀
- Other
**Submission flow:**
1. Client-side: at least one checkbox OR a message is required;
otherwise an inline hint shows.
2. AJAX POST `wp_notes_submit_feedback` with topics[] + message +
nonce.
3. Server-side handler (`manage_options` capability + nonce checked)
sanitizes input, allow-lists the topic keys, then builds a plain-
text email and ships it to `get_option('admin_email')` via
`wp_mail()`. Reply-To is set to the submitting user's email so
the admin can reply directly.
4. Email body includes: sender (display name + email + WP login),
site URL, plugin version, the checked topics (pretty-labelled),
and the message.
5. Inline success message replaces the form on success; inline
error message lets the user retry on failure.
The old radio-button + broken `toggleSection('feedback-form-...')`
logic that pointed at non-existent IDs has been replaced entirely.
The `toggleSection()` helper is kept defined but is now genuinely
unused on the About page — flagged for removal in a future Tier-2
pass.
### Changed — About page rewritten (content + layout)
The About page (`Settings → WP Notes → About`) has been rewritten
from "wall of nested toggle boxes with outdated content" to
"readable cards with accurate content". The left column is now
three plain cards: **What WP Notes does**, **Who it's for**, and a
**Version history** that actually matches the current plugin
version.
What changed:
- **Removed two `` wrappers**
around the About and Version History sections. Users came to the
About page to read content — hiding it behind a toggle was
anti-UX.
- **"Version 2.0.3 (Current)"** entry was lying — the plugin is now
v3.1.0. Replaced the whole version section with a compact
accurate summary (v3.1.0 → v3.0.2 → v2.x → v2.0.0) plus a
prominent **"View the full CHANGELOG.md →"** link to the canonical
history on Gitea so the on-page summary doesn't have to be
exhaustive.
- **Removed redundant duplicate paragraphs** ("WP Notes is a
versatile plugin that caters to a wide range of users" appeared
twice in two lines).
- **Removed invalid HTML** — bare `
` outside `
`, `
`
wrapping `
`.
- **Removed buried banner image + Buy-Me-A-Coffee** that were
inside the (hidden-by-default) Version History toggle, never
seen by anyone. The banner already lives at the top of the page
in the side-by-side intro row; the support link already lives in
the right-column feedback card.
- **Dropped the "Teachers want progress with Email Notifications"
use-case** — email notifications aren't implemented in v3.x so
the claim was misleading.
- **Added three CSS card classes** (`.wp-notes-about-card`,
`.wp-notes-about-card--versions`) for visual rhythm with the
intro row above, plus styling for the version entries (latest
pill, monospace version labels).
The right-column feedback box is unchanged. `toggleSection()` is
also unchanged — still defined (no harm, used by the feedback
form's broken-since-forever submit handler which is its own
Tier 2 problem).
---
## [3.1.0] — 2026-05-25
A single-day UX polish + bug-fix release. Nine commits worth of
work, focused on the main "My Notes" admin page: stripping out
years of layout debt, tightening the menu structure, removing
duplicates, and adding the per-user persistent dismissal of the
empty-state notice. No data migration required; storage model
unchanged (notes still live in `wp_options`).
### Removed — Tools → My Notes shortcut (with backward-compatible redirect)
The "Tools → My Notes" admin menu shortcut has been removed. It
routed to a separate bare-bones form at `?page=wp-notes-create`
rendered by `wp_notes_create_page()` — a stripped-down create form
with no notes list, no styling, and no parity with the main page.
The shortcut was a third route to "create a note" duplicating the
two that already exist and work better:
1. **WP Notes → My Notes** in the admin sidebar (the proper page —
styled form + active/completed lists + edit + restore).
2. **Admin bar → WP Notes → New Note** quick-access (jumps to the
form on the main page via `#new-note` anchor).
**Backward-compat redirect:** anyone hitting the legacy
`?page=wp-notes-create` URL (stale bookmark, old email link, etc.)
is now `wp_safe_redirect()`-ed to `?page=wp-notes` via an
`admin_init` hook. No 404 / no "you do not have sufficient
permissions" page.
**Code removed:**
- `wp_notes_add_tools_menu()` registration (the `add_management_page`
call and its `add_action('admin_menu', ...)` hook).
- `wp_notes_create_page()` function body in full — the bare-bones
form renderer, no longer referenced anywhere.
### Added — Persistent dismissal of the empty-state notice (user_meta)
The "No active/completed notes found" notice was already
dismissible per-page-load, but pressing X only hid it for the
current view — it returned on the next refresh. The dismissal is
now persisted to **user_meta** per-user-per-list-type, so once you
close it, it stays closed until you reset the flag.
**Mechanics:**
- `inc/wp-notes-display.php` checks
`get_user_meta(uid, 'wp_notes_dismissed_empty_')` before
rendering and skips the notice entirely when set.
- `wp_ajax_wp_notes_dismiss_empty` (new handler in `wp-notes.php`)
validates a nonce + `edit_posts` capability, then writes the flag
via `update_user_meta()`. Accepts `type` of `active` or
`completed`; rejects anything else.
- An inline jQuery handler in `wp_notes_add_inline_scripts()` listens
for clicks on `.wp-notes-empty .notice-dismiss` (WP core's auto-
injected X button), reads the data-attributes off the notice, and
fires the AJAX call. WP core still handles the visual hide.
- The notice element carries `data-wp-notes-empty-type` and a fresh
per-render `data-wp-notes-nonce` for the round trip.
**Reset:** the flag is per-user-meta keyed
`wp_notes_dismissed_empty_active` /
`wp_notes_dismissed_empty_completed`. To make the notice reappear
for a user, an admin can clear those keys (or `wp_delete_user`
removes them automatically). A UI button to reset dismissed notices
is not built yet — flagged as a future enhancement if needed.
### Fixed — Duplicate "Create a New WP Note" form at the bottom of My Notes
A second, bare-bones *"Create a New WP Note"* form was being
rendered at the **bottom** of the My Notes page, below the active
and completed lists. The form at the **top** (the proper `Add New
Note` postbox with color/size/font/emoji controls) is the intended
one — the bottom one was a duplicate, redundant from a UX standpoint.
**Root cause:** WordPress registers BOTH the parent menu's callback
AND a submenu's callback against the same page hook when the two
share a `menu_slug`. When `?page=wp-notes` is requested, both fire
in registration order. The submenu was passing `wp_notes_create_page`
as its callback (a separate bare-form renderer used by the
Tools-menu shortcut), so its output was getting appended below the
main page.
**Fix:** the My Notes submenu now passes an **empty string** as the
callback — the standard WP pattern when a submenu just relabels the
parent (same slug, same target page). Only the parent's
`wp_notes_page_callback` renders now. The `wp_notes_create_page`
function is unchanged and still serves the Tools → My Notes
shortcut at `?page=wp-notes-create`.
### Fixed — Empty-state notice ("No notes found") now dismissible
The "No active notes found" / "No completed notes found" inline
notice on the My Notes page rendered with `class="notice notice-info"`
but no `is-dismissible` modifier, so WordPress's core common.js
never attached an X close button to it. Users couldn't clear the
message for the current view. Adding `is-dismissible` is the only
change — WP core handles the X button render + click-to-hide
automatically. Dismissal is per-page-load (the message reappears on
next refresh if the list is still empty); persistence across
reloads would need user_meta tracking and isn't built yet.
**Notice inventory after this fix** — every notice the plugin emits
is now both dismissible AND only fires in its intended state:
| Notice | Class | Fires when |
|---|---|---|
| "No active/completed notes found" | `notice notice-info is-dismissible` | List is empty |
| Migration prompt | `notice notice-info is-dismissible` | `wp_notes_migration_completed` option is unset |
| Settings save / import errors / import success | rendered by core `settings_errors()` (auto-dismissible since WP 4.2) | Only on form submission events |
### Changed — Removed duplicate smiley-face button on the emoji picker
The "Add emoji" formatting option rendered two clickable elements
stacked: the *"Click to add emoji"* text input AND a separate button
beside it with a smiley-face dashicon. Both opened the same dropdown
picker — visually duplicated and slightly confusing. The standalone
button has been removed; clicking the input itself still opens the
picker (the JS already wired both targets to the same handler).
Keyboard navigation (Enter/Space to toggle, Escape to close)
follows focus to the input instead of the now-gone button.
Orphaned `.emoji-picker-button` CSS rule deleted.
### Changed — Menu labels: "Create WP Note" → "My Notes", "About WP Notes" → "About"
- **"Create WP Note" submenu renamed to "My Notes"** (both in the WP
Notes parent menu and the Tools → quick-access shortcut). The page
is the central dashboard — create form + active list + completed
list + edit + restore — so "Create" was misleadingly narrow.
"My Notes" matches the WP-native `Posts → All Posts` pattern.
- **"About WP Notes" submenu renamed to just "About".** The WP Notes
brand is already carried by the parent menu, so the submenu can be
plain-spoken.
- **About page H1 trimmed** to match the Tier-1 style on the main
page: `
About
` + version chip instead of the old
*"Welcome to WP Notes About Page v3.0.2"* mouthful. Same
`wp-heading-inline` + `page-title-action` + `wp-header-end` recipe.
- Removed a redundant nested `
` with `display: none`
on the About page — it was dead markup leftover from an older
layout.
### Changed — Banner moved to About page (side-by-side intro)
- **Banner image removed from the Create-Note page.** It was the
first thing under the page title and took up significant vertical
space before the user even saw the textarea. The Create-Note page
is for *doing*, not for *reading-about*.
- **Banner added to the top of the About page** in a new
side-by-side row: banner image on the left (capped at 320px wide,
not full-bleed), and a short intro paragraph + "Go to WP Notes →"
CTA on the right. Stacks vertically on narrow screens via
`flex-wrap`. Lives inside its own `.wp-notes-about-intro` block so
it doesn't interact with the rest of the About page's nested
toggles.
- **`.wp-notes-header-banner` / `.wp-notes-banner-img` CSS removed**
from `wp-notes-styles.php` — no longer used.
### Changed — Tier 1 UX cleanup
Single pass through `wp_notes_page_callback()` to remove the layout
debt that had built up over previous releases. Functionality is
unchanged; the page is shorter, has one H1, and stops contradicting
itself.
- **Single H1** on the page — was five (`Welcome to WP Notes`,
`Welcome to WP Notes v3.0.2`, `About WP Notes`, `What WP Notes
Offers`, `What's New in WP Notes v3.0.2`). Now: just
`WP Notes` with the version chip alongside. Accessibility + SEO.
- **"Welcome / About" content** collapsed from THREE on-page
surfaces (a dismissible top notice + a nested toggle + a manual
"Show Welcome Message" button) down to a single one-line
description that links to the dedicated About page where the long
copy already lives.
- **Duplicate "Toggle Welcome Section" buttons removed.** Both
outer and inner toggle buttons had the **same label** but
different targets — genuinely confusing. Both gone.
- **"What's New v3.0.0" embedded changelog block removed.** It was
hard-coded to v3.0.0 while the plugin reports v3.0.2 — the embed
was lying. The real history lives in `CHANGELOG.md` now.
- **"Buy me a coffee" button moved from page header to page footer**
— promo content should not be the first thing under the page
title. Now sits at the bottom of the notes lists, centred, where
footer items belong.
- **Invalid HTML cleaned up** — `
` tags outside `
`, `
`
tags wrapping `
` / `
`. Was in the deleted welcome blob,
so resolved by removal.
- **Dead bulk-action UI removed** — both the per-row checkboxes and
the "Select all" header column in `wp_notes_display_notes()` and
`wp_notes_list_table()` were rendered but nothing acted on the
selection. Removed both, with an inline comment marking the spot
for when real bulk-actions get wired up. Edit-form colspan
adjusted (`6` → `4`) to match the new column count.
- **Inline `