{"id":342860,"date":"2026-07-21T13:02:48","date_gmt":"2026-07-21T13:02:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/datesweep\/"},"modified":"2026-07-22T09:57:26","modified_gmt":"2026-07-22T09:57:26","slug":"datesweep","status":"publish","type":"plugin","link":"https:\/\/ta.wordpress.org\/plugins\/datesweep\/","author":23535339,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.6.1","stable_tag":"2.6.1","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"DateSweep","header_author":"Digtiz","header_description":"Bulk-update the published and\/or modified dates of posts, pages, custom post types and comments. Dates are randomly distributed across a chosen range and processed in background batches with a live progress bar.","assets_banners_color":"4f1d16","last_updated":"2026-07-22 09:57:26","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/digtiz.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":40,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.6.1":{"tag":"2.6.1","author":"digtiz","date":"2026-07-22 09:57:26"}},"upgrade_notice":{"2.6.0":"<p>First public release of DateSweep: batched date refreshes with dry-run preview and one-click undo.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3617197,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3617197,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3617197,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3617197,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3617197,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.6.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3617197,"resolution":"1","location":"assets","locale":"","width":3456,"height":1988},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3617197,"resolution":"2","location":"assets","locale":"","width":3456,"height":1988},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3617197,"resolution":"3","location":"assets","locale":"","width":3456,"height":1988},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3617197,"resolution":"4","location":"assets","locale":"","width":3456,"height":1988}},"screenshots":{"1":"The \"All content\" tab \u2014 one freshness pass across every post type.","2":"Dry-run preview: current dates and proposed new dates, before anything is written.","3":"A run in progress \u2014 batched processing with a live progress bar.","4":"Recent runs with one-click Undo."}},"plugin_section":[],"plugin_tags":[11143,22814,58422,16417,150893],"plugin_category":[],"plugin_contributors":[272643],"plugin_business_model":[],"class_list":["post-342860","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk-edit","plugin_tags-change-date","plugin_tags-modified-date","plugin_tags-post-date","plugin_tags-published-date","plugin_contributors-digtiz","plugin_committers-digtiz"],"banners":{"banner":"https:\/\/ps.w.org\/datesweep\/assets\/banner-772x250.png?rev=3617197","banner_2x":"https:\/\/ps.w.org\/datesweep\/assets\/banner-1544x500.png?rev=3617197","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/datesweep\/assets\/icon.svg?rev=3617197","icon":"https:\/\/ps.w.org\/datesweep\/assets\/icon.svg?rev=3617197","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/datesweep\/assets\/screenshot-1.png?rev=3617197","caption":"The \"All content\" tab \u2014 one freshness pass across every post type."},{"src":"https:\/\/ps.w.org\/datesweep\/assets\/screenshot-2.png?rev=3617197","caption":"Dry-run preview: current dates and proposed new dates, before anything is written."},{"src":"https:\/\/ps.w.org\/datesweep\/assets\/screenshot-3.png?rev=3617197","caption":"A run in progress \u2014 batched processing with a live progress bar."},{"src":"https:\/\/ps.w.org\/datesweep\/assets\/screenshot-4.png?rev=3617197","caption":"Recent runs with one-click Undo."}],"raw_content":"<!--section=description-->\n<p>DateSweep refreshes the published and\/or modified dates of your content in bulk. New dates are distributed randomly across a range you choose, so the result looks natural \u2014 and every run can be previewed first and undone afterwards.<\/p>\n\n<p>Use it to bulk-change post dates, update the published or modified date across pages and custom post types, or bulk-edit comment dates \u2014 all from one screen, with a dry-run preview and one-click undo.<\/p>\n\n<h4>Typical use cases<\/h4>\n\n<ul>\n<li><strong>Pre-launch freshness pass<\/strong> \u2014 you built a new site from an older template or a copy of an existing site, and everything still carries dates from years ago. One run on the \"All content\" tab (optionally with drafts included and both dates set equal) makes the whole site look current before launch.<\/li>\n<li><strong>After an import or migration<\/strong> \u2014 imported content often ends up with a single identical date on every post, or wrong dates from a timezone mix-up. Spread realistic dates across a chosen range in one pass.<\/li>\n<li><strong>Content maintenance for SEO<\/strong> \u2014 you reviewed and batch-edited older articles and want their modified dates to reflect that work naturally over the past weeks instead of one suspicious spike.<\/li>\n<li><strong>Comments that match<\/strong> \u2014 after an import, comments dated before their own posts look broken. The Comments tab redates them plausibly (a comment is never dated before its post).<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<p>Pick a tab (a post type, Comments, or All content), choose the range to distribute dates within, optionally filter by taxonomy, status or specific pages, and choose which date field to update. <strong>Preview (dry run)<\/strong> shows current \u2192 proposed dates before anything is written. Runs are processed in batches of 100 over AJAX with a live progress bar, so even very large sites finish without PHP timeouts. Before each batch is written, the previous dates are snapshotted \u2014 your most recent run can always be restored with one click from the <strong>Recent runs<\/strong> list.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Batched AJAX processing with a live progress bar<\/strong> \u2014 works on sites with tens of thousands of posts without PHP timeouts.<\/li>\n<li><strong>All public post types<\/strong> \u2014 posts, pages and custom post types each get their own tab, plus a Comments tab.<\/li>\n<li><strong>Filter by any taxonomy<\/strong> (categories, tags, custom taxonomies) with AND\/OR relation, or pick specific pages.<\/li>\n<li><strong>Choose the field<\/strong>: modified date, published date, or both set equal.<\/li>\n<li><strong>Safety guard<\/strong>: never sets a modified date earlier than the published date (the classic plugin's known flaw).<\/li>\n<li><strong>Comments stay plausible<\/strong>: a comment is never dated before its parent post.<\/li>\n<li><strong>No external CDNs<\/strong> \u2014 native date pickers, vanilla JavaScript, everything loaded locally.<\/li>\n<li><strong>Undo built in<\/strong>: every run records the previous dates first, and your most recent run can be restored with one click.<\/li>\n<li><strong>Hardened<\/strong>: capability checks, nonces, full input sanitization and output escaping, prepared SQL statements, object-cache invalidation after every update.<\/li>\n<li><strong>Developer friendly<\/strong>: actions and filters for every stage (<code>datesweep_post_dates_updated<\/code>, <code>datesweep_collected_post_ids<\/code>, <code>datesweep_new_timestamp<\/code>, <code>datesweep_form_rows<\/code> and more).<\/li>\n<\/ul>\n\n<h4>DateSweep Pro<\/h4>\n\n<p>The <a href=\"https:\/\/datesweep.com\/\">DateSweep Pro<\/a> add-on extends the free plugin with scheduled automatic refreshes, a 10-run undo history, 100-row dry-run previews, ACF date-field support, age targeting and IndexNow submission.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>datesweep<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip via Plugins \u2192 Add New \u2192 Upload.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>Tools \u2192 DateSweep<\/strong>, pick a tab, choose a range and click <em>Update Dates<\/em>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20time%20out%20on%20a%20large%20site%3F\"><h3>Will this time out on a large site?<\/h3><\/dt>\n<dd><p>No. Items are processed in batches of 100 over AJAX; the browser drives the queue and shows progress. Only the ID collection happens up front.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20an%20update%3F\"><h3>Can I undo an update?<\/h3><\/dt>\n<dd><p>Yes. Every run records the previous dates before writing, and the Recent runs list on the plugin page lets you undo your most recent run with one click. DateSweep Pro extends this to an undo history of your last 10 runs. A database backup before large operations is still good practice.<\/p><\/dd>\n<dt id=\"does%20it%20change%20dates%20in%20the%20future%3F\"><h3>Does it change dates in the future?<\/h3><\/dt>\n<dd><p>No. The range is always capped at the current time.<\/p><\/dd>\n<dt id=\"does%20it%20change%20my%20content%3F\"><h3>Does it change my content?<\/h3><\/dt>\n<dd><p>No. Only the date columns of posts\/pages (<code>post_date<\/code>, <code>post_modified<\/code> and their GMT counterparts) or comment dates are touched. Titles, content, excerpts, custom fields and settings are never modified.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%20like%20elementor%2C%20avada%20or%20divi%3F\"><h3>Does it work with page builders like Elementor, Avada or Divi?<\/h3><\/dt>\n<dd><p>Yes. Builders store their layouts in content and meta fields, which DateSweep never touches \u2014 only the core date columns change. If your theme displays a date from a custom field instead of the WordPress date, see DateSweep Pro's ACF integration.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20custom%20post%20types%3F\"><h3>Does it work with custom post types?<\/h3><\/dt>\n<dd><p>Yes, automatically. Every public custom post type \u2014 whether registered by a theme, a plugin or ACF \u2014 gets its own tab and is included in the \"All content\" pass.<\/p><\/dd>\n<dt id=\"is%20it%20safe%20for%20seo%3F%20will%20google%20penalize%20me%3F\"><h3>Is it safe for SEO? Will Google penalize me?<\/h3><\/dt>\n<dd><p>DateSweep changes dates, not content. Search engines reward genuinely updated content; refreshing dates without any real changes can be ignored or, at worst, erode trust in your dates. Use it where the dates are genuinely misleading (imports, rebuilds, migrations) or alongside real content maintenance \u2014 not as a substitute for it.<\/p><\/dd>\n<dt id=\"why%20did%20nothing%20change%20on%20my%20site%20after%20a%20run%3F\"><h3>Why did nothing change on my site after a run?<\/h3><\/dt>\n<dd><p>Your dates did change in the database \u2014 but a caching plugin or CDN may still serve old pages. Clear your page cache after a run. (Object caches are already flushed automatically.)<\/p><\/dd>\n<dt id=\"where%20do%20i%20find%20the%20plugin%20after%20activating%20it%3F\"><h3>Where do I find the plugin after activating it?<\/h3><\/dt>\n<dd><p>Under <strong>Tools \u2192 DateSweep<\/strong>.<\/p><\/dd>\n<dt id=\"can%20i%20schedule%20automatic%20refreshes%3F\"><h3>Can I schedule automatic refreshes?<\/h3><\/dt>\n<dd><p>That's a DateSweep Pro feature: daily, weekly or monthly schedules with a \"Save &amp; Run Now\" button, age targeting so recently edited content is left alone, and IndexNow submission so search engines re-crawl the refreshed URLs quickly.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.6.1<\/h4>\n\n<ul>\n<li>Renamed internal prefixes to <code>datesweep_<\/code> (from <code>dsw_<\/code>) to meet WordPress.org\u2019s 4-character prefix guideline. Fresh installs only; no data migration. Removed bundled translation files and the manual textdomain load (WordPress.org handles translations automatically).<\/li>\n<\/ul>\n\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>Undo history: the free plugin keeps your most recent run (previously 5). The new <code>datesweep_keep_runs<\/code> filter lets add-ons extend the history \u2014 DateSweep Pro keeps the last 10 runs.<\/li>\n<\/ul>\n\n<h4>2.5.2<\/h4>\n\n<ul>\n<li>The \"no items match\" check now runs after extensions filter the job, so add-ons that narrow the selection (e.g. age targeting) report empty results correctly.<\/li>\n<\/ul>\n\n<h4>2.5.1<\/h4>\n\n<ul>\n<li>Undo progress and success message now count items (posts\/comments) instead of internal snapshot rows, so runs that include ACF fields report correct numbers.<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>Plugin renamed to DateSweep. Slug, text domain and all internal prefixes updated (<code>datesweep_<\/code>). No functional changes.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>New extension seams for add-ons: <code>datesweep_form_rows<\/code> action (extra form rows), <code>datesweep_job_data<\/code> filter (attach data to a job), <code>datesweep_batch_processed<\/code> action (post-batch processing) and <code>datesweep_restore_snapshot<\/code> action (restore custom snapshot types).<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Translations added: German (de_DE), Dutch (nl_NL, nl_BE) and French (fr_FR, fr_BE), plus a POT template.<\/li>\n<li>The dry-run preview limit is now filterable (<code>datesweep_preview_limit<\/code>) for the Pro add-on.<\/li>\n<li>New public helper <code>DSW_Processor::range_from_preset()<\/code> used by scheduled (Pro) runs.<\/li>\n<li>Confirmation dialog now mentions that runs can be undone.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Undo\/rollback: every run snapshots the previous dates before writing; the new \"Recent runs\" list restores them with one click (batched, with progress).<\/li>\n<li>The last 5 runs are kept; snapshots are pruned automatically and removed on uninstall.<\/li>\n<li>New action hook: <code>datesweep_post_dates_restored<\/code>.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>New \"All content\" tab: one freshness pass across every public post type at once \u2014 ideal before launching a site built from an older template.<\/li>\n<li>Dry-run preview: see current \u2192 proposed dates for a sample of matching items before committing.<\/li>\n<li>Post status selection: optionally include drafts, pending and private items.<\/li>\n<li>New extension filters: <code>datesweep_collected_post_ids<\/code>, <code>datesweep_new_timestamp<\/code>.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Complete rewrite: OOP architecture, batched AJAX processing with progress bar.<\/li>\n<li>Native date pickers; removed all CDN dependencies (moment.js, daterangepicker).<\/li>\n<li>Full sanitization, escaping, nonce and capability hardening.<\/li>\n<li>Fixed: modified date can no longer be set before the published date (optional guard, on by default).<\/li>\n<li>Object cache is now invalidated after every update.<\/li>\n<li>Added <code>datesweep_post_dates_updated<\/code> action hook.<\/li>\n<li>Uninstall cleanup.<\/li>\n<\/ul>","raw_excerpt":"Bulk-update published and\/or modified dates of posts, pages, custom post types and comments \u2014 batched, safe and timeout-free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/342860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=342860"}],"author":[{"embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/digtiz"}],"wp:attachment":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=342860"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=342860"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=342860"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=342860"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=342860"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=342860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}