Skip to content
WordPress.org

Kernewek

  • Themow
  • Plugins
  • News
  • A-dro
  • Get WordPress
Get WordPress
WordPress.org

Plugin Directory

PostFix

  • Submit a plugin
  • My favorites
  • Log in
  • Submit a plugin
  • My favorites
  • Log in

PostFix

By dipakbadaila78
Download
  • Details
  • Reviews
  • Installation
  • Development
Support

Description

PostFix by Dipak Badaila gives administrators precise control over existing post text and publication dates.

  • Dashboard with post counts and recent activity.
  • Paginated, server-side post search with status and post-type filters.
  • Literal, case-sensitive or case-insensitive search, with an optional whole-word / whole-number boundary.
  • Separate Title, Content and Excerpt selection.
  • Every editable occurrence has its own checkbox and highlighted text context.
  • Select or exclude all matches, then refine individual occurrences.
  • An empty replacement removes only selected text.
  • Server-generated preview and explicit confirmation before bulk writes.
  • Optional date update in the same replacement operation.
  • Current site time, custom local date/time, year-only changes, or unchanged dates.
  • Exact preservation of hours, minutes and seconds for year-only changes.
  • Gutenberg document settings panel and Classic Editor meta box.
  • Small, resumable batches; activity history, error details and recovery downloads.
  • Conflict-aware undo for the most recent saved operation.
  • Admin-only capabilities and nonce checks; scoped CSS and no frontend assets.
  • Translation-ready PHP/JavaScript and a complete POT template.
  • No API keys, external services, telemetry, build step or runtime dependencies.

Quick start

Smart Replace

Search for posts, select a page or individual posts, and continue selecting across pages. Enter Find and Replace with, choose the fields, and click Find Matches. Every result displays nearby text. Uncheck any occurrence that must stay unchanged. Click Preview Changes, review the before/after match contexts and per-post summary, then Confirm & Save Changes.

Preview is valid for 30 minutes. A saved post that changes between scan, preview and execution is skipped. After changing the search, fields, options or post selection, scan again. A change to the replacement or date requires a fresh preview.

Date Manager

Select posts, choose the date action and preview. All dates use the WordPress timezone shown on screen. “Current” captures time when the preview is created. A custom date can retain each post’s original time. Year-only mode always preserves month, day, hour, minute and second. Invalid leap days and ambiguous/nonexistent daylight-saving times are rejected.

PostFix does not change publication status to accommodate an incompatible date. Published posts cannot be moved into the scheduled range, and scheduled posts cannot be moved into the published range. When a date change would change the permalink (for example a /year/month/post-name/ structure), it is blocked. Use WordPress’s normal editing/publishing workflow when you intentionally want to change a URL or status.

In the editor

In Gutenberg, open the Post settings and expand PostFix. In Classic Editor, use the PostFix meta box. Find, select, preview, then Apply to editor. Highlights live in the PostFix panel; the writing canvas is not modified to insert highlighting markup.

Editor changes remain in the normal editing workflow. Use WordPress Save / Update to publish; WordPress autosave/revisions continue normally. The panel offers an immediate Undo editor change as long as the editor has not subsequently changed. Native editor undo is also available. These buffer edits are not bulk history entries. WordPress may normalize whitespace/markup when its editor reserializes blocks or Classic Editor HTML. Bulk operations in the PostFix workspace preserve unselected source bytes and use durable PostFix history and recovery.

History, interruption and undo

Confirmed operations run in batches of five posts. Keep the tab open until completion. If a connection fails or the tab closes, open History and choose Resume operation. A recovered write is compared to its stored intended result to avoid applying a replacement twice. Stop remaining work leaves already saved changes in place.

Undo Last Action is available for the latest operation that actually saved a post, for seven days, until another operation saves changes. Confirm undo in the dialog. Posts edited since the action are skipped to protect newer work. Undo restores content and published dates/status/slug from the snapshot; WordPress normally changes modified timestamps on this save. It cannot reverse emails, webhooks, cache purges or other effects triggered by another plugin’s save hooks.

