[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fFKmE4eAtACgLePvrgYjufgErn7NK5Uq4JSmWgEVZUMQ":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":25,"download_link":26,"security_score":13,"vuln_count":11,"unpatched_count":11,"last_vuln_date":27,"fetched_at":28,"vulnerabilities":29,"developer":30,"crawl_stats":27,"alternatives":34,"analysis":133,"fingerprints":301},"ait-easy-post-customization","AIT Easy Post Customization","2.0.1","kamranchannar","https:\u002F\u002Fprofiles.wordpress.org\u002Fkamranchannar\u002F","\u003Cp>AIT Easy Post Customization is a powerful yet easy-to-use plugin designed to give users control over the lifespan of their posts and custom post types by allowing you to set an expiry date. If you’re managing time-sensitive content, like event announcements, special promotions, or limited-time offers, this plugin automates the process of unpublishing or archiving content, making content management hassle-free.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>What problem does this plugin solve?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Manually tracking and updating expired content can be tedious and prone to errors, especially if you have a large volume of posts. Without this plugin, expired content can remain live, leading to outdated or irrelevant information on your website. AIT Easy Post Customization solves this problem by allowing you to set expiry dates on posts, ensuring that content is automatically hidden or removed after the specified date. This keeps your site fresh and up-to-date without manual intervention.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>How does it improve the user experience?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Automatic Expiry Handling\u003C\u002Fstrong>: Set an expiration date for any post or custom post type, and let the plugin automatically unpublish it when the time comes. This eliminates the need for manual updates and improves content accuracy.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom Post Type Support\u003C\u002Fstrong>: Whether you’re using standard WordPress posts or custom post types (like events, job listings, products, etc.), you can easily add expiry functionality to all of them.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>User-Friendly Interface\u003C\u002Fstrong>: The plugin integrates seamlessly with the WordPress editor, making it easy for users of all skill levels to manage expiry dates. The expiry date can be set directly from the post editing screen.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom Fields Management\u003C\u002Fstrong>: Add custom fields (text, textarea, date) to posts for enhanced content customization.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Modern Admin Interface\u003C\u002Fstrong>: A sleek, responsive admin panel with sticky tabs, form validation, and intuitive navigation.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Key Features\u003C\u002Fstrong>:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Post Expiration\u003C\u002Fstrong>: Set expiration dates for posts and custom post types, automatically moving them to draft status when expired.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom Fields\u003C\u002Fstrong>: Add and manage custom fields (text, textarea, date) for selected post types.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Supports All Post Types\u003C\u002Fstrong>: Works with standard WordPress posts and custom post types, allowing flexible use across various content types.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Seamless Integration\u003C\u002Fstrong>: Integrated into the post editor with a modern, user-friendly interface.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Scheduled Content Management\u003C\u002Fstrong>: Perfect for managing content like event updates, limited-time offers, and seasonal announcements.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Localization Ready\u003C\u002Fstrong>: Fully translation-ready for multilingual websites.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Notable Features\u003C\u002Fstrong>:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Custom Widgets\u003C\u002Fstrong>: Optionally display a widget that shows upcoming or recently expired content to site admins for better tracking (coming soon).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Developer-Friendly Hooks and Filters\u003C\u002Fstrong>: Developers can customize the plugin’s behavior using built-in hooks and filters.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Modern Design\u003C\u002Fstrong>: Features a responsive admin interface with sticky tabs, Dashicons, and gradient effects for a premium experience.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>With AIT Easy Post Customization, you’ll never have to worry about outdated or irrelevant content cluttering your site again. Keep your content fresh, current, and timely with minimal effort.\u003C\u002Fp>\n\u003Ch3>1. What is AIT Easy Post Customization?\u003C\u002Fh3>\n\u003Cp>AIT Easy Post Customization is a WordPress plugin that allows users to set expiry dates for posts and custom post types and manage custom fields, ensuring content remains relevant and up-to-date.\u003C\u002Fp>\n\u003Ch3>2. How do I install the plugin?\u003C\u002Fh3>\n\u003Cp>You can install the plugin by uploading the plugin files to the \u003Ccode>\u002Fwp-content\u002Fplugins\u002Fait-easy-post-customization\u002F\u003C\u002Fcode> directory or by installing it directly through the WordPress plugins screen. After installation, activate the plugin through the ‘Plugins’ screen in WordPress.\u003C\u002Fp>\n\u003Ch3>3. Where can I configure the settings?\u003C\u002Fh3>\n\u003Cp>After activating the plugin, you can configure settings by navigating to the \u003Cstrong>Easy Post Customization\u003C\u002Fstrong> link in the WordPress sidebar. Here, you can manage expiry dates and custom fields for your posts and custom post types.\u003C\u002Fp>\n\u003Ch3>4. Can I set an expiry date for custom post types?\u003C\u002Fh3>\n\u003Cp>Yes! AIT Easy Post Customization allows you to set expiry dates for both standard posts and custom post types, giving you flexibility in managing your content.\u003C\u002Fp>\n\u003Ch3>5. What happens to a post when it expires?\u003C\u002Fh3>\n\u003Cp>Once a post expires, it will be automatically moved to draft status, hiding it from public view. Future updates may include options for other actions like deletion.\u003C\u002Fp>\n\u003Ch3>6. Is there any support available if I encounter issues?\u003C\u002Fh3>\n\u003Cp>Yes, for support and inquiries, you can contact me via email at \u003Ca href=\"mailto:kamran.channar99@gmail.com\" rel=\"nofollow ugc\">kamran.channar99@gmail.com\u003C\u002Fa> or connect with me on LinkedIn at \u003Ca href=\"https:\u002F\u002Flinkedin.com\u002Fin\u002Fmuhammad-kamran-64a33a166\" rel=\"nofollow ugc\">Muhammad Kamran\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>7. Is this plugin compatible with the latest version of WordPress?\u003C\u002Fh3>\n\u003Cp>Yes, AIT Easy Post Customization is tested up to WordPress version 6.6 and is designed to be compatible with the latest releases.\u003C\u002Fp>\n\u003Ch3>8. Is the plugin free to use?\u003C\u002Fh3>\n\u003Cp>Yes, AIT Easy Post Customization is completely free to use and is licensed under the GPLv2 or later.\u003C\u002Fp>\n\u003Ch3>License & Copyright\u003C\u002Fh3>\n\u003Cp>This plugin is licensed under the GPLv2 or later.\u003Cbr \u002F>\nYou can redistribute it and\u002For modify it under the terms of the GNU General Public License as published by the Free Software Foundation.\u003C\u002Fp>\n\u003Cp>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details: https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002Fgpl-2.0.html\u003C\u002Fp>\n\u003Ch3>Contact\u003C\u002Fh3>\n\u003Cp>For inquiries, project discussions, or collaboration opportunities, feel free to reach out to me:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Email: \u003Ca href=\"mailto:kamran.channar99@gmail.com\" rel=\"nofollow ugc\">kamran.channar99@gmail.com\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>LinkedIn: \u003Ca href=\"https:\u002F\u002Flinkedin.com\u002Fin\u002Fmuhammad-kamran-64a33a166\" rel=\"nofollow ugc\">Muhammad Kamran\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>I look forward to connecting with you!\u003C\u002Fp>\n","Easily set expiry dates for posts and custom post types, automatically unpublishing content when it becomes outdated.",0,395,100,1,"2025-10-19T23:08:00.000Z","6.8.5","5.0","7.4",[20,21,22,23,24],"auto-expire","expiry-date","post-expiration","post-expiry","schedule-post","","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fait-easy-post-customization.2.0.1.zip",null,"2026-03-15T15:16:48.613Z",[],{"slug":7,"display_name":7,"profile_url":8,"plugin_count":14,"total_installs":11,"avg_security_score":13,"avg_patch_time_days":31,"trust_score":32,"computed_at":33},30,94,"2026-04-05T18:08:58.445Z",[35,53,74,96,116],{"slug":36,"name":37,"version":38,"author":39,"author_profile":40,"description":41,"short_description":42,"active_installs":43,"downloaded":44,"rating":11,"num_ratings":11,"last_updated":45,"tested_up_to":16,"requires_at_least":17,"requires_php":46,"tags":47,"homepage":25,"download_link":52,"security_score":13,"vuln_count":11,"unpatched_count":11,"last_vuln_date":27,"fetched_at":28},"auto-post-expiry-manager","Auto Post Expiry Manager","1.0","Hardik Galiya","https:\u002F\u002Fprofiles.wordpress.org\u002Fhardik2104\u002F","\u003Cp>\u003Cstrong>Auto Post Expiry Manager\u003C\u002Fstrong> allows you to set an expiry date and time for any post or custom post type. Once the scheduled expiry time is reached, the post will automatically switch from “Published” to “Draft” status.\u003C\u002Fp>\n\u003Cp>It’s useful for:\u003Cbr \u002F>\n– Event announcements\u003Cbr \u002F>\n– Time-sensitive promotions\u003Cbr \u002F>\n– Auto-drafting outdated posts\u003Cbr \u002F>\n– Limiting visibility on dated content\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Key Features:\u003C\u002Fstrong>\u003Cbr \u002F>\n– Works with \u003Cstrong>all public post types\u003C\u002Fstrong>\u003Cbr \u002F>\n– Set expiration time using a simple \u003Cstrong>datetime picker\u003C\u002Fstrong>\u003Cbr \u002F>\n– Lightweight cron job runs every minute\u003Cbr \u002F>\n– Automatically removes expiry after execution\u003Cbr \u002F>\n– Manual trigger available via URL for testing\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This plugin is licensed under the \u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002Fgpl-2.0.html\" rel=\"nofollow ugc\">GPLv2 or later\u003C\u002Fa>.\u003Cbr \u002F>\nCopyright (c) 2025 Hardik Galiya\u003C\u002Fp>\n","Automatically expire posts and custom post types at a specific date and time. Works with all public post types and uses a lightweight cron scheduler.",80,457,"2025-06-23T05:38:00.000Z","7.2",[48,49,22,50,51],"auto-unpublish","expire-posts","post-lifecycle","schedule-post-draft","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fauto-post-expiry-manager.zip",{"slug":54,"name":55,"version":56,"author":57,"author_profile":58,"description":59,"short_description":60,"active_installs":61,"downloaded":62,"rating":63,"num_ratings":43,"last_updated":64,"tested_up_to":16,"requires_at_least":65,"requires_php":18,"tags":66,"homepage":69,"download_link":70,"security_score":71,"vuln_count":72,"unpatched_count":11,"last_vuln_date":73,"fetched_at":28},"editorial-calendar","Editorial Calendar","3.9.2","Marketing Fire","https:\u002F\u002Fprofiles.wordpress.org\u002Fmarketingfire\u002F","\u003Cp>Did you remember to write a post for next Tuesday?  What about the Tuesday after that?  WordPress doesn’t make it easy to see when your posts are scheduled.  The editorial calendar gives you an overview of your blog and when each post will be published.  You can drag and drop to move posts, edit posts right in the calendar, and manage your entire blog.\u003C\u002Fp>\n\u003Ch4>Visualize Your Content Strategy\u003C\u002Fh4>\n\u003Cp>Intuitive drag-and-drop calendar interface gives you a bird’s-eye view of your content strategy. Easily manage all your articles, blog posts, and multimedia content in one central place.\u003C\u002Fp>\n\u003Ch4>Stay Organized, Stay Consistent!\u003C\u002Fh4>\n\u003Cp>Struggling to keep track of your scheduled posts? The Editorial Calendar plugin simplifies content management, allowing you to see, schedule, and manage all posts in one streamlined view. Edit post details directly in the calendar and ensure your content stays on track effortlessly.\u003C\u002Fp>\n\u003Ch4>Streamlined Workflow\u003C\u002Fh4>\n\u003Cp>Quickly create new posts or edit your current posts’ titles, contents, and publishing times—right from the Editorial Calendar! Your workflow has never been smoother.\u003C\u002Fp>\n\u003Ch4>Watch the video\u003C\u002Fh4>\n\u003Cdiv class=\"embed-vimeo\" style=\"text-align: center;\">\u003Ciframe loading=\"lazy\" src=\"https:\u002F\u002Fplayer.vimeo.com\u002Fvideo\u002F272028435\" width=\"750\" height=\"422\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen>\u003C\u002Fiframe>\u003C\u002Fdiv>\n\u003Ch4>Key Features\u003C\u002Fh4>\n\u003Cp>👉 At-a-Glance Overview: View all upcoming posts and their scheduled dates in one simple layout.\u003Cbr \u002F>\n👉 Drag-and-Drop Scheduling: Easily move posts to new dates with a quick drag and drop.\u003Cbr \u002F>\n👉 Drafts Drawer: Keep all your drafts handy, organized, and ready for scheduling.\u003Cbr \u002F>\n👉 Quick Edits: Modify titles, content, and post times directly within the calendar.\u003Cbr \u002F>\n👉 Manage Drafts & Published Posts: Seamlessly handle both drafts and live posts.\u003Cbr \u002F>\n👉 Post Status Visibility: Instantly see the status of each post.\u003Cbr \u002F>\n👉 Collaborate with Multiple Authors: Perfect for teams with multiple contributors.\u003C\u002Fp>\n\u003Ch4>Join Our Community\u003C\u002Fh4>\n\u003Cp>Your feedback drives our improvements! If you have questions, feature requests, or ideas, reach out to us at help@editorialcalendarwp.com.\u003C\u002Fp>\n\u003Ch4>Available in Multiple Languages\u003C\u002Fh4>\n\u003Cp>Thanks to our multilingual contributors! To keep translations up to date or bring the plugin to new languages, please contact us at help@editorialcalendarwp.com.\u003C\u002Fp>\n","0ddcemmihs4a843ekhaoofzosrunf4bl Editorial Calendar allows you to view all your posts, schedule post, make quick edits, and manage your blog by draggi &hellip;",20000,1507802,98,"2026-03-03T10:06:00.000Z","4.0",[54,67,68,24],"manage-post","quickedit-post","https:\u002F\u002Feditorialcalendarwp.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feditorial-calendar.3.9.2.zip",93,4,"2025-12-20 00:00:00",{"slug":75,"name":76,"version":77,"author":78,"author_profile":79,"description":80,"short_description":81,"active_installs":82,"downloaded":83,"rating":84,"num_ratings":85,"last_updated":86,"tested_up_to":87,"requires_at_least":17,"requires_php":25,"tags":88,"homepage":25,"download_link":94,"security_score":95,"vuln_count":11,"unpatched_count":11,"last_vuln_date":27,"fetched_at":28},"wp-post-expires","WP Post Expires","1.2.5","X-NicON","https:\u002F\u002Fprofiles.wordpress.org\u002Fx-nicon\u002F","\u003Cp>A simple plugin that allows to set the date for the posts, after which will be performed one of 3 actions: “Add prefix to title”, “Move to drafts”, “Move to trash”.\u003C\u002Fp>\n\u003Ch4>Features:\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Set post expire date and time\u003C\u002Fli>\n\u003Cli>Support custom post type (post and pages by default)\u003C\u002Fli>\n\u003Cli>Action for expired posts: move to drafts, move to trash or add custom prefix for title\u003C\u002Fli>\n\u003Cli>Adds class “post-expired” to post that expired on the site and in admin interface (for custom styles in theme)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Use in theme:\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>XNPostExpires::isExpired($post_id)\n\nXNPostExpires::dateExpiration($post_id, $date_format)\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Plugin adds post expires time after which will be performed actions: add prefix to title, move to drafts or trash.",2000,35993,66,14,"2020-11-02T17:13:00.000Z","5.5.18",[89,90,91,92,93],"expiration","expire","expired-post","posts-expiring","wordpress-post-expiry","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-post-expires.zip",85,{"slug":97,"name":98,"version":99,"author":100,"author_profile":101,"description":102,"short_description":103,"active_installs":104,"downloaded":105,"rating":106,"num_ratings":107,"last_updated":108,"tested_up_to":109,"requires_at_least":110,"requires_php":111,"tags":112,"homepage":114,"download_link":115,"security_score":95,"vuln_count":11,"unpatched_count":11,"last_vuln_date":27,"fetched_at":28},"expiring-posts","Expiring Posts","1.3","Ivan","https:\u002F\u002Fprofiles.wordpress.org\u002Fivankk\u002F","\u003Cp>This plugin adds functionality to expire a post on a given date.\u003C\u002Fp>\n\u003Cp>This plugin currently only works with the classical editor.\u003C\u002Fp>\n\u003Cp>It does this by adding a new “Expires” date field in the Publish box.\u003C\u002Fp>\n\u003Cp>By default posts don’t expire, but you can add a date instead.\u003C\u002Fp>\n\u003Cp>Once that date is reached, the post is marked as expired and is no longer visible to the end user.\u003C\u002Fp>\n\u003Ch3>Dev Notes\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Dev occurs via https:\u002F\u002Fgithub.com\u002Fivankruchkoff\u002Fwp-expiring-posts\u003C\u002Fli>\n\u003Cli>the new post status is \u003Ccode>expired\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>a filter called \u003Ccode>exp_disable_expiration_for_this_post\u003C\u002Fcode> exists to disable this feature on a per-post basis.\u003C\u002Fli>\n\u003C\u002Ful>\n","This plugin adds functionality to expire a post on a given date.",1000,5499,70,2,"2022-01-23T23:52:00.000Z","5.9.13","3.0.1","5.3",[90,49,113,97,23],"expiring","https:\u002F\u002Fgithub.com\u002Fivankruchkoff\u002Fwp-expiring-posts","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fexpiring-posts.1.3.zip",{"slug":117,"name":118,"version":119,"author":120,"author_profile":121,"description":122,"short_description":123,"active_installs":124,"downloaded":125,"rating":13,"num_ratings":14,"last_updated":126,"tested_up_to":16,"requires_at_least":127,"requires_php":128,"tags":129,"homepage":25,"download_link":132,"security_score":13,"vuln_count":11,"unpatched_count":11,"last_vuln_date":27,"fetched_at":28},"ninja-auto-post-expire","Auto Post Expire","1.2","ninjatech24","https:\u002F\u002Fprofiles.wordpress.org\u002Fninjatech24\u002F","\u003Cp>This plugin allows you to automatically set an expiration date for your posts, ensuring they are managed efficiently over time.\u003C\u002Fp>\n\u003Cp>When a post reaches its expiration date, it is automatically moved to draft, making it no longer visible on the front end but still available for editing or future publication.\u003C\u002Fp>\n\u003Cp>This feature is ideal for content that is time-sensitive, such as promotions, announcements, or event-related posts, helping you maintain a clean and relevant website without needing to manually manage outdated content.\u003C\u002Fp>\n\u003Cp>You can configure the expiration period to suit your needs, streamlining post lifecycle management.\u003C\u002Fp>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\n\u003Cp>Automatic Post Expiration: Set an expiration date for posts, after which they are automatically moved to draft status.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Customizable Expiration Date: Choose a specific date for posts to expire.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Expiration Status Indicator: Clearly see which posts have expiration dates and when they are set to expire.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Post Type Compatibility: Supports various post types, including blog posts, custom posts, and more.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>User-Friendly Interface: Simple and intuitive settings within the WordPress admin panel for easy configuration.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>How it works\u003C\u002Fh3>\n\u003Cp>After creating or editing a post, you can set a specific expiration date or by edit posts. This is typically done via a simple calendar picker.\u003C\u002Fp>\n\u003Cp>The plugin automatically monitors all posts with expiration dates, checking the current date against the set expiration.\u003C\u002Fp>\n\u003Cp>When a post reaches its expiration date, the plugin automatically moves it to draft status. This makes the post invisible to users on the front end but still accessible for you in the backend for review, edits, or republishing.\u003C\u002Fp>\n\u003Cp>The plugin works with most post types, including custom post types.\u003C\u002Fp>\n\u003Cp>We’d love to hear your feedback or suggestions for additional features!\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This plugin is free software; you can redistribute it and\u002For modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\u003C\u002Fp>\n","Sets an expiration date for posts, auto moving them to draft after the set period.",800,3158,"2025-06-20T12:30:00.000Z","5.8","5.2.4",[20,130,90,131],"custom-post-expire","post-expire","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fninja-auto-post-expire.1.2.zip",{"attackSurface":134,"codeSignals":221,"taintFlows":258,"riskAssessment":294,"analyzedAt":300},{"hooks":135,"ajaxHandlers":205,"restRoutes":206,"shortcodes":215,"cronEvents":216,"entryPointCount":14,"unprotectedCount":14},[136,142,146,150,154,159,162,167,171,175,179,183,188,192,195,200],{"type":137,"name":138,"callback":139,"file":140,"line":141},"action","aitepc_check_expiry_date_event","aitepc_check_expired_posts","ait-easy-post-customization.php",68,{"type":137,"name":143,"callback":144,"file":140,"line":145},"init","aitepc_register_post_meta",107,{"type":137,"name":147,"callback":148,"file":140,"line":149},"plugins_loaded","aitepc_load_textdomain",162,{"type":137,"name":151,"callback":152,"file":140,"line":153},"admin_init","aitepc_register_settings",178,{"type":137,"name":155,"callback":156,"file":157,"line":158},"admin_enqueue_scripts","aitepc_enqueue_scripts","functions.php",55,{"type":137,"name":155,"callback":160,"file":157,"line":161},"aitepc_enqueue_gutenberg_sidebar",153,{"type":137,"name":163,"callback":164,"file":165,"line":166},"add_meta_boxes","aitepc_add_custom_fields_metabox","plugin-files\\aitepc-custom-fields.php",41,{"type":137,"name":168,"callback":169,"file":165,"line":170},"save_post","aitepc_save_custom_fields_metabox",102,{"type":137,"name":151,"callback":172,"file":173,"line":174},"aitepc_register_email_notification_settings","plugin-files\\aitepc-email-notifications.php",61,{"type":137,"name":176,"callback":177,"file":173,"line":178},"aitepc_check_expiry_notifications_event","aitepc_check_expiry_notifications",155,{"type":137,"name":151,"callback":180,"file":181,"line":182},"aitepc_register_expiry_action_settings","plugin-files\\aitepc-expiry-actions.php",59,{"type":184,"name":185,"callback":186,"priority":14,"file":181,"line":187},"filter","pre_handle_404","aitepc_pre_handle_404",235,{"type":137,"name":163,"callback":189,"file":190,"line":191},"aitepc_add_expiry_date_metabox_to_selected_post_types","plugin-files\\aitepc-expiry-metabox.php",39,{"type":137,"name":168,"callback":193,"file":190,"line":194},"aitepc_save_expiry_date_metabox",216,{"type":137,"name":196,"callback":197,"file":198,"line":199},"rest_api_init","aitepc_register_rest_routes","plugin-files\\aitepc-rest-api.php",46,{"type":137,"name":201,"callback":202,"file":203,"line":204},"admin_menu","aitepc_expiry_date_menu_page","plugin-files\\aitepc-settings.php",36,[],[207],{"namespace":208,"route":209,"methods":210,"callback":212,"permissionCallback":213,"file":198,"line":214},"aitepc\u002Fv1","\u002Funsubscribe",[211],"GET","aitepc_rest_unsubscribe_callback","__return_true",21,[],[217,219],{"hook":138,"callback":138,"file":140,"line":218},33,{"hook":176,"callback":176,"file":140,"line":220},38,{"dangerousFunctions":222,"sqlUsage":223,"outputEscaping":225,"fileOperations":11,"externalRequests":11,"nonceChecks":256,"capabilityChecks":72,"bundledLibraries":257},[],{"prepared":11,"raw":11,"locations":224},[],{"escaped":226,"rawEcho":85,"locations":227},111,[228,231,233,235,237,239,241,243,245,246,248,250,252,254],{"file":173,"line":229,"context":230},279,"raw output",{"file":173,"line":232,"context":230},290,{"file":173,"line":234,"context":230},327,{"file":173,"line":236,"context":230},328,{"file":173,"line":238,"context":230},337,{"file":173,"line":240,"context":230},342,{"file":173,"line":242,"context":230},370,{"file":181,"line":244,"context":230},65,{"file":181,"line":95,"context":230},{"file":203,"line":247,"context":230},354,{"file":203,"line":249,"context":230},372,{"file":203,"line":251,"context":230},379,{"file":203,"line":253,"context":230},397,{"file":203,"line":255,"context":230},410,3,[],[259,278],{"entryPoint":260,"graph":261,"unsanitizedCount":11,"severity":277},"aitepc_display_custom_fields_form (plugin-files\\aitepc-settings.php:426)",{"nodes":262,"edges":274},[263,268],{"id":264,"type":265,"label":266,"file":203,"line":267},"n0","source","$_GET",428,{"id":269,"type":270,"label":271,"file":203,"line":272,"wp_function":273},"n1","sink","echo() [XSS]",440,"echo",[275],{"from":264,"to":269,"sanitized":276},true,"low",{"entryPoint":279,"graph":280,"unsanitizedCount":11,"severity":277},"\u003Caitepc-settings> (plugin-files\\aitepc-settings.php:0)",{"nodes":281,"edges":291},[282,283,284,288],{"id":264,"type":265,"label":266,"file":203,"line":267},{"id":269,"type":270,"label":271,"file":203,"line":272,"wp_function":273},{"id":285,"type":265,"label":286,"file":203,"line":287},"n2","$_POST (x3)",406,{"id":289,"type":270,"label":271,"file":203,"line":290,"wp_function":273},"n3",547,[292,293],{"from":264,"to":269,"sanitized":276},{"from":285,"to":289,"sanitized":276},{"summary":295,"deductions":296},"The \"ait-easy-post-customization\" v2.1.0 plugin demonstrates a generally good security posture with no recorded vulnerabilities or critical code signals. The absence of dangerous functions, raw SQL queries, file operations, and external HTTP requests are all positive indicators.  The plugin also employs nonce and capability checks, and a high percentage of output is properly escaped, suggesting careful development practices.\n\nHowever, a significant concern arises from the static analysis revealing one unprotected REST API route. This represents a potential entry point for attackers that lacks proper authorization checks. While taint analysis found no issues, the presence of an unprotected endpoint warrants attention. The plugin's clean vulnerability history is a strength, suggesting a low likelihood of severe, exploitable flaws. Overall, the plugin is well-developed but requires attention to the identified REST API vulnerability to fully secure its attack surface.",[297],{"reason":298,"points":299},"Unprotected REST API route detected",10,"2026-03-17T06:54:35.025Z",{"wat":302,"direct":315},{"assetPaths":303,"generatorPatterns":308,"scriptPaths":309,"versionParams":310},[304,305,306,307],"\u002Fwp-content\u002Fplugins\u002Fait-easy-post-customization\u002Fplugin-files\u002Fcss\u002Fadmin-style.css","\u002Fwp-content\u002Fplugins\u002Fait-easy-post-customization\u002Fplugin-files\u002Fcss\u002Ffrontend-style.css","\u002Fwp-content\u002Fplugins\u002Fait-easy-post-customization\u002Fplugin-files\u002Fjs\u002Fadmin-script.js","\u002Fwp-content\u002Fplugins\u002Fait-easy-post-customization\u002Fplugin-files\u002Fjs\u002Ffrontend-script.js",[],[306,307],[311,312,313,314],"ait-easy-post-customization\u002Fplugin-files\u002Fcss\u002Fadmin-style.css?ver=","ait-easy-post-customization\u002Fplugin-files\u002Fcss\u002Ffrontend-style.css?ver=","ait-easy-post-customization\u002Fplugin-files\u002Fjs\u002Fadmin-script.js?ver=","ait-easy-post-customization\u002Fplugin-files\u002Fjs\u002Ffrontend-script.js?ver=",{"cssClasses":316,"htmlComments":318,"htmlAttributes":319,"restEndpoints":322,"jsGlobals":325,"shortcodeOutput":327},[317],"aitepc-expiry-date-metabox",[],[320,321],"data-aitepc-post-id","data-aitepc-expiry-action",[323,324],"\u002Fwp-json\u002Faitepc\u002Fv1\u002Fsettings","\u002Fwp-json\u002Faitepc\u002Fv1\u002Fpost",[326],"aitepc_localize",[]]