35920fea07
The "No active/completed notes found" notice was already dismissible per-page-load (WP core's X button hides it), but pressing X only cleared 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 closed it stays closed across page loads until the flag is reset. MECHANICS - inc/wp-notes-display.php now checks get_user_meta(uid, 'wp_notes_dismissed_empty_<type>') before rendering and skips the notice render entirely when set. - New AJAX handler wp_ajax_wp_notes_dismiss_empty validates a nonce and the edit_posts capability, then writes the flag via update_user_meta(). type=active|completed; anything else 400s. - 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) and fires the AJAX call. The visual hide is still WP core's job. - 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. wp_delete_user removes them automatically. A UI button to reset dismissed notices is not built yet — flagged in the changelog as a future enhancement. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>