版本 3.0.1

发布于 2026-03-25

每个 TTSWP 版本的变更、改进和修复内容。 版本说明以英文发布。

新增

  • Bulk rename in Audio Library - rename old-format filenames (`mementor-ID-lang.mp3`) to use the current post title
  • Bulk download in Audio Library now creates a single zip file when multiple files are selected

已改进

  • Generated audio files now use the post title in the filename (e.g. `the-headline-14-en.mp3` instead of `mementor-14-en.mp3`). Existing audio is not affected
  • Comprehensive security hardening - added nonce verification, output escaping, input sanitization, and prepared statements across all admin pages and AJAX handlers
  • Settings import now validates option names against a whitelist to prevent unauthorized writes
  • Complete plugin cleanup on uninstall - all database tables, options, transients, and cron jobs are now properly removed
  • Deactivation now clears all scheduled cron events to prevent orphaned tasks
  • Cron scheduling moved out of class constructors to reduce overhead on frontend page loads
  • Infrequently used options (DB versions, timestamps) no longer autoload on every request
  • All PHP files now include direct access protection
  • Removed duplicate AJAX handler registrations and dead code

已修复

  • Wrong text domain in several translation strings preventing proper localization
  • Audio player showing a "Generate Audio" button on posts that already have audio
  • Shortcode player rendering on the frontend even when no audio file exists
  • Auto-inserted player rendering with a pending state instead of being hidden when no audio is available
  • Frontend audio player now uses post meta as the authoritative source for audio URLs, preventing stale references after file renames
  • Duplicate AudioObject schema markup when multiple player instances exist on a page
  • Audio Library play counts now include today's events instead of only showing aggregated historical data
  • Regenerating audio with Media Library enabled deleted the newly saved file due to attachment cleanup race condition
  • Deleting audio from the post list now properly removes the Media Library attachment and physical file
  • Post list audio detection and deletion now uses post meta URLs instead of hardcoded filename patterns
  • Speech builder caching DELETE query results which could mask errors
  • N+1 database query in statistics page running SHOW TABLES inside a loop
  • Audio file saving now always uses WP_Filesystem API instead of falling back to raw PHP functions