[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fzu9DoB6qmIigxVjbJSBt_cKcNDKFEY6DdJfPbh_cuQM":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":20,"download_link":21,"security_score":22,"vuln_count":23,"unpatched_count":23,"last_vuln_date":24,"fetched_at":25,"vulnerabilities":26,"developer":27,"crawl_stats":24,"alternatives":35,"analysis":36,"fingerprints":82},"wp-post-meta-revisions","WP-Post-Meta-Revisions","2.0.0","Adam Silverstein","https:\u002F\u002Fprofiles.wordpress.org\u002Fadamsilverstein\u002F","\u003Cp>This plugin implements a post meta revisioning feature as arrived at in https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F20564.\u003C\u002Fp>\n\u003Cp>The goal of releasing this code as a plugin is to allow as many people as possible to easily test the post meta revisioning feature, and also hopefully move towards inclusion of the feature into core, following the \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002Ffeatures-as-plugins\u002F\" rel=\"nofollow ugc\">Features as Plugins\u003C\u002Fa> model.\u003C\u002Fp>\n\u003Cp>Further development of the code for this plugin will continue on its \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fadamsilverstein\u002Fwp-post-meta-revisions\" rel=\"nofollow ugc\">GitHub repository\u003C\u002Fa>. Pull requests welcome!\u003C\u002Fp>\n\u003Cp>To use this plugin, you must be running WordPress 4.1 or newer, two hooks were added in 4.1 that are required for this implementation.\u003C\u002Fp>\n\u003Cp>To revision a post meta, you add its key via a filter:\u003C\u002Fp>\n\u003Cpre>\nfunction add_meta_keys_to_revision( $keys ) {\n    $keys[] = 'meta-key-to-revision';\n    return $keys;\n}\nadd_filter( 'wp_post_revision_meta_keys', 'add_meta_keys_to_revision' );\n\u003C\u002Fpre>\n\u003Cp>Features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Allows for a whitelisted array of ‘revisioned’ meta keys (which can change at any time)\u003C\u002Fli>\n\u003Cli>A revision for the meta is stored on save (if the meta value has changed)\u003C\u002Fli>\n\u003Cli>A meta revision save (if changed) is also triggered during auto-saves\u003C\u002Fli>\n\u003Cli>Restoring a revision restores the revisioned meta field’s values at that revision (including auto-saves)\u003C\u002Fli>\n\u003Cli>Supports storing of multiple values for a single key (and restoring them)\u003C\u002Fli>\n\u003Cli>Adds revisioned meta to the preview data via get_post_metadata\u003C\u002Fli>\n\u003Cli>Includes unit tests demonstrating feature\u003C\u002Fli>\n\u003Cli>Travis CI tests integrated with GitHub repository, props @mattheu\u003C\u002Fli>\n\u003C\u002Ful>\n","Allow selected post meta keys to be tracked in revisions.",400,15552,84,5,"2023-07-17T16:44:00.000Z","6.2.9","4.1","",[],"https:\u002F\u002Fgithub.com\u002Fadamsilverstein\u002Fwp-post-meta-revisions","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-post-meta-revisions.2.0.0.zip",85,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":28,"display_name":7,"profile_url":8,"plugin_count":29,"total_installs":30,"avg_security_score":31,"avg_patch_time_days":32,"trust_score":33,"computed_at":34},"adamsilverstein",7,11810,89,30,86,"2026-04-04T13:47:32.916Z",[],{"attackSurface":37,"codeSignals":70,"taintFlows":77,"riskAssessment":78,"analyzedAt":81},{"hooks":38,"ajaxHandlers":66,"restRoutes":67,"shortcodes":68,"cronEvents":69,"entryPointCount":23,"unprotectedCount":23},[39,46,50,53,57,62],{"type":40,"name":41,"callback":42,"priority":43,"file":44,"line":45},"action","wp_restore_post_revision","wp_restore_post_revision_meta",10,"wp-post-meta-revisions.php",32,{"type":40,"name":47,"callback":48,"file":44,"line":49},"wp_creating_autosave","wp_autosave_post_revisioned_meta_fields",35,{"type":40,"name":51,"callback":48,"file":44,"line":52},"wp_before_creating_autosave",36,{"type":40,"name":54,"callback":55,"file":44,"line":56},"_wp_put_post_revision","wp_save_revisioned_meta_fields",39,{"type":58,"name":59,"callback":60,"priority":43,"file":44,"line":61},"filter","wp_save_post_revision_post_has_changed","wp_check_revisioned_meta_fields_have_changed",43,{"type":58,"name":63,"callback":64,"priority":43,"file":44,"line":65},"get_post_metadata","wp_preview_meta_filter",53,[],[],[],[],{"dangerousFunctions":71,"sqlUsage":72,"outputEscaping":74,"fileOperations":23,"externalRequests":23,"nonceChecks":23,"capabilityChecks":23,"bundledLibraries":76},[],{"prepared":23,"raw":23,"locations":73},[],{"escaped":23,"rawEcho":23,"locations":75},[],[],[],{"summary":79,"deductions":80},"The \"wp-post-meta-revisions\" v2.0.0 plugin exhibits an exceptionally strong security posture based on the provided static analysis. The absence of any identified attack surface points, dangerous functions, unescaped output, or SQL queries that aren't prepared is highly commendable and suggests a developer with a solid understanding of WordPress security best practices. The clean taint analysis further reinforces this, indicating no pathways for malicious data injection or manipulation were detected.\n\nThe plugin's vulnerability history is also a significant positive indicator, showing zero known CVEs. This suggests a well-maintained and robust codebase that has likely been scrutinized for security flaws over time. The combination of a clean static analysis and a spotless vulnerability history points to a plugin that is currently very secure and unlikely to pose an immediate threat to a WordPress installation.\n\nWhile the current data paints a picture of a highly secure plugin, it's important to acknowledge that static analysis has limitations. The complete lack of identified entry points and checks (like nonces and capability checks) could, in a more complex plugin, indicate an incomplete analysis or a very simple plugin that doesn't interact with the user in ways that would require such checks. However, given the other positive signals, this is less likely to be a concern for this specific plugin. In conclusion, this plugin appears to be a strong choice from a security perspective, demonstrating excellent development practices and a history of stability.",[],"2026-03-16T19:44:13.397Z",{"wat":83,"direct":88},{"assetPaths":84,"generatorPatterns":85,"scriptPaths":86,"versionParams":87},[],[],[],[],{"cssClasses":89,"htmlComments":90,"htmlAttributes":115,"restEndpoints":116,"jsGlobals":117,"shortcodeOutput":118},[],[91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114],"\u003C!-- Post Meta Revisions, a WordPress plugin. -->","\u003C!-- Plugin Name: Post Meta Revisions -->","\u003C!-- Plugin URI: https:\u002F\u002Fgithub.com\u002Fadamsilverstein\u002Fwp-post-meta-revisions -->","\u003C!-- Description: Post Meta Revisions -->","\u003C!-- Author: Adam Silverstein - code developed with others -->","\u003C!-- at https:\u002F\u002Fcore.trac.wordpress.org\u002Fticket\u002F20564 -->","\u003C!-- License: GPLv2 or later -->","\u003C!-- The post data arrives as either $_POST['data']['wp_autosave'] or the $_POST -->","\u003C!-- itself. This sets $posted_data to the correct variable. -->","\u003C!-- Ignoring sanitization to avoid altering meta. Ignoring the nonce check because -->","\u003C!-- this is hooked on inner core hooks where a valid nonce was already checked. -->","\u003C!-- Go thru the revisioned meta keys and save them as part of the autosave, if -->","\u003C!-- the meta key is part of the posted data, the meta value is not blank and -->","\u003C!-- the the meta value has changes from the last autosaved value. -->","\u003C!-- Use the underlying delete_metadata() and add_metadata() functions -->","\u003C!-- vs delete_post_meta() and add_post_meta() to make sure we're working -->","\u003C!-- with the actual revision meta. -->","\u003C!-- One last check to ensure meta value not empty(). -->","\u003C!-- Add the revisions meta data to the autosave. -->","\u003C!-- Filter the list of post meta keys to be revisioned. -->","\u003C!-- We use add_metadata() function vs add_post_meta() here -->","\u003C!-- to allow for a revision post target OR regular post. -->","\u003C!-- Filters revisioned meta keys only. -->","\u003C!-- Grab the autosave. -->",[],[],[],[]]