History Details shows per-post outcomes and, while retained, a downloadable JSON recovery snapshot with the before and intended after fields. This is a manual recovery record, not an automatic import feature. If another plugin changes a post after a save hook, the result is reported for manual review rather than overwritten blindly.

Safety and scope

  • Only administrators with manage_options AND edit_post permission for the target may access or edit its data.
  • Replacement operates on visible text within individual HTML text segments. It does not match across tags. Entities are decoded for searching and mapped to original byte boundaries.
  • Only selected byte ranges are changed. HTML tags, attributes, Gutenberg comments and unselected text are not reserialized by the bulk replacement engine.
  • New replacement markup and shortcode brackets are escaped as literal visible text.
  • Link destinations, image attributes, code/preformatted regions, scripts, styles, SVG, MathML and shortcode syntax/bodies stay protected.
  • Common core blocks that store their text in saved HTML are supported, including current heading blocks that also have render callbacks. Other dynamic blocks, synced references, third-party block markup, block bindings and blocks containing the searched text in serialized settings are protected. Their rendered text might therefore not appear among editable matches.
  • Visible old URLs can be replaced. Changing href/src targets or other HTML attributes is intentionally not supported in this release.
  • Slugs, canonical/SEO metadata, taxonomies, featured images and unrelated custom fields are not edited. Slug replacement remains unavailable and confirmation remains mandatory.
  • WordPress core APIs run normal revision and save hooks. A scoped, temporary validation filter blocks core or third-party transformations that would unexpectedly change protected post fields during the write.
  • The plugin serializes its own writers and rechecks snapshots immediately before a save. It respects another user’s editor lock. It does not impose database locks on other plugins or replace WordPress’s concurrency model; close other editor tabs for bulk-targeted posts.
  • Custom post types storing primary content in custom tables or post meta (including some page builders) are outside the text engine’s scope. Enabling a post type makes its standard WordPress title/content/excerpt fields available.
  • Multisite is supported by individual site activation only; network activation is deliberately rejected.

Limits and retention

Posts are queried a page at a time. The admin default is 20 and can be adjusted from 1–500 in Settings or changed instantly in the workspace. Sites with 10,000+ posts do not load all content into the browser. Explicit selections may include up to 500 posts in one operation; run additional operations for larger jobs.

Limits: ten posts per processing request; 1 MB total title/content/excerpt per post; 500 editable matches per post; 10,000 displayed matches per scan; 32 MB recovery payload per preview. Exceeding a limit produces an error or skipped post, without a partial edit to that post. Large per-post snapshots may require smaller selections.

There are two versioned, indexed tables using your site’s table prefix: postfix_actions and postfix_items. These support persistent previews, per-post recovery, resumable jobs and paginated history without loading large backup options on frontend requests. Posts themselves are saved with wp_update_post(). PostFix does not directly update the WordPress posts table.

Abandoned previews are pruned after one day. Recovery payloads expire after seven days or the next successfully saved action; activity summaries expire after 30 days. Cleanup is opportunistic during administrator requests (at most once daily), so physical deletion occurs on a subsequent admin visit. Running or undoing work is kept until resolved. Disabling history hides new completed summaries but retains the latest recovery record and active jobs.

Uninstall keeps settings and history by default. To remove PostFix data, enable “Delete PostFix settings, history and recovery data when the plugin is uninstalled” before deleting the plugin. Your posts are never removed or reverted by uninstall. Deactivation preserves data.

Author

Dipak Badaila
https://dipakbadaila.com.np

License

Copyright (C) 2026 Dipak Badaila.
This program is free software: you may redistribute and/or modify it under the GNU General Public License, version 2 or (at your option) any later version.
This program is distributed without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See LICENSE.txt for the license.

Installation

  1. In WordPress, open Plugins > Add New > Upload Plugin.
  2. Choose PostFix-1.0.0.zip, click Install Now, then Activate.
  3. Open the new PostFix menu.
  4. In Settings, explicitly enable Pages or any desired custom post types. Only Posts are enabled initially.

