{"id":294507,"date":"2026-04-29T14:55:38","date_gmt":"2026-04-29T14:55:38","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/post-archival-system\/"},"modified":"2026-04-29T14:55:45","modified_gmt":"2026-04-29T14:55:45","slug":"seocms-post-archival-system","status":"publish","type":"plugin","link":"https:\/\/tr.wordpress.org\/plugins\/seocms-post-archival-system\/","author":6320124,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.2","stable_tag":"1.0.2","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"SeoCms Post Archival System","header_author":"SEOPageHost","header_description":"Archive posts and custom post types to a separate database based on configurable age rules. Keep your main database lean and fast.","assets_banners_color":"","last_updated":"2026-04-29 14:55:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/seocms-post-archival-system\/","header_author_uri":"https:\/\/www.seopagehost.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":59,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"mynetfocus","date":"2026-04-29 14:55:45"}},"upgrade_notice":{"1.0.2":"<p>Major internal rename to comply with WordPress.org guidelines on unique prefixes. Includes a one-time data migration on activation that moves existing options and the log table to the new prefix.<\/p>","1.0.1":"<p>Security hardening, code-standards compliance, and WP 6.2+ compatibility improvements. Recommended for all users.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3518592,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3518592,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3518592,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3518592,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3518592,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Dashboard \u2014 Overview with statistics, quick actions, and recent activity","2":"Settings \u2014 Archive database configuration and scheduling options","3":"Archival Rules \u2014 Per-post-type age thresholds and status filters","4":"Archive Browser \u2014 Search and restore archived posts","5":"Activity Log \u2014 Full audit trail of archive and restore actions","6":"Front-end Search \u2014 Shortcode-powered archive search for visitors"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1445,3786,153,732,166],"plugin_category":[52,59],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-294507","plugin","type-plugin","status-publish","hentry","plugin_tags-archive","plugin_tags-cleanup","plugin_tags-database","plugin_tags-maintenance","plugin_tags-posts","plugin_category-performance","plugin_category-utilities-and-tools","plugin_committers-mynetfocus"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/seocms-post-archival-system.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/seocms-post-archival-system\/assets\/screenshot-1.png?rev=3518592","caption":"Dashboard \u2014 Overview with statistics, quick actions, and recent activity"},{"src":"https:\/\/ps.w.org\/seocms-post-archival-system\/assets\/screenshot-2.png?rev=3518592","caption":"Settings \u2014 Archive database configuration and scheduling options"},{"src":"https:\/\/ps.w.org\/seocms-post-archival-system\/assets\/screenshot-3.png?rev=3518592","caption":"Archival Rules \u2014 Per-post-type age thresholds and status filters"},{"src":"https:\/\/ps.w.org\/seocms-post-archival-system\/assets\/screenshot-4.png?rev=3518592","caption":"Archive Browser \u2014 Search and restore archived posts"},{"src":"https:\/\/ps.w.org\/seocms-post-archival-system\/assets\/screenshot-5.png?rev=3518592","caption":"Activity Log \u2014 Full audit trail of archive and restore actions"}],"raw_content":"<!--section=description-->\n<p>SeoCms Post Archival System lets you move old posts and custom post types to a separate archive database, keeping your main WordPress database lean and fast.<\/p>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Age-based archival rules<\/strong> \u2014 Configure per-post-type rules (e.g., archive posts older than 180 days)<\/li>\n<li><strong>Custom post type support<\/strong> \u2014 Works with any registered post type<\/li>\n<li><strong>Full data preservation<\/strong> \u2014 Archives posts, post meta, and taxonomy relationships<\/li>\n<li><strong>One-click restore<\/strong> \u2014 Restore archived posts back to the main database with all metadata intact<\/li>\n<li><strong>Scheduled archival<\/strong> \u2014 Automate archival via WP-Cron (hourly, daily, weekly, or monthly)<\/li>\n<li><strong>Manual batch runs<\/strong> \u2014 Run archival on-demand from the dashboard<\/li>\n<li><strong>Archive browser<\/strong> \u2014 Search, filter, and browse archived posts from the admin panel<\/li>\n<li><strong>Front-end search<\/strong> \u2014 Use the <code>[seocpoar_search]<\/code> shortcode to let visitors search archived content<\/li>\n<li><strong>Activity logging<\/strong> \u2014 Full audit trail of all archive and restore actions<\/li>\n<\/ul>\n\n<p><strong>How It Works:<\/strong><\/p>\n\n<ol>\n<li>Configure a second MySQL database in Settings<\/li>\n<li>Set up archival rules per post type with age thresholds<\/li>\n<li>Run archival manually or on a schedule<\/li>\n<li>Archived posts are moved to the separate database with all their metadata<\/li>\n<li>Browse and restore archived posts at any time<\/li>\n<\/ol>\n\n<p><strong>Shortcode Usage:<\/strong><\/p>\n\n<p>Display a searchable archive browser on any page:<\/p>\n\n<pre><code>[seocpoar_search]\n[seocpoar_search per_page=\"20\"]\n[seocpoar_search per_page=\"10\" post_type=\"post\"]\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>seocms-post-archival-system<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Create a separate MySQL database for the archive (e.g., <code>wp_archive<\/code>)<\/li>\n<li>Go to <strong>Archival &gt; Settings<\/strong> and enter the archive database credentials<\/li>\n<li>Click <strong>Test Connection<\/strong> to verify, then <strong>Initialize Tables<\/strong> to create the archive schema<\/li>\n<li>Go to <strong>Archival &gt; Rules<\/strong> and add archival rules for your post types<\/li>\n<li>Go to <strong>Archival &gt; Dashboard<\/strong> and click <strong>Run Archival Now<\/strong>, or enable scheduled archival<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.3 or higher<\/li>\n<li>PHP 7.4 or higher (compatible with PHP 8.0, 8.1, 8.2, and 8.3)<\/li>\n<li>A separate MySQL\/MariaDB database for the archive<\/li>\n<li>The WordPress database user must have access to the archive database<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20delete%20my%20posts%3F\"><h3>Does this delete my posts?<\/h3><\/dt>\n<dd><p>By default, yes \u2014 posts are removed from the main database after being archived. You can disable this in Settings by unchecking \"Delete after archiving\", which keeps posts in both databases.<\/p><\/dd>\n<dt id=\"can%20i%20restore%20archived%20posts%3F\"><h3>Can I restore archived posts?<\/h3><\/dt>\n<dd><p>Yes. Use the Archive Browser in the admin panel or the front-end shortcode to find archived posts, then click \"Restore\" to bring them back to the main database with all metadata intact.<\/p><\/dd>\n<dt id=\"does%20it%20archive%20comments%3F\"><h3>Does it archive comments?<\/h3><\/dt>\n<dd><p>Not in the current version. Only posts, post meta, and taxonomy relationships are archived. Comment archival is planned for a future release.<\/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. Any registered public post type can have its own archival rule with a custom age threshold.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20on%20a%20multisite%20network%3F\"><h3>Can I use it on a multisite network?<\/h3><\/dt>\n<dd><p>The plugin works on individual sites within a multisite network. Full multisite support with shared archive databases is planned for a future release.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20archive%20database%20is%20unavailable%3F\"><h3>What happens if the archive database is unavailable?<\/h3><\/dt>\n<dd><p>The plugin will return an error message and no posts will be archived or deleted. Your main database is never modified unless the archive operation succeeds first.<\/p><\/dd>\n<dt id=\"is%20the%20archive%20database%20connection%20secure%3F\"><h3>Is the archive database connection secure?<\/h3><\/dt>\n<dd><p>Database credentials are stored in the WordPress options table (same as wp-config.php credentials). Passwords are masked in the admin UI.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Renamed all internal identifiers to use unique <code>seocpoar_<\/code> \/ <code>Seocpoar<\/code> \/ <code>SEOCPOAR_<\/code> prefix per WordPress.org reviewer feedback (replaces reserved <code>wp_<\/code>-prefixed names)<\/li>\n<li>Namespace changed from <code>WP_Archival<\/code> to <code>Seocpoar<\/code><\/li>\n<li>Plugin constants renamed <code>WP_ARCHIVAL_*<\/code> \u2192 <code>SEOCPOAR_*<\/code><\/li>\n<li>Option keys renamed <code>wp_archival_*<\/code> \u2192 <code>seocpoar_*<\/code><\/li>\n<li>Cron hook renamed <code>wp_archival_scheduled_run<\/code> \u2192 <code>seocpoar_scheduled_run<\/code><\/li>\n<li>AJAX action suffixes renamed <code>wp_archival_*<\/code> \u2192 <code>seocpoar_*<\/code><\/li>\n<li>Shortcode renamed <code>[wp_archival_search]<\/code> \u2192 <code>[seocpoar_search]<\/code><\/li>\n<li>Custom action hooks renamed <code>wp_archival_post_archived\/restored<\/code> \u2192 <code>seocpoar_post_archived\/restored<\/code><\/li>\n<li>Log table renamed <code>{prefix}archival_log<\/code> \u2192 <code>{prefix}seocpoar_log<\/code><\/li>\n<li>Front-end CSS classes renamed <code>.wpa-*<\/code> \u2192 <code>.seocpoar-*<\/code><\/li>\n<li>URL query params renamed <code>wpa_view\/search\/page<\/code> \u2192 <code>seocpoar_view\/search\/page<\/code><\/li>\n<li>Default archive table prefix changed from <code>wpa_<\/code> to <code>seocpoar_<\/code><\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Hardened output escaping for all <code>number_format_i18n()<\/code> calls<\/li>\n<li>Refactored database queries to use <code>%i<\/code> placeholder for table\/column identifiers (requires WP 6.2+)<\/li>\n<li>Refactored Logger ORDER BY to use literal ASC\/DESC branches (no variable concat in SQL)<\/li>\n<li>Prefixed template-scope variables with <code>seocpoar_<\/code> for WordPress coding standards compliance<\/li>\n<li>Added direct file access protection to bundled CLI test scripts<\/li>\n<li>Bumped minimum WordPress requirement from 5.3 to 6.2<\/li>\n<li>Tested up to WordPress 6.9<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Age-based archival rules per post type<\/li>\n<li>Archive posts, post meta, and taxonomies to separate database<\/li>\n<li>One-click restore from archive<\/li>\n<li>Scheduled archival via WP-Cron<\/li>\n<li>Admin dashboard with statistics<\/li>\n<li>Archive browser with search and filtering<\/li>\n<li>Activity logging<\/li>\n<li>Front-end shortcode for archive search<\/li>\n<li>Single archived post view within theme<\/li>\n<\/ul>","raw_excerpt":"Archive old posts and custom post types to a separate database based on configurable age rules.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/294507","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=294507"}],"author":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mynetfocus"}],"wp:attachment":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=294507"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=294507"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=294507"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=294507"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=294507"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=294507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}