Title: PostFix
Author: dipakbadaila78
Published: <strong>2. oktober, 2026</strong>
Last modified: 2. oktober, 2026

---

Søg plugins

![](https://s.w.org/plugins/geopattern-icon/postfix.svg)

# PostFix

 Af [dipakbadaila78](https://profiles.wordpress.org/dipakbadaila78/)

[Download](https://downloads.wordpress.org/plugin/postfix.1.1.1.zip)

 * [Detaljer](https://da.wordpress.org/plugins/postfix/#description)
 * [Vurderinger](https://da.wordpress.org/plugins/postfix/#reviews)
 *  [Installation](https://da.wordpress.org/plugins/postfix/#installation)
 * [Udvikling](https://da.wordpress.org/plugins/postfix/#developers)

 [Support](https://wordpress.org/support/plugin/postfix/)

## Beskrivelse

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.

## Anmeldelser

![](https://secure.gravatar.com/avatar/7b8d565965b42239de09ed03df2ecd91d6a37d19b85e9516927acb1b43d19ae9?
s=60&d=retro&r=g)

### 󠀁[Great Plugin](https://wordpress.org/support/topic/great-plugin-41821/)󠁿

 [dbcreativetech](https://profiles.wordpress.org/dbcreativetech/) 2. oktober, 2026

Great Plugin for all post words replace title or description with single click

 [ Læs 1 anmeldelse ](https://wordpress.org/support/plugin/postfix/reviews/)

## Bidragsydere & udviklere

“PostFix” er open source-software. Følgende personer har bidraget til dette plugin.

Bidragsydere

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

[Oversæt “PostFix” til dit eget sprog.](https://translate.wordpress.org/projects/wp-plugins/postfix)

### Interesseret i udvikling?

[Gennemse koden](https://plugins.trac.wordpress.org/browser/postfix/), tjek [SVN repository](https://plugins.svn.wordpress.org/postfix/),
eller abonner på [udviklerloggen](https://plugins.trac.wordpress.org/log/postfix/)
via [RSS](https://plugins.trac.wordpress.org/log/postfix/?limit=100&mode=stop_on_copy&format=rss).

## Ændringslog

#### 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**
 *  Senest opdateret **5 timer siden**
 *  Aktive installationer **Færre end 10**
 *  WordPress-version ** 6.6 eller højere **
 *  Testet op til **7.1.2**
 *  PHP-version ** 8.0 eller højere **
 *  Sprog
 * [English (US)](https://wordpress.org/plugins/postfix/)
 * Tags
 * [admin](https://da.wordpress.org/plugins/tags/admin/)[bulk edit](https://da.wordpress.org/plugins/tags/bulk-edit/)
   [content management](https://da.wordpress.org/plugins/tags/content-management/)
   [find & replace](https://da.wordpress.org/plugins/tags/find-replace/)[post dates](https://da.wordpress.org/plugins/tags/post-dates/)
 *  [Avanceret visning](https://da.wordpress.org/plugins/postfix/advanced/)

## Bedømmelser

 5 ud af 5 stjerner.

 *  [  1 5-stjernet anmeldelse     ](https://wordpress.org/support/plugin/postfix/reviews/?filter=5)
 *  [  0 4-stjernet anmeldelser     ](https://wordpress.org/support/plugin/postfix/reviews/?filter=4)
 *  [  0 3-stjernet anmeldelser     ](https://wordpress.org/support/plugin/postfix/reviews/?filter=3)
 *  [  0 2-stjernet anmeldelser     ](https://wordpress.org/support/plugin/postfix/reviews/?filter=2)
 *  [  0 1-stjernet anmeldelser     ](https://wordpress.org/support/plugin/postfix/reviews/?filter=1)

[Din anmeldelse](https://wordpress.org/support/plugin/postfix/reviews/#new-post)

[Se alle anmeldelser](https://wordpress.org/support/plugin/postfix/reviews/)

## Bidragsydere

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

## Support

Har du noget at sige? Har du brug for hjælp?

 [Vis supportforum](https://wordpress.org/support/plugin/postfix/)