The ZIP contains the complete postfix/ plugin folder. Do not upload the individual PHP files through the plugin uploader. Manual installation is also possible by extracting postfix/ into wp-content/plugins/.

FAQ

Why was a date or post skipped?

Read the per-post error in preview or History > Details. Common reasons include stale content, another editor’s lock, a date-based permalink, a status transition, invalid dates, disabled post types, a safety limit or another plugin’s save filter.

Does changing 2025 to an empty replacement also remove “in”?

No. Replacement is literal. To remove ” in 2025″, search for that exact phrase, including the leading space, and leave the replacement empty. Then run a separate selected replacement for “Updated: 2025” if desired.

Can I undo many older actions?

No. One latest saved bulk operation is supported for a maximum of seven days. WordPress revisions and independent site backups are separate recovery mechanisms.

Does PostFix run on the frontend?

No PostFix assets, rendering filters, scheduled jobs or table queries are added to normal frontend requests. Plugin classes and maintenance run only in the admin context.

Will every theme or page builder behave identically?

PostFix uses the standard WordPress storage/editing APIs. Unusual custom storage and third-party save hooks may require individual editing. Test a representative selection on your staging site before a large live update. Validation details are in docs/TESTING.md.

Reviews

Great Plugin

dbcreativetech Hedra 2, 2026
Great Plugin for all post words replace title or description with single click
Read all 1 review

Contributors & Developers

“PostFix” is open source software. The following people have contributed to this plugin.

Contributors
  • dipakbadaila78

Translate “PostFix” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.1.1

  • Fixed preview table title column becoming too narrow.
  • Added clear inline save progress with percentage, batch status, spinner, and success state.
  • Kept the completed save status visible so admins always know the operation finished.
  • Increased safe batch processing from 10 to 20 posts per request for fewer round trips and faster bulk work.
  • Polished preview rows, result badges, responsive layout, and lightweight CSS animations.

1.1.0

  • Added admin-configurable posts-per-page/select-page size (default 20, 1–500).
  • Added instant workspace page-size control, cached pagination, skeleton loading and smoother selection feedback.
  • Improved admin UI animations and corrected the Settings status-label rendering.

1.0.0

Initial release with selected-occurrence replacement, date management, editor panels, durable batch processing, preview, history and guarded undo.

Meta

  • Version 1.1.1
  • Last updated 9 our ago
  • Active installations Fewer than 10
  • WordPress version 6.6 or higher
  • Tested up to 7.1.2
  • PHP version 8.0 or higher
  • Language
    English (US)
  • Tags
    adminbulk editcontent managementfind & replacepost dates
  • Advanced View

Ratings

5 out of 5 stars.
  • 1 5-star review 5 stars 1
  • 0 4-star reviews 4 stars 0
  • 0 3-star reviews 3 stars 0
  • 0 2-star reviews 2 stars 0
  • 0 1-star reviews 1 star 0

Your review

See all reviews

Contributors

  • dipakbadaila78

Support

Got something to say? Need help?

View support forum

  • About
  • News
  • Hosting
  • Privacy
  • Showcase
  • Themes
  • Plugins
  • Patterns
  • Learn
  • Support
  • Developers
  • WordPress.tv ↗
  • Get Involved
  • Events
  • Donate ↗
  • Swag ↗
  • WordPress.com ↗
  • Matt ↗
  • bbPress ↗
  • BuddyPress ↗
WordPress.org
WordPress.org

Kernewek

  • Visit our X (formerly Twitter) account
  • Visit our Bluesky account
  • Visit our Mastodon account
  • Visit our Threads account
  • Visit our Facebook page
  • Visit our Instagram account
  • Visit our LinkedIn account
  • Visit our TikTok account
  • Visit our YouTube channel
  • Visit our Tumblr account
Code is Poetry.
The WordPress® trademark is the intellectual property of the WordPress Foundation.