[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fJmakEd_W_L3DmRRJtCKbJ_pfXGUzZowmR1sbP-oyqG8":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":22,"download_link":23,"security_score":24,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27,"vulnerabilities":28,"developer":29,"crawl_stats":26,"alternatives":36,"analysis":137,"fingerprints":251},"wp-uf2","Microformats 2","1.1.0","IndieWeb","https:\u002F\u002Fprofiles.wordpress.org\u002Findieweb\u002F","\u003Cp>It is only a very basic implementation, because not every element is accessible through actions or filters. It is better to use a theme that supports \u003Ca href=\"http:\u002F\u002Fmicroformats.org\u002Fwiki\u002Fmicroformats2\" rel=\"nofollow ugc\">Microformats 2\u003C\u002Fa> fully.\u003C\u002Fp>\n","Enhances your WordPress theme with Microformats 2 classes.",200,7365,100,2,"2018-02-18T21:54:00.000Z","4.9.29","4.7","",[20,21],"indieweb","microformats","https:\u002F\u002Fgithub.com\u002Findieweb\u002Fwordpress-uf2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-uf2.1.1.0.zip",85,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":20,"display_name":7,"profile_url":8,"plugin_count":30,"total_installs":31,"avg_security_score":32,"avg_patch_time_days":33,"trust_score":34,"computed_at":35},5,1420,92,4,94,"2026-04-04T08:10:19.068Z",[37,52,72,93,114],{"slug":38,"name":39,"version":40,"author":7,"author_profile":8,"description":41,"short_description":42,"active_installs":11,"downloaded":43,"rating":13,"num_ratings":33,"last_updated":44,"tested_up_to":45,"requires_at_least":46,"requires_php":47,"tags":48,"homepage":50,"download_link":51,"security_score":32,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27},"micropub","Micropub","2.4.0","\u003Cp>Micropub is an open API standard that is used to create posts on your site using third-party clients. Web apps and native apps (e.g. iPhone, Android) can use Micropub to post short notes, photos, events or other posts to your own site, similar to a Twitter client posting to Twitter.com. Requires the IndieAuth plugin for authentication.\u003C\u002Fp>\n\u003Cp>Once you’ve installed and activated the plugin, try a client such as \u003Ca href=\"http:\u002F\u002Fquill.p3k.io\u002F\" rel=\"nofollow ugc\">Quill\u003C\u002Fa> to create a new post on your site. It walks you through the steps and helps you troubleshoot if you run into any problems. A list of known Micropub clients are available \u003Ca href=\"https:\u002F\u002Findieweb.org\u002FMicropub\u002FClients\" rel=\"nofollow ugc\">here\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>Supports the full \u003Ca href=\"https:\u002F\u002Fmicropub.spec.indieweb.org\u002F\" rel=\"nofollow ugc\">Micropub spec\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>As this allows the creation of posts without entering the WordPress admin, it is not subject to any Gutenberg compatibility concerns per se. Posts created will not have Gutenberg blocks as they were not created with Gutenberg, but otherwise there should be no issues at this time.\u003C\u002Fp>\n\u003Cp>Available in the WordPress plugin directory at \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fmicropub\u002F\" rel=\"ugc\">wordpress.org\u002Fplugins\u002Fmicropub\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This project is placed in the public domain. You may also use it under the \u003Ca href=\"http:\u002F\u002Fcreativecommons.org\u002Fpublicdomain\u002Fzero\u002F1.0\u002F\" rel=\"nofollow ugc\">CC0 license\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>WordPress details\u003C\u002Fh3>\n\u003Ch4>Filters and hooks\u003C\u002Fh4>\n\u003Cp>Adds ten filters:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>before_micropub( $input )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Called before handling a Micropub request. Returns \u003Ccode>$input\u003C\u002Fcode>, possibly modified.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>micropub_post_content( $post_content, $input )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Called during the handling of a Micropub request. The content generation function is attached to this filter by default. Returns \u003Ccode>$post_content\u003C\u002Fcode>, possibly modified.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>micropub_post_type( $post_type = 'post', $input )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Called during the creation of a Micropub post. This defaults to post, but allows for setting Micropub posts to a custom post type.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>micropub_tax_input( $tax_input, $input )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Called during the creation of a Micropub post. This defaults to nothing but allows for a Micropub post to set a custom taxonomy.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>micropub_syndicate-to( $synd_urls, $user_id, $input )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Called to generate the list of \u003Ccode>syndicate-to\u003C\u002Fcode> targets to return in response to a query. Returns \u003Ccode>$synd_urls\u003C\u002Fcode>, an array, possibly modified. This filter is empty by default\u003C\u002Fp>\n\u003Cpre>\u003Ccode>micropub_query( $resp, $input )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Allows you to replace a query response with your own customized version to add additional information\u003C\u002Fp>\n\u003Cpre>\u003Ccode>micropub_suggest_title( $mf2 )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Allows a suggested title to be generated. This can be used either to generate the post slug or for individuals who want to use it to set a WordPress title\u003C\u002Fp>\n\u003Cpre>\u003Ccode>indieauth_scopes( $scopes )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This returns scopes from a plugin implementing IndieAuth. This filter is empty by default.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>indieauth_response( $response )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This returns the token auth response from a plugin implementing IndieAuth. This filter is empty by default.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>pre_insert_micropub_post( $args )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This filters the arguments sent to wp_insert_post just prior to its insertion. If the ID key is set, then this will short-circuit the insertion to allow for custom database coding.\u003C\u002Fp>\n\u003Cp>…and two hooks:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>after_micropub( $input, $wp_args = null)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Called after handling a Micropub request. Not called if the request fails (ie doesn’t return HTTP 2xx).\u003C\u002Fp>\n\u003Cpre>\u003Ccode>micropub_syndication( $ID, $syndicate_to )\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Called only if there are syndication targets $syndicate_to for post $ID. $syndicate_to will be an array of UIDs that are verified as one or more of the UIDs added using the \u003Ccode>micropub_syndicate-to\u003C\u002Fcode> filter.\u003C\u002Fp>\n\u003Cp>Arguments:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>$input\u003C\u002Fcode>: associative array, the Micropub request in \u003Ca href=\"http:\u002F\u002Fmicropub.net\u002Fdraft\u002Findex.html#json-syntax\" rel=\"nofollow ugc\">JSON format\u003C\u002Fa>. If the request was form-encoded or a multipart file upload, it’s converted to JSON format.\u003C\u002Fli>\n\u003Cli>\u003Ccode>$wp_args\u003C\u002Fcode>: optional associative array. For creates and updates, this is the arguments passed to \u003Ccode>wp_insert_post\u003C\u002Fcode> or \u003Ccode>wp_update_post\u003C\u002Fcode>. For deletes and undeletes, \u003Ccode>args['ID']\u003C\u002Fcode> contains the post id to be (un)deleted. Null for queries.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Other\u003C\u002Fh4>\n\u003Cp>Stores \u003Ca href=\"http:\u002F\u002Fmicroformats.org\u002Fwiki\u002Fmicroformats2\" rel=\"nofollow ugc\">microformats2\u003C\u002Fa> properties in \u003Ca href=\"https:\u002F\u002Fcodex.wordpress.org\u002FFunction_Reference\u002Fpost_meta_Function_Examples\" rel=\"nofollow ugc\">post metadata\u003C\u002Fa> with keys prefixed by \u003Ccode>mf2_\u003C\u002Fcode>. \u003Ca href=\"https:\u002F\u002Findiewebcamp.com\u002FWordPress_Data#Microformats_data\" rel=\"nofollow ugc\">Details here.\u003C\u002Fa> All values are arrays; use \u003Ccode>unserialize()\u003C\u002Fcode> to deserialize them.\u003C\u002Fp>\n\u003Cp>Does \u003Cem>not\u003C\u002Fem> support multithreading. PHP doesn’t really either, so it generally won’t matter, but just for the record.\u003C\u002Fp>\n\u003Cp>Supports Stable Extensions to Micropub:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Findieweb.org\u002FMicropub-extensions#Post_Status\" rel=\"nofollow ugc\">Post Status\u003C\u002Fa> – Either \u003Ccode>published\u003C\u002Fcode> or \u003Ccode>draft\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Findieweb.org\u002FMicropub-extensions#Visibility\" rel=\"nofollow ugc\">Visibility\u003C\u002Fa> – Either \u003Ccode>public\u003C\u002Fcode> or \u003Ccode>private\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Findieweb.org\u002FMicropub-extensions#Query_for_Category.2FTag_List\" rel=\"nofollow ugc\">Query for Category\u002FTag List\u003C\u002Fa> – Supports querying for categories and tags.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Findieweb.org\u002FMicropub-extensions#Slug\" rel=\"nofollow ugc\">Slug\u003C\u002Fa> – Custom slug.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Findieweb.org\u002FMicropub-extensions#Query_for_Post_List\" rel=\"nofollow ugc\">Query for Post List\u003C\u002Fa> – Supports query for the last x number of posts.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Supports Proposed Extensions to Micropub:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F35\" rel=\"nofollow ugc\">Limit Parameter for Query\u003C\u002Fa> – Supports adding limit to any query designed to return a list of options to limit it to that number.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F36\" rel=\"nofollow ugc\">Offset Parameter for Query\u003C\u002Fa> – Supports adding offset to any query. Must be used with limit.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F34\" rel=\"nofollow ugc\">Filter Parameter for Query\u003C\u002Fa> – Supported for the Category\u002FTag List query.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F16\" rel=\"nofollow ugc\">Location Visiblity\u003C\u002Fa> – Either \u003Ccode>public\u003C\u002Fcode>, \u003Ccode>private\u003C\u002Fcode>, or \u003Ccode>protected\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F7\" rel=\"nofollow ugc\">Query for Supported Queries\u003C\u002Fa> – Returns a list of query parameters the endpoint supports\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F8\" rel=\"nofollow ugc\">Query for Supported Properties\u003C\u002Fa> – Returns a list of which supported experimental properties the endpoint supports so the client can choose to hide unsupported ones.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F15\" rel=\"nofollow ugc\">Discovery of Media Endpoint using Link Rel\u003C\u002Fa> – Adds a link header for the media endpoint\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F32\" rel=\"nofollow ugc\">Supports extended GEO URIs\u003C\u002Fa> – Supports adding arbitrary parameters to the GEO URI. Micropub converts this into an mf2 object. Supported as built into the Indigenous client.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F30\" rel=\"nofollow ugc\">Supports deleting uploaded media\u003C\u002Fa> – Supports action=delete&url=url on the media endpoint to delete files.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F14\" rel=\"nofollow ugc\">Supports querying for media on the media endpoint\u003C\u002Fa> and \u003Ca href=\"\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F37)\" rel=\"nofollow ugc\">optional URL parameter for same\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F45\" rel=\"nofollow ugc\">Supports filtering media queries by mime-type\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F8#issuecomment-536301952\" rel=\"nofollow ugc\">Return Visibility in q=config\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Deprecated Extensions still Supported:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F10\" rel=\"nofollow ugc\">Last Media Uploaded\u003C\u002Fa> – Supports querying for the last image uploaded …set to within the last hour. This was superseded by supporting \u003Ccode>q=source&limit=1\u003C\u002Fcode> on the media endpoint.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Extensions Supported by Other Plugins:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fmicropub-extensions\u002Fissues\u002F6\" rel=\"nofollow ugc\">Query for Location\u003C\u002Fa> – Suported by Simple Location if installed.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>If an experimental property is not set to one of the noted options, the plugin will return HTTP 400 with body:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"error\": \"invalid_request\",\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>WordPress has a \u003Ca href=\"https:\u002F\u002Fcodex.wordpress.org\u002FUploading_Files#About_Uploading_Files_on_Dashboard\" rel=\"nofollow ugc\">whitelist of file extensions that it allows in uploads\u003C\u002Fa>. If you upload a file in a Micropub extension that doesn’t have an allowed extension, the plugin will return HTTP 400 with body:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"error\": \"invalid_request\",\n  \"error_description\": \"Sorry, this file is not permitted for security reasons.\"\n}\u003Ch3>Authentication and authorization\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>For reasons of security it is recommended that you only use this plugin on sites that implement HTTPS. Authentication is not built into this plugin.\u003C\u002Fp>\n\u003Cp>In order to use this, the IndieAuth plugin is required. Other plugins may be written in future as alternatives and will be noted if they exist.\u003C\u002Fp>\n\u003Ch3>Configuration Options\u003C\u002Fh3>\n\u003Cp>These configuration options can be enabled by adding them to your wp-config.php\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>define('MICROPUB_NAMESPACE', 'micropub\u002F1.0' )\u003C\u002Fcode> – By default the namespace for micropub is micropub\u002F1.0. This would allow you to change this for your endpoint\u003C\u002Fli>\n\u003Cli>\u003Ccode>define('MICROPUB_DISABLE_NAG', 1 )\u003C\u002Fcode> – Disable notices for insecure sites\u003C\u002Fli>\n\u003Cli>\u003Ccode>define('MICROPUB_DRAFT_MODE', 1 )\u003C\u002Fcode> – Override default post status and set to draft for debugging purposes.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Development\u003C\u002Fh3>\n\u003Cp>The canonical repo is http:\u002F\u002Fgithub.com\u002Findieweb\u002Fwordpress-micropub . Feedback and pull requests are welcome!\u003C\u002Fp>\n\u003Cp>To add a new release to the WordPress plugin directory, tag it with the version number and push the tag. It will automatically deploy.\u003C\u002Fp>\n\u003Cp>To set up your local environment to run the unit tests and set up PHPCodesniffer to test adherence to \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002Fhandbook\u002Fcoding-standards\u002Fphp\u002F\" rel=\"nofollow ugc\">WordPress Coding Standards\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwimg\u002FPHPCompatibility\" rel=\"nofollow ugc\">PHP Compatibility\u003C\u002Fa>:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Install \u003Ca href=\"https:\u002F\u002Fgetcomposer.org\" rel=\"nofollow ugc\">Composer\u003C\u002Fa>. Composer is only used for development and is not required to run the plugin.\u003C\u002Fli>\n\u003Cli>Run \u003Ccode>composer install\u003C\u002Fcode> which will install PHP Codesniffer, PHPUnit, the standards required, and all dependencies.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>To configure PHPUnit\u003C\u002Fp>\n\u003Col>\n\u003Cli>Install and start MySQL. (You may already have it.)\u003C\u002Fli>\n\u003Cli>Run \u003Ccode>.\u002Fbin\u002Finstall-wp-tests.sh wordpress_micropub_test root '' localhost\u003C\u002Fcode> to download WordPress and \u003Ca href=\"https:\u002F\u002Fdevelop.svn.wordpress.org\u002Ftrunk\u002Ftests\u002Fphpunit\u002F\" rel=\"nofollow ugc\">its unit test library\u003C\u002Fa>, into your systems tmp directory by default, and create a MySQL db to test against. \u003Ca href=\"http:\u002F\u002Fwp-cli.org\u002Fdocs\u002Fplugin-unit-tests\u002F\" rel=\"nofollow ugc\">Background here\u003C\u002Fa>. Feel free to use a MySQL user other than \u003Ccode>root\u003C\u002Fcode>. You can set the \u003Ccode>WP_CORE_DIR\u003C\u002Fcode> and \u003Ccode>WP_TESTS_DIR\u003C\u002Fcode> environment variables to change where WordPress and its test library are installed. For example, I put them both in the repo dir.\u003C\u002Fli>\n\u003Cli>Open \u003Ccode>wordpress-tests-lib\u002Fwp-tests-config.php\u003C\u002Fcode> and add a slash to the end of the ABSPATH value. No clue why it leaves off the slash; it doesn’t work without it.\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Run \u003Ccode>phpunit\u003C\u002Fcode> in the repo root dir. If you set \u003Ccode>WP_CORE_DIR\u003C\u002Fcode> and \u003Ccode>WP_TESTS_DIR\u003C\u002Fcode> above, you’ll need to set them for this too. You should see output like this:\u003C\u002Fp>\n\u003Cp>Installing…\u003Cbr \u002F>\n…\u003Cbr \u002F>\n1 \u002F 1 (100%)\u003Cbr \u002F>\nTime: 703 ms, Memory: 33.75Mb\u003Cbr \u002F>\nOK (1 test, 3 assertions)\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>To set up PHPCodesniffer to test adherence to \u003Ca href=\"https:\u002F\u002Fmake.wordpress.org\u002Fcore\u002Fhandbook\u002Fcoding-standards\u002Fphp\u002F\" rel=\"nofollow ugc\">WordPress Coding Standards\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwimg\u002FPHPCompatibility\" rel=\"nofollow ugc\">PHP 5.6 Compatibility\u003C\u002Fa>:\u003C\u002Fp>\n\u003Col>\n\u003Cli>To list coding standard issues in a file, run \u003Ccode>composer phpcs\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>If you want to try to automatically fix issues, run `composer phpcbf“.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>To automatically convert the readme.txt file to readme.md, you may, if you have installed composer as noted in the previous section, enter \u003Ccode>composer update-readme\u003C\u002Fcode> to have the .txt file converted\u003Cbr \u002F>\ninto markdown and saved to readme.md.\u003C\u002Fp>\n","Allows you to publish to your site using Micropub clients.",18718,"2024-06-13T04:39:00.000Z","6.5.8","4.9.9","5.6",[20,21,38,49],"publish","https:\u002F\u002Fgithub.com\u002Findieweb\u002Fwordpress-micropub","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmicropub.2.4.0.zip",{"slug":53,"name":54,"version":55,"author":56,"author_profile":57,"description":58,"short_description":59,"active_installs":60,"downloaded":61,"rating":25,"num_ratings":25,"last_updated":62,"tested_up_to":63,"requires_at_least":64,"requires_php":65,"tags":66,"homepage":70,"download_link":71,"security_score":13,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27},"mf2-feed","MF2 Feeds","3.1.1","Matthias Pfefferle","https:\u002F\u002Fprofiles.wordpress.org\u002Fpfefferle\u002F","\u003Cp>Provides a \u003Ca href=\"http:\u002F\u002Fmicroformats.org\u002Fwiki\u002Fmicroformats2-parsing\" rel=\"nofollow ugc\">Microformats2 JSON\u003C\u002Fa> “Feed” for every WordPress URL, and helps to allow other sites to get pre-parsed \u003Ca href=\"https:\u002F\u002Findieweb.org\u002Fjf2\" rel=\"nofollow ugc\">Microformats-JSON\u003C\u002Fa> even if the theme\u003Cbr \u002F>\ndoes not support Microformats2.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Findieweb.org\u002Fmicroformats\" rel=\"nofollow ugc\">Microformats2\u003C\u002Fa> are a key \u003Ca href=\"https:\u002F\u002Findieweb.org\u002FCategory:building-blocks\" rel=\"nofollow ugc\">building-block\u003C\u002Fa> of the IndieWeb, but it is very hard (if not impossible) to get Microformats2 as a core feature for all WordPress themes. There are several themes that are supporting Microformats2, but everyone should choose his prefered theme and should not be limited to use one of the \u003Ca href=\"https:\u002F\u002Findieweb.org\u002FWordPress\u002FThemes\" rel=\"nofollow ugc\">few community themes\u003C\u002Fa>. After \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Findieweb\u002Fwordpress-uf2\u002Fissues\u002F30\" rel=\"nofollow ugc\">a lot of discussions\u003C\u002Fa> and some different plugin approaches, we are trying to provide an alternate (\u003Ca href=\"https:\u002F\u002Findieweb.org\u002Frel-alternate\" rel=\"nofollow ugc\">\u003Ccode>rel=altenate\u003C\u002Fcode>\u003C\u002Fa>) representation of the microformatted HTML.\u003C\u002Fp>\n\u003Cp>The plugin is inspired by the URL design of \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faaronpk\u002Fp3k\" rel=\"nofollow ugc\">p3k\u003C\u002Fa> of \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faaronpk\" rel=\"nofollow ugc\">@aaronpk\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>p3k Example:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Original: \u003Ca href=\"https:\u002F\u002Faaronparecki.com\u002F2018\u002F07\u002F30\u002F18\u002Fxray-updates\" rel=\"nofollow ugc\">https:\u002F\u002Faaronparecki.com\u002F2018\u002F07\u002F30\u002F18\u002Fxray-updates\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Microformats2 JSON: \u003Ca href=\"https:\u002F\u002Faaronparecki.com\u002F2018\u002F07\u002F30\u002F18\u002Fxray-updates.json\" rel=\"nofollow ugc\">https:\u002F\u002Faaronparecki.com\u002F2018\u002F07\u002F30\u002F18\u002Fxray-updates.json\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>JF2: \u003Ca href=\"https:\u002F\u002Faaronparecki.com\u002F2018\u002F07\u002F30\u002F18\u002Fxray-updates.jf2\" rel=\"nofollow ugc\">https:\u002F\u002Faaronparecki.com\u002F2018\u002F07\u002F30\u002F18\u002Fxray-updates.jf2\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>WordPress Example:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Original: \u003Ca href=\"https:\u002F\u002Fnotiz.blog\u002F2013\u002F06\u002F18\u002Fthe-rise-of-the-indieweb\u002F\" rel=\"nofollow ugc\">https:\u002F\u002Fnotiz.blog\u002F2013\u002F06\u002F18\u002Fthe-rise-of-the-indieweb\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Microformats2 JSON: \u003Ca href=\"https:\u002F\u002Fnotiz.blog\u002F2013\u002F06\u002F18\u002Fthe-rise-of-the-indieweb\u002Ffeed\u002Fmf2\" rel=\"nofollow ugc\">https:\u002F\u002Fnotiz.blog\u002F2013\u002F06\u002F18\u002Fthe-rise-of-the-indieweb\u002Ffeed\u002Fmf2\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>JF2: \u003Ca href=\"https:\u002F\u002Fnotiz.blog\u002F2013\u002F06\u002F18\u002Fthe-rise-of-the-indieweb\u002Ffeed\u002Fjf2\" rel=\"nofollow ugc\">https:\u002F\u002Fnotiz.blog\u002F2013\u002F06\u002F18\u002Fthe-rise-of-the-indieweb\u002Ffeed\u002Fjf2\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n","Add Microformats2 Feeds for WordPress",30,3498,"2025-12-07T19:09:00.000Z","6.9.4","5.2","7.2",[20,67,68,21,69],"jf2","mf2","rel-alternate","http:\u002F\u002Fgithub.com\u002Findieweb\u002Fwordpress-mf2-feed\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmf2-feed.3.1.1.zip",{"slug":73,"name":74,"version":75,"author":76,"author_profile":77,"description":78,"short_description":79,"active_installs":80,"downloaded":81,"rating":13,"num_ratings":82,"last_updated":83,"tested_up_to":63,"requires_at_least":84,"requires_php":65,"tags":85,"homepage":89,"download_link":90,"security_score":13,"vuln_count":91,"unpatched_count":25,"last_vuln_date":92,"fetched_at":27},"pubsubhubbub","WebSub (FKA. PubSubHubbub)","4.0.0","joshfraz","https:\u002F\u002Fprofiles.wordpress.org\u002Fjoshfraz\u002F","\u003Cp>This plugin implements the \u003Ca href=\"https:\u002F\u002Fwww.w3.org\u002FTR\u002Fwebsub\u002F\" rel=\"nofollow ugc\">WebSub\u003C\u002Fa> protocol (formerly known as PubSubHubbub) for WordPress. It enables real-time notifications when your blog is updated and provides a subscriber API for other plugins to consume WebSub-enabled feeds.\u003C\u002Fp>\n\u003Ch3>Publisher Features\u003C\u002Fh3>\n\u003Cp>When you publish or update a post, this plugin automatically notifies WebSub hubs, which then distribute the update to all subscribers in real-time.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Sends realtime notifications when you update your blog\u003C\u002Fli>\n\u003Cli>Supports multi-user installations (WordPress MU)\u003C\u002Fli>\n\u003Cli>Supports multiple hubs\u003C\u002Fli>\n\u003Cli>Supports all feed formats used by WordPress (Atom, RSS2, RDF)\u003C\u002Fli>\n\u003Cli>Adds \u003Ccode>\u003Clink rel=\"hub\">\u003C\u002Fcode> and \u003Ccode>\u003Clink rel=\"self\">\u003C\u002Fcode> declarations to feeds and HTML\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Subscriber Features\u003C\u002Fh3>\n\u003Cp>The plugin provides a subscriber API that allows other plugins (like feed readers) to subscribe to WebSub-enabled feeds using WordPress hooks.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>REST API callback endpoint for subscription verification and content delivery\u003C\u002Fli>\n\u003Cli>Hub discovery from topic URLs (HTTP Link headers and feed content)\u003C\u002Fli>\n\u003Cli>HMAC signature verification (SHA1, SHA256, SHA384, SHA512)\u003C\u002Fli>\n\u003Cli>Full lifecycle hooks for integration with other plugins\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Supported Specifications\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.w3.org\u002FTR\u002Fwebsub\u002F\" rel=\"nofollow ugc\">WebSub W3C Recommendation\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpubsubhubbub.github.io\u002FPubSubHubbub\u002Fpubsubhubbub-core-0.4.html\" rel=\"nofollow ugc\">PubSubHubbub 0.4\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Default Hubs\u003C\u002Fh3>\n\u003Cp>By default this plugin will ping the following hubs:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpubsubhubbub.appspot.com\" rel=\"nofollow ugc\">Demo hub on Google App Engine\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpubsubhubbub.superfeedr.com\" rel=\"nofollow ugc\">SuperFeedr\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwebsubhub.com\" rel=\"nofollow ugc\">WebSubHub\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Please contact us if you operate a hub that you would like to be included as a default option.\u003C\u002Fp>\n","A WebSub plugin for WordPress that enables real-time publishing and subscription capabilities.",100000,2054851,6,"2026-01-22T11:03:00.000Z","4.5",[86,20,87,73,88],"feed","pubsub","websub","https:\u002F\u002Fgithub.com\u002Fpubsubhubbub\u002Fwordpress-pubsubhubbub\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fpubsubhubbub.4.0.0.zip",1,"2024-01-24 00:00:00",{"slug":94,"name":95,"version":96,"author":97,"author_profile":98,"description":99,"short_description":100,"active_installs":101,"downloaded":102,"rating":32,"num_ratings":103,"last_updated":104,"tested_up_to":105,"requires_at_least":106,"requires_php":18,"tags":107,"homepage":112,"download_link":113,"security_score":24,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27},"rich-contact-widget","Rich Contact Widget","1.4.6","Remy Perona","https:\u002F\u002Fprofiles.wordpress.org\u002Ftabrisrp\u002F","\u003Cp>This contact widget comes with microdatas & microformats markup, so that search engines can use it in their search results. They can help display contact information about your business or yourself below your website in search results, and even a map with your location, to improve your local SEO.\u003C\u002Fp>\n\u003Cp>The telephone & email are linked so that visitors can click on it and make a call (through mobile or skype) or send a mail from their computer or their mobile devices.\u003C\u002Fp>\n\u003Cp>You can also display a static image map of your location, linking to the address’ Google Maps page, and display a download link for a vCard.\u003C\u002Fp>\n\u003Cp>More informations on microdatas microformats can be found here :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>http:\u002F\u002Fschema.org\u003C\u002Fli>\n\u003Cli>http:\u002F\u002Fmicroformats.org\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Feedbacks and suggestions for improvement are greatly appreciated ! You can go to github to help : https:\u002F\u002Fgithub.com\u002FTabrisrp\u002Frich-contact-widget\u003C\u002Fp>\n\u003Cp>Rich Contact Widget requires PHP5 to work !\u003C\u002Fp>\n\u003Cp>Credits for translation :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Slovak by \u003Ca href=\"http:\u002F\u002Fwebhostinggeeks.com\u002Fblog\u002F\" rel=\"nofollow ugc\">WebHostingGeeks.com\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n","A simple contact widget enhanced with microdatas & microformats tags for your local SEO",8000,83411,7,"2017-11-28T18:14:00.000Z","4.8.28","3.2.1",[108,109,21,110,111],"contact","microdata","rich-snippets","widget","http:\u002F\u002Fremyperona.fr\u002Frich-contact-widget\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Frich-contact-widget.1.4.6.zip",{"slug":115,"name":116,"version":117,"author":118,"author_profile":119,"description":120,"short_description":121,"active_installs":122,"downloaded":123,"rating":124,"num_ratings":125,"last_updated":126,"tested_up_to":63,"requires_at_least":127,"requires_php":128,"tags":129,"homepage":133,"download_link":134,"security_score":135,"vuln_count":30,"unpatched_count":25,"last_vuln_date":136,"fetched_at":27},"activitypub","ActivityPub","8.0.1","Automattic","https:\u002F\u002Fprofiles.wordpress.org\u002Fautomattic\u002F","\u003Cp>Enter the fediverse with \u003Cstrong>ActivityPub\u003C\u002Fstrong>, broadcasting your blog to a wider audience! Attract followers, deliver updates, and receive comments from a diverse user base of \u003Cstrong>ActivityPub\u003C\u002Fstrong>-compliant platforms.\u003C\u002Fp>\n\u003Cp>\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FQzYozbNneVc?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Cp>With the ActivityPub plugin installed, your WordPress blog itself functions as a federated profile, along with profiles for each author. For instance, if your website is \u003Ccode>example.com\u003C\u002Fcode>, then the blog-wide profile can be found at \u003Ccode>@example.com@example.com\u003C\u002Fcode>, and authors like Jane and Bob would have their individual profiles at \u003Ccode>@jane@example.com\u003C\u002Fcode> and \u003Ccode>@bob@example.com\u003C\u002Fcode>, respectively.\u003C\u002Fp>\n\u003Cp>An example: I give you my Mastodon profile name: \u003Ccode>@pfefferle@mastodon.social\u003C\u002Fcode>. You search, see my profile, and hit follow. Now, any post I make appears in your Home feed. Similarly, with the ActivityPub plugin, you can find and follow Jane’s profile at \u003Ccode>@jane@example.com\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Once you follow Jane’s \u003Ccode>@jane@example.com\u003C\u002Fcode> profile, any blog post she crafts on \u003Ccode>example.com\u003C\u002Fcode> will land in your Home feed. Simultaneously, by following the blog-wide profile \u003Ccode>@example.com@example.com\u003C\u002Fcode>, you’ll receive updates from all authors.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Note\u003C\u002Fstrong>: If no one follows your author or blog instance, your posts remain unseen. The simplest method to verify the plugin’s operation is by following your profile. If you possess a Mastodon profile, initiate by following your new one.\u003C\u002Fp>\n\u003Cp>The plugin works with the following tested federated platforms, but there may be more that it works with as well:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fjoinmastodon.org\u002F\" rel=\"nofollow ugc\">Mastodon\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpleroma.social\u002F\" rel=\"nofollow ugc\">Pleroma\u003C\u002Fa>\u002F\u003Ca href=\"https:\u002F\u002Fakkoma.social\u002F\" rel=\"nofollow ugc\">Akkoma\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Ffriendi.ca\u002F\" rel=\"nofollow ugc\">friendica\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fhubzilla.org\u002F\" rel=\"nofollow ugc\">Hubzilla\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpixelfed.org\u002F\" rel=\"nofollow ugc\">Pixelfed\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fsocialhome.network\u002F\" rel=\"nofollow ugc\">Socialhome\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fjoin.misskey.page\u002F\" rel=\"nofollow ugc\">Misskey\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Some things to note:\u003C\u002Fp>\n\u003Col>\n\u003Cli>The blog-wide profile is only compatible with sites with rewrite rules enabled. If your site does not have rewrite rules enabled, the author-specific profiles may still work.\u003C\u002Fli>\n\u003Cli>Many single-author blogs have chosen to turn off or redirect their author profile pages, usually via an SEO plugin like Yoast or Rank Math. This is usually done to avoid duplicate content with your blog’s home page. If your author page has been deactivated in this way, then ActivityPub author profiles won’t work for you. Instead, you can turn your author profile page back on, and then use the option in your SEO plugin to noindex the author page. This will still resolve duplicate content issues with search engines and will enable ActivityPub author profiles to work.\u003C\u002Fli>\n\u003Cli>Once ActivityPub is installed, \u003Cem>only new posts going forward\u003C\u002Fem> will be available in the fediverse. Likewise, even if you’ve been using ActivityPub for a while, anyone who follows your site will only see new posts you publish from that moment on. They will never see previously-published posts in their Home feed. This process is very similar to subscribing to a newsletter. If you subscribe to a newsletter, you will only receive future emails, but not the old archived ones. With ActivityPub, if someone follows your site, they will only receive new blog posts you publish from then on.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>So what’s the process?\u003C\u002Fp>\n\u003Col>\n\u003Cli>Install the ActivityPub plugin.\u003C\u002Fli>\n\u003Cli>Go to the plugin’s settings page and adjust the settings to your liking. Click the Save button when ready.\u003C\u002Fli>\n\u003Cli>Make sure your blog’s author profile page is active if you are using author profiles.\u003C\u002Fli>\n\u003Cli>Go to Mastodon or any other federated platform, and search for your profile, and follow it. Your new profile will be in the form of either \u003Ccode>@your_username@example.com\u003C\u002Fcode> or \u003Ccode>@example.com@example.com\u003C\u002Fcode>, so that is what you’ll search for.\u003C\u002Fli>\n\u003Cli>On your blog, publish a new post.\u003C\u002Fli>\n\u003Cli>From Mastodon, check to see if the new post appears in your Home feed.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Note\u003C\u002Fstrong>: It may take up to 15 minutes or so for the new post to show up in your federated feed. This is because the messages are sent to the federated platforms using a delayed cron. This avoids breaking the publishing process for those cases where users might have lots of followers. So please don’t assume that just because you didn’t see it show up right away that something is broken. Give it some time. In most cases, it will show up within a few minutes, and you’ll know everything is working as expected.\u003C\u002Fp>\n","Connect your site to the Open Social Web and let millions of users follow, share, and interact with your content from Mastodon, Pixelfed, and more.",6000,495122,98,39,"2026-03-11T09:26:00.000Z","6.5","7.4",[115,130,131,20,132],"activitystream","fediverse","social-web","https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fwordpress-activitypub","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Factivitypub.8.0.1.zip",99,"2024-01-05 00:00:00",{"attackSurface":138,"codeSignals":233,"taintFlows":243,"riskAssessment":244,"analyzedAt":250},{"hooks":139,"ajaxHandlers":229,"restRoutes":230,"shortcodes":231,"cronEvents":232,"entryPointCount":25,"unprotectedCount":25},[140,146,149,154,158,161,164,168,171,174,177,179,183,188,192,197,201,205,209,213,216,220,224],{"type":141,"name":142,"callback":142,"priority":143,"file":144,"line":145},"filter","get_avatar_data",10,"includes\\class-uf2-author.php",12,{"type":141,"name":147,"callback":147,"priority":135,"file":144,"line":148},"the_author",13,{"type":141,"name":150,"callback":151,"file":152,"line":153},"comment_class","comment_classes","includes\\class-uf2-comment.php",16,{"type":141,"name":155,"callback":156,"file":152,"line":157},"get_comment_author_link","author_link",17,{"type":141,"name":159,"callback":159,"priority":135,"file":152,"line":160},"comment_text",18,{"type":141,"name":162,"callback":162,"priority":143,"file":163,"line":145},"wp_get_attachment_image_attributes","includes\\class-uf2-media.php",{"type":141,"name":165,"callback":166,"file":167,"line":145},"post_class","post_classes","includes\\class-uf2-post.php",{"type":141,"name":169,"callback":170,"file":167,"line":148},"body_class","body_classes",{"type":141,"name":172,"callback":172,"priority":135,"file":167,"line":173},"the_title",14,{"type":141,"name":175,"callback":176,"file":167,"line":153},"the_content","the_post",{"type":141,"name":178,"callback":178,"file":167,"line":157},"the_excerpt",{"type":141,"name":180,"callback":181,"priority":143,"file":167,"line":182},"date_i18n","fix_c_time_format",19,{"type":141,"name":184,"callback":185,"file":186,"line":187},"genesis_attr_site-title","uf2_genesis_attr_site_title","includes\\genesis.php",27,{"type":141,"name":189,"callback":190,"file":186,"line":191},"genesis_entry_header","uf2_genesis_entry_permalink",38,{"type":141,"name":193,"callback":194,"priority":195,"file":186,"line":196},"genesis_attr_entry-title","uf2_genesis_attr_entry_title",20,47,{"type":141,"name":198,"callback":199,"priority":195,"file":186,"line":200},"genesis_attr_entry-content","uf2_genesis_attr_entry_content",56,{"type":141,"name":202,"callback":203,"priority":195,"file":186,"line":204},"genesis_attr_entry-time","uf2_genesis_attr_entry_time",65,{"type":141,"name":206,"callback":207,"priority":195,"file":186,"line":208},"genesis_attr_entry-author","uf2_genesis_attr_entry_author",74,{"type":141,"name":210,"callback":211,"priority":195,"file":186,"line":212},"genesis_attr_entry-author-link","uf2_genesis_attr_entry_author_link",83,{"type":141,"name":214,"callback":215,"priority":195,"file":186,"line":32},"genesis_attr_entry-author-name","uf2_genesis_attr_entry_author_name",{"type":141,"name":217,"callback":218,"priority":195,"file":186,"line":219},"genesis_attr_comment","uf2_genesis_attr_comment",101,{"type":141,"name":221,"callback":222,"priority":195,"file":186,"line":223},"genesis_attr_comment-author","uf2_genesis_attr_comment_author",110,{"type":225,"name":226,"callback":227,"priority":135,"file":228,"line":145},"action","after_setup_theme","init","wp-uf2.php",[],[],[],[],{"dangerousFunctions":234,"sqlUsage":235,"outputEscaping":237,"fileOperations":25,"externalRequests":25,"nonceChecks":25,"capabilityChecks":25,"bundledLibraries":242},[],{"prepared":25,"raw":25,"locations":236},[],{"escaped":25,"rawEcho":91,"locations":238},[239],{"file":186,"line":240,"context":241},36,"raw output",[],[],{"summary":245,"deductions":246},"The wp-uf2 plugin v1.1.0 exhibits a strong security posture based on the provided static analysis data. The complete absence of identified entry points like AJAX handlers, REST API routes, shortcodes, and cron events significantly limits the potential attack surface. Furthermore, the code shows no signs of dangerous functions, file operations, or external HTTP requests, all of which are positive indicators. The use of prepared statements for all SQL queries is a critical best practice that prevents SQL injection vulnerabilities.\n\nHowever, the analysis did reveal a concerning lack of output escaping, with 100% of outputs not being properly escaped. This could potentially lead to Cross-Site Scripting (XSS) vulnerabilities if any of the plugin's outputs are directly influenced by user input without proper sanitization. The absence of nonce and capability checks, while seemingly neutral given the lack of entry points, would become a critical oversight if any new entry points were introduced or if the current lack of entry points is by design and not fully representative of its functionality.\n\nThe plugin's vulnerability history is also a positive sign, with no recorded CVEs or past vulnerabilities. This suggests a history of developing secure code. In conclusion, the plugin is well-defended against many common web vulnerabilities due to its limited attack surface and secure SQL handling. The primary and most significant weakness identified is the unescaped output, which warrants immediate attention to mitigate potential XSS risks.",[247],{"reason":248,"points":249},"Unescaped output detected",8,"2026-03-16T20:22:15.973Z",{"wat":252,"direct":262},{"assetPaths":253,"generatorPatterns":259,"scriptPaths":260,"versionParams":261},[254,255,256,257,258],"\u002Fwp-content\u002Fplugins\u002Fwp-uf2\u002Fincludes\u002Fclass-uf2-author.php","\u002Fwp-content\u002Fplugins\u002Fwp-uf2\u002Fincludes\u002Fclass-uf2-comment.php","\u002Fwp-content\u002Fplugins\u002Fwp-uf2\u002Fincludes\u002Fclass-uf2-media.php","\u002Fwp-content\u002Fplugins\u002Fwp-uf2\u002Fincludes\u002Fclass-uf2-post.php","\u002Fwp-content\u002Fplugins\u002Fwp-uf2\u002Fincludes\u002Fgenesis.php",[],[],[],{"cssClasses":263,"htmlComments":264,"htmlAttributes":265,"restEndpoints":266,"jsGlobals":267,"shortcodeOutput":268},[],[],[],[],[],[]]