[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f4TRYn5CqVE6lLmjZtwdI9owdjEUsYByDJi_6XrBwBhQ":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":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30,"vulnerabilities":31,"developer":32,"crawl_stats":29,"alternatives":40,"analysis":131,"fingerprints":281},"advanced-permalinks","Advanced Permalinks","0.1.21","John Godley","https:\u002F\u002Fprofiles.wordpress.org\u002Fjohnny5\u002F","\u003Cp>Provides advanced permalink options that allow you to:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Have multiple permalink structures.  Permalinks can be assigned to posts or ranges of posts\u003C\u002Fli>\n\u003Cli>301 redirect old permalink structures (many structures are allowed)\u003C\u002Fli>\n\u003Cli>Category-specific permalinks.  Posts in certain categories can be assigned a permalink structure\u003C\u002Fli>\n\u003Cli>No need to have a base to the category permalink!\u003C\u002Fli>\n\u003Cli>Change author permalinks\u003C\u002Fli>\n\u003Cli>Enable periods in permalinks – perfect for migrating old websites\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>All permalinks are real permalinks and do not result in 301 redirections.  \u003Cem>This means you can change your permalink structure without\u003Cbr \u002F>\naffecting any existing posts and without losing any page rank.\u003C\u002Fem>  Any attempts to access posts in the wrong permalink structure will be\u003Cbr \u002F>\nautomatically redirected to the correct URL.\u003C\u002Fp>\n\u003Cp>Advanced Permalinks is available in:\u003Cbr \u002F>\n* English\u003Cbr \u002F>\n* Bulgarian (thanks to Alexander Dichev)\u003Cbr \u002F>\n* Belorussian (thanks to Marcis Gasuns)\u003Cbr \u002F>\n* Russian (thanks to Slava Mikheev)\u003Cbr \u002F>\n* Uzbekistan (thanks to Alexandra Bolshova)\u003Cbr \u002F>\n* Lithuanian (thanks to Nata Strazda at Web Hub)\u003C\u002Fp>\n\u003Ch4>Example 1: Migrating a permalink structure\u003C\u002Fh4>\n\u003Cp>Say you have an existing site with the default WordPress permalink structure \u003Ccode>\u002F%year%\u002F%monthnum%\u002F%day%\u002F%postname%\u002F\u003C\u002Fcode> and you decide you want to change it\u003Cbr \u002F>\nto a more keyword-heavy \u003Ccode>\u002F%category%\u002F%postname%\u002F\u003C\u002Fcode>.  If you change the permalink setting then all your old posts will be moved, and you will suffer a major loss\u003Cbr \u002F>\nof page rank (not to mention a lot of 404s).  With Advanced Permalinks you can define a specific permalink structure for all your old\u003Cbr \u002F>\nposts and then create a new permalink structure for new ones.  All your old posts will carry on living at the same URL as before, but all\u003Cbr \u002F>\nnew posts will be created using your new structure.\u003C\u002Fp>\n\u003Ch4>Example 2: Category-specific permalinks\u003C\u002Fh4>\n\u003Cp>Sometimes you want posts in a certain category to appear elsewhere on your site.  For example, your usual permalink structure may result in:\u003C\u002Fp>\n\u003Cp>\u002F2007\u002F05\u002F02\u002Fmy-review\u003C\u002Fp>\n\u003Cp>However, you want posts in the ‘review’ category to appear as:\u003C\u002Fp>\n\u003Cp>\u002Freviews\u002Fmy-review\u003C\u002Fp>\n\u003Cp>Using Advanced Permalinks this is not a problem.\u003C\u002Fp>\n\u003Ch3>Documentation\u003C\u002Fh3>\n\u003Cp>Full documentation can be found on the \u003Ca href=\"http:\u002F\u002Furbangiraffe.com\u002Fplugins\u002Fadvanced-permalinks\u002F\" rel=\"nofollow ugc\">Advanced Permalinks Page\u003C\u002Fa> page.\u003C\u002Fp>\n","Allows multiple permalink structures and category-specific permalinks without needing redirects.",400,93342,54,9,"2012-05-05T09:05:00.000Z","2.9.2","2.0","",[20,21,22,23,24],"permalink","permalinks","redirect","seo","url","http:\u002F\u002Furbangiraffe.com\u002Fplugins\u002Fadvanced-permalinks\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fadvanced-permalinks.zip",85,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":33,"display_name":7,"profile_url":8,"plugin_count":34,"total_installs":35,"avg_security_score":36,"avg_patch_time_days":37,"trust_score":38,"computed_at":39},"johnny5",14,2115120,87,4069,70,"2026-04-04T07:02:49.029Z",[41,63,82,99,118],{"slug":42,"name":43,"version":44,"author":45,"author_profile":46,"description":47,"short_description":48,"active_installs":49,"downloaded":50,"rating":51,"num_ratings":52,"last_updated":53,"tested_up_to":54,"requires_at_least":55,"requires_php":18,"tags":56,"homepage":61,"download_link":62,"security_score":51,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"php-to-pages","Legacy URL Suffix & SEO Preserver","2.1","Himanshu Parashar","https:\u002F\u002Fprofiles.wordpress.org\u002Funiquecodergmailcom\u002F","\u003Cp>\u003Cstrong>Don’t Let Your SEO Rank Vanish During a Migration.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Migrating a legacy website to WordPress is a massive win for your workflow, but it can be a disaster for your search engine rankings. If your old site used .php extensions (e.g., \u003Ccode>domain.com\u002Fabout-us.php\u003C\u002Fcode>), moving to standard WordPress “Clean Permalinks” will turn every one of those established links into a 404 Page Not Found error.\u003C\u002Fp>\n\u003Cp>PHP to Pages is the lightweight, “set it and forget it” solution that bridges the gap between your legacy architecture and modern WordPress flexibility.\u003C\u002Fp>\n\u003Ch3>The Value Proposition\u003C\u002Fh3>\n\u003Cblockquote>\n\u003Cp>“Seamlessly transition from legacy PHP sites to WordPress while maintaining 100% URL consistency. No complex .htaccess coding, no broken backlinks, and zero SEO drop-off.”\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3>Why Choose PHP to Pages?\u003C\u002Fh3>\n\u003Cp>When you change your URL structure, you lose the “link juice” accumulated over years. This plugin ensures that your existing backlinks from social media, external blogs, and Google search results remain active and functional.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Instantly Append .php Suffix:\u003C\u002Fstrong> Automatically transforms \u003Ccode>yoursite.com\u002Fsample-page\u002F\u003C\u002Fcode> into \u003Ccode>yoursite.com\u002Fsample-page.php\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SEO Preservation:\u003C\u002Fstrong> Keep your indexed URLs exactly as they appear in Google Search Console to avoid the dreaded “re-indexing” phase.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Zero-Configuration Setup:\u003C\u002Fstrong> No need to dive into your server’s .htaccess or Nginx config files. Just activate and your permalinks update instantly.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Developer Friendly:\u003C\u002Fstrong> Built with standard WordPress Rewrites API, ensuring compatibility with most well-coded themes and plugins.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Lightweight Performance:\u003C\u002Fstrong> No bloat, no database-heavy queries. It simply tells WordPress how to read and display your URLs.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Who Is This For?\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Agencies & Freelancers:\u003C\u002Fstrong> Moving a long-term client from a static PHP site to WordPress.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SEO Specialists:\u003C\u002Fstrong> Ensuring that a site migration doesn’t result in a loss of organic traffic.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Legacy Site Owners:\u003C\u002Fstrong> Anyone who has a decade’s worth of backlinks pointing to .php files and doesn’t want to manage thousands of manual 301 redirects.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>How It Works\u003C\u002Fh3>\n\u003Col>\n\u003Cli>\u003Cstrong>Install & Activate:\u003C\u002Fstrong> Simply upload the plugin to your WordPress dashboard.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Permalinks Refresh:\u003C\u002Fstrong> Go to \u003Cstrong>Settings > Permalinks\u003C\u002Fstrong> and click “Save Changes” to flush your rewrite rules.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Done:\u003C\u002Fstrong> Your pages will now resolve with the .php extension.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>Example\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Before:\u003C\u002Fstrong> \u003Ccode>http:\u002F\u002Fsfdcbeginner.com\u002Fchild-parent-communication-without-event\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>After:\u003C\u002Fstrong> \u003Ccode>http:\u002F\u002Fsfdcbeginner.com\u002Fchild-parent-communication-without-event.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n","Maintain SEO rankings with custom URL suffixes like .php or .html. Perfect for legacy site migrations, fixing 404s, and preserving link juice.",200,11174,100,1,"2026-02-08T19:14:00.000Z","6.9.4","2.5.1",[57,58,21,59,60],"301-redirect","legacy-site","seo-migration","url-suffix","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fphp-to-pages\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fphp-to-pages.2.1.zip",{"slug":64,"name":65,"version":66,"author":67,"author_profile":68,"description":69,"short_description":70,"active_installs":71,"downloaded":72,"rating":73,"num_ratings":74,"last_updated":75,"tested_up_to":76,"requires_at_least":77,"requires_php":18,"tags":78,"homepage":80,"download_link":81,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"change-permalink-helper","Change Permalink Helper","1.1.1","Syde GmbH (formerly Inpsyde)","https:\u002F\u002Fprofiles.wordpress.org\u002Finpsyde\u002F","\u003Cp>When you change the permalink structure then this is a problem for bookmarks of users and also for search engines to link to your posts. This plugin uses the slug of the new url and search for a ID in the database of WordPress. If it finds a post according to the slug, the Plugin will redirect to the correct post and send a header message “moved permanently 301” to change the url on the index of search engines.\u003C\u002Fp>\n","It checks the Permalink and redirects to the new URL, if it doesn't exist. It sends the header message \"moved permanently 301\"",1000,30749,94,33,"2020-04-24T14:28:00.000Z","5.4.19","2.7",[79,20,22,23,24],"301","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fchange-permalink-helper","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fchange-permalink-helper.zip",{"slug":83,"name":84,"version":85,"author":86,"author_profile":87,"description":88,"short_description":89,"active_installs":90,"downloaded":91,"rating":51,"num_ratings":52,"last_updated":92,"tested_up_to":93,"requires_at_least":94,"requires_php":18,"tags":95,"homepage":97,"download_link":98,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"redirect-old-links","Redirect Old Links","1.0.0","ryanshoover","https:\u002F\u002Fprofiles.wordpress.org\u002Fryanshoover\u002F","\u003Cp>Changing your link structure in WordPress can lead to all of your old links breaking and returning a “404”. But no more! If someone goes to an old link for your site, I’ll find the new link and redirect them there automatically.\u003C\u002Fp>\n\u003Cp>No configuration. No one-by-one setting of the new link structures. No wrestling with complicated regex patterns. Just install me and relax.\u003C\u002Fp>\n\u003Cp>\u003Cem>Redirect 404s\u003C\u002Fem> works with posts, pages, and custom post types (like ecommerce products).\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Note – the plugin only works for permalink structures where the last “chunk” of the URL is the post name (also called the slug).\u003C\u002Fli>\n\u003C\u002Ful>\n","Did you change your permalink structure and now have old links \"404ing\"? I'll redirect those old links to their new one for you.",10,1581,"2017-03-20T20:20:00.000Z","4.7.32","3.0",[96,21,22,23],"404","https:\u002F\u002Fgithub.com\u002Fryanshoover\u002Fredirect-old-links","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fredirect-old-links.1.0.0.zip",{"slug":100,"name":101,"version":85,"author":102,"author_profile":103,"description":104,"short_description":105,"active_installs":28,"downloaded":106,"rating":28,"num_ratings":28,"last_updated":107,"tested_up_to":54,"requires_at_least":108,"requires_php":109,"tags":110,"homepage":116,"download_link":117,"security_score":51,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"nested-blog-posts","Nested Blog Posts","Yaver Abbas","https:\u002F\u002Fprofiles.wordpress.org\u002Fwwhry\u002F","\u003Cp>Nested Blog Posts makes the built-in \u003Cstrong>Posts\u003C\u002Fstrong> post type behave more like \u003Cstrong>Pages\u003C\u002Fstrong>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Adds a \u003Cstrong>Parent\u003C\u002Fstrong> dropdown to Posts.\u003C\u002Fli>\n\u003Cli>Generates hierarchical permalinks like \u003Ccode>\u002Fparent\u002Fchild\u002F\u003C\u002Fcode> (supports unlimited depth).\u003C\u002Fli>\n\u003Cli>Routes nested URLs correctly so you don’t get 404s or forced redirects to \u003Ccode>\u002Fchild\u002F\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This plugin does not contact external servers and does not collect user data.\u003C\u002Fp>\n\u003Ch3>How to use\u003C\u002Fh3>\n\u003Col>\n\u003Cli>\u003Cstrong>Enable the plugin\u003C\u002Fstrong> (Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Nested Blog Posts \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Enabled).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Create a Parent blog post\u003C\u002Fstrong> (a normal Post).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Create a Child blog post\u003C\u002Fstrong> and set its \u003Cstrong>Parent\u003C\u002Fstrong> in the editor sidebar (Post \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Parent).\u003C\u002Fli>\n\u003Cli>To create a deeper tree, set the new post’s \u003Cstrong>Parent\u003C\u002Fstrong> to the previous child.\u003Cbr \u002F>\nExample: \u003Ccode>\u002Fparent\u002Fchild\u002Fgrandchild\u002F\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>If you disable the feature later, the plugin automatically refreshes rewrite rules and WordPress will fall back to normal post behavior.\u003C\u002Fli>\n\u003C\u002Fol>\n","Enable parent\u002Fchild hierarchy for standard Posts and generate nested permalinks like \u002Fparent\u002Fchild\u002F (unlimited depth).",164,"2026-02-17T21:10:00.000Z","6.3","7.4",[111,112,113,114,115],"hierarchical-posts","nested-permalinks","nested-posts","parent-child-posts","seo-friendly-urls","https:\u002F\u002Fgithub.com\u002Fyaverabbas\u002Fnested-blog-posts","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fnested-blog-posts.1.0.0.zip",{"slug":119,"name":120,"version":121,"author":122,"author_profile":123,"description":124,"short_description":125,"active_installs":28,"downloaded":106,"rating":28,"num_ratings":28,"last_updated":126,"tested_up_to":54,"requires_at_least":127,"requires_php":109,"tags":128,"homepage":18,"download_link":130,"security_score":51,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"url-pathfinder","URL Pathfinder","1.0.2","Presskopp","https:\u002F\u002Fprofiles.wordpress.org\u002Fpresskopp\u002F","\u003Cp>URL Pathfinder is a powerful WordPress plugin that helps reduce 404 errors by intelligently redirecting visitors to the closest matching content on your website. Using advanced fuzzy matching algorithms, the plugin analyzes broken URL requests and finds the most relevant post or page to redirect visitors to.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Key Features:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Intelligent 404 handling with fuzzy matching\u003C\u002Fli>\n\u003Cli>Automatic redirection to closest matching content\u003C\u002Fli>\n\u003Cli>Rate limiting to prevent abuse\u003C\u002Fli>\n\u003Cli>Caching for improved performance\u003C\u002Fli>\n\u003Cli>Admin bar notice to enable\u002Fdisable the plugin without deactivating it\u003C\u002Fli>\n\u003Cli>Support for multiple post types\u003C\u002Fli>\n\u003Cli>Bad URL filtering\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Usage\u003C\u002Fh3>\n\u003Cp>Once activated, URL Pathfinder automatically handles 404 errors without requiring any configuration. The plugin:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Detects when a visitor encounters a 404 error\u003C\u002Fli>\n\u003Cli>Analyzes the requested URL\u003C\u002Fli>\n\u003Cli>Searches for the closest matching permalink\u003C\u002Fli>\n\u003Cli>Redirects the visitor to the best matching page or post\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Admin Bar Control:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>You can quickly enable or disable the plugin using the admin bar notice:\u003Cbr \u002F>\n– Click on “URL Pathfinder ON” (enabled) or “URL Pathfinder OFF” (disabled)\u003Cbr \u002F>\n– Changes take effect immediately without page reload\u003C\u002Fp>\n\u003Ch3>Configuration\u003C\u002Fh3>\n\u003Cp>The plugin comes with sensible defaults and works out of the box, including:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Rate Limiting\u003C\u002Fstrong>: Prevents excessive redirect attempts\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Bad URL Filtering\u003C\u002Fstrong>: Excludes system and bot URLs from processing\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Caching\u003C\u002Fstrong>: Improves performance by caching fuzzy matching results\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Technical Details\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Performance:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Caching reduces database queries\u003C\u002Fli>\n\u003Cli>Rate limiting prevents performance issues\u003C\u002Fli>\n\u003Cli>Early exit for blocked URLs\u003C\u002Fli>\n\u003Cli>Efficient fuzzy matching algorithm\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Support\u003C\u002Fh3>\n\u003Cp>For support and feature requests, create a topic on https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Furl-pathfinder\u002F\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This plugin is licensed under the GPL v2 or later.\u003C\u002Fp>\n\u003Cp>Copyright (c) Presskopp – https:\u002F\u002Fpresskopp.com\u002F\u003C\u002Fp>\n","Automatically redirects 404 URLs to the closest matching permalink using fuzzy matching.","2025-12-22T09:26:00.000Z","5.0",[57,20,22,23,129],"url-management","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Furl-pathfinder.1.0.2.zip",{"attackSurface":132,"codeSignals":197,"taintFlows":248,"riskAssessment":268,"analyzedAt":280},{"hooks":133,"ajaxHandlers":193,"restRoutes":194,"shortcodes":195,"cronEvents":196,"entryPointCount":28,"unprotectedCount":28},[134,139,143,147,151,154,158,161,163,166,169,172,175,178,181,184,186,189],{"type":135,"name":136,"callback":136,"priority":52,"file":137,"line":138},"action","edit_category_form","advanced-permalinks.php",41,{"type":135,"name":140,"callback":141,"file":137,"line":142},"edit_category","anonymous",42,{"type":135,"name":144,"callback":145,"file":137,"line":146},"load-options-permalink.php","admin_head",43,{"type":135,"name":148,"callback":149,"file":137,"line":150},"activate_advanced-permalinks\u002Fadvanced-permalinks.php","flush_rules",46,{"type":135,"name":152,"callback":149,"file":137,"line":153},"deactivate_advanced-permalinks\u002Fadvanced-permalinks.php",47,{"type":155,"name":156,"callback":141,"file":137,"line":157},"filter","query_vars",50,{"type":155,"name":159,"callback":141,"file":137,"line":160},"post_rewrite_rules",53,{"type":155,"name":162,"callback":141,"file":137,"line":13},"author_rewrite_rules",{"type":155,"name":164,"callback":141,"file":137,"line":165},"category_rewrite_rules",55,{"type":155,"name":167,"callback":141,"file":137,"line":168},"rewrite_rules_array",56,{"type":155,"name":170,"callback":170,"priority":52,"file":137,"line":171},"post_link",58,{"type":155,"name":173,"callback":141,"file":137,"line":174},"the_posts",59,{"type":135,"name":176,"callback":141,"file":137,"line":177},"parse_request",60,{"type":135,"name":179,"callback":141,"file":137,"line":180},"init",62,{"type":135,"name":182,"callback":141,"file":137,"line":183},"shutdown",63,{"type":135,"name":185,"callback":141,"file":137,"line":51},"admin_notices",{"type":155,"name":187,"callback":141,"file":137,"line":188},"sanitize_title",132,{"type":135,"name":179,"callback":190,"file":191,"line":192},"load_locale","plugin.php",121,[],[],[],[],{"dangerousFunctions":198,"sqlUsage":199,"outputEscaping":204,"fileOperations":28,"externalRequests":28,"nonceChecks":28,"capabilityChecks":52,"bundledLibraries":247},[],{"prepared":28,"raw":52,"locations":200},[201],{"file":137,"line":202,"context":203},268,"$wpdb->get_var() with variable interpolation",{"escaped":160,"rawEcho":205,"locations":206},18,[207,210,212,214,216,219,222,225,227,230,232,235,237,239,241,243,244,245],{"file":191,"line":208,"context":209},213,"raw output",{"file":191,"line":211,"context":209},236,{"file":191,"line":213,"context":209},288,{"file":191,"line":215,"context":209},308,{"file":217,"line":218,"context":209},"view\\admin\\add_migrate.php",11,{"file":220,"line":221,"context":209},"view\\admin\\advanced.php",17,{"file":223,"line":224,"context":209},"view\\admin\\edit.php",5,{"file":226,"line":14,"context":209},"view\\admin\\migrate.php",{"file":228,"line":229,"context":209},"view\\admin\\migrate_edit.php",2,{"file":228,"line":231,"context":209},3,{"file":233,"line":234,"context":209},"view\\admin\\migrate_item.php",4,{"file":236,"line":229,"context":209},"view\\admin\\permalinks.php",{"file":238,"line":234,"context":209},"view\\admin\\permalinks_item.php",{"file":238,"line":240,"context":209},8,{"file":242,"line":231,"context":209},"view\\admin\\submenu.php",{"file":242,"line":234,"context":209},{"file":242,"line":224,"context":209},{"file":242,"line":246,"context":209},6,[],[249],{"entryPoint":250,"graph":251,"unsanitizedCount":52,"severity":267},"\u003Cadvanced-permalinks> (advanced-permalinks.php:0)",{"nodes":252,"edges":264},[253,258],{"id":254,"type":255,"label":256,"file":137,"line":257},"n0","source","$_POST",349,{"id":259,"type":260,"label":261,"file":137,"line":262,"wp_function":263},"n1","sink","update_option() [Settings Manipulation]",525,"update_option",[265],{"from":254,"to":259,"sanitized":266},false,"low",{"summary":269,"deductions":270},"The advanced-permalinks v0.1.21 plugin exhibits a generally positive security posture based on the static analysis. The absence of AJAX handlers, REST API routes, shortcodes, and cron events significantly limits the potential attack surface. Furthermore, the lack of dangerous functions and file operations is a strong indicator of good coding practices. The presence of a capability check is also a positive sign for access control.\n\nHowever, there are a few areas of concern. The plugin's single SQL query is not using prepared statements, which introduces a potential risk for SQL injection if user input is not properly sanitized before being used in this query. While the taint analysis shows only one flow with unsanitized paths, the fact that it exists and is not flagged as critical or high severity warrants attention. The 75% proper output escaping is good but leaves room for potential XSS vulnerabilities in the remaining 25% of outputs. The complete lack of nonce checks, while not directly tied to an entry point in this analysis, is a standard security practice that is missing.\n\nThe vulnerability history is exceptionally clean, with zero recorded CVEs. This indicates a history of responsible development and a lack of exploitable vulnerabilities in the past. The plugin's current version has no known unpatched vulnerabilities. Overall, advanced-permalinks v0.1.21 appears to be a relatively secure plugin, with its main weaknesses being the un-prepared SQL query and the general absence of nonce checks, alongside the potential for XSS in unescaped outputs.",[271,274,276,278],{"reason":272,"points":273},"Raw SQL query without prepared statements",7,{"reason":275,"points":224},"Flows with unsanitized paths",{"reason":277,"points":224},"Output escaping not fully implemented (25% unescaped)",{"reason":279,"points":224},"No nonce checks implemented","2026-03-16T19:47:09.699Z",{"wat":282,"direct":291},{"assetPaths":283,"generatorPatterns":286,"scriptPaths":287,"versionParams":288},[284,285],"\u002Fwp-content\u002Fplugins\u002Fadvanced-permalinks\u002Fadmin.css","\u002Fwp-content\u002Fplugins\u002Fadvanced-permalinks\u002Fjs\u002Fadmin.js",[],[285],[289,290],"advanced-permalinks\u002Fadmin.css?ver=","advanced-permalinks\u002Fjs\u002Fadmin.js?ver=",{"cssClasses":292,"htmlComments":299,"htmlAttributes":300,"restEndpoints":303,"jsGlobals":304,"shortcodeOutput":307},[293,294,295,296,297,298],"advanced_permalinks_menu","ap-tab-nav","ap-tab-content","ap-advanced-form","ap-posts-form","ap-migrate-form",[],[301,302],"data-slug","data-id",[],[305,306],"wp_apl_base","wp_apl_delete",[]]