{"id":90036,"date":"2018-08-14T07:45:24","date_gmt":"2018-08-14T07:45:24","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mf2-feed\/"},"modified":"2026-08-28T15:07:32","modified_gmt":"2026-08-28T15:07:32","slug":"mf2-feed","status":"publish","type":"plugin","link":"https:\/\/dv.wordpress.org\/plugins\/mf2-feed\/","author":130940,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.2.0","stable_tag":"3.2.0","tested":"7.1","requires":"5.3","requires_php":"7.4","requires_plugins":null,"header_name":"MF2 Feed","header_author":"IndieWeb WordPress Outreach Club","header_description":"Adds a Microformats2 JSON feed for every entry","assets_banners_color":"","last_updated":"2026-08-28 15:07:32","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/opencollective.com\/indieweb","header_plugin_uri":"http:\/\/github.com\/indieweb\/wordpress-mf2-feed\/","header_author_uri":"https:\/\/indieweb.org\/WordPress_Outreach_Club","rating":0,"author_block_rating":0,"active_installs":30,"downloads":3905,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"pfefferle","date":"2018-08-14 07:44:46","revision":1924486},"2.1.0":{"tag":"2.1.0","author":"pfefferle","date":"2018-12-03 13:05:39","revision":1984440},"3.0.0":{"tag":"3.0.0","author":"indieweb","date":"2020-01-27 19:10:26","revision":2234061},"3.1.0":{"tag":"3.1.0","author":"indieweb","date":"2021-07-21 14:15:50","revision":2569322},"3.1.1":{"tag":"3.1.1","author":"pfefferle","date":"2026-08-21 16:37:43","revision":3659372},"3.2.0":{"tag":"3.2.0","author":"pfefferle","date":"2026-08-28 15:07:32","revision":3670586}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":2856054,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0","2.1.0","3.0.0","3.1.0","3.1.1","3.2.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[14242,251844,251843,9307,251845],"plugin_category":[],"plugin_contributors":[86200,153308,77968],"plugin_business_model":[],"class_list":["post-90036","plugin","type-plugin","status-publish","hentry","plugin_tags-indieweb","plugin_tags-jf2","plugin_tags-mf2","plugin_tags-microformats","plugin_tags-rel-alternate","plugin_contributors-dshanske","plugin_contributors-indieweb","plugin_contributors-pfefferle","plugin_committers-dshanske","plugin_committers-indieweb","plugin_committers-pfefferle"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mf2-feed\/assets\/icon-256x256.png?rev=2856054","icon_2x":"https:\/\/ps.w.org\/mf2-feed\/assets\/icon-256x256.png?rev=2856054","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>MF2 Feed adds a machine readable version of your posts, in the same way WordPress already offers RSS feeds. Other sites and services (readers, Webmention endpoints, IndieWeb tools) can read your content as structured data, no matter which theme you use.<\/p>\n\n<p>Just install and activate the plugin. There are no settings.<\/p>\n\n<p>After activation every URL of your site gets two additional feeds:<\/p>\n\n<ul>\n<li><strong>Microformats2 JSON<\/strong> (<code>\/feed\/mf2\/<\/code>): the raw <a href=\"https:\/\/indieweb.org\/microformats\">Microformats2<\/a> data, the same format a Microformats parser would produce.<\/li>\n<li><strong>JF2<\/strong> (<code>\/feed\/jf2\/<\/code>): a simplified version of the same data, easier to read and to work with. See the <a href=\"https:\/\/jf2.spec.indieweb.org\/\">JF2 spec<\/a>.<\/li>\n<\/ul>\n\n<h3>Examples<\/h3>\n\n<ul>\n<li>Your site: <code>https:\/\/example.com\/<\/code> \u2192 <code>https:\/\/example.com\/feed\/mf2\/<\/code> and <code>https:\/\/example.com\/feed\/jf2\/<\/code><\/li>\n<li>A single post: <code>https:\/\/example.com\/2024\/01\/my-post\/<\/code> \u2192 <code>https:\/\/example.com\/2024\/01\/my-post\/feed\/mf2\/<\/code> and <code>https:\/\/example.com\/2024\/01\/my-post\/feed\/jf2\/<\/code> (the comments of the post are included)<\/li>\n<\/ul>\n\n<p>A live example: <a href=\"https:\/\/notiz.blog\/2013\/06\/18\/the-rise-of-the-indieweb\/\">https:\/\/notiz.blog\/2013\/06\/18\/the-rise-of-the-indieweb\/<\/a> and the matching <a href=\"https:\/\/notiz.blog\/2013\/06\/18\/the-rise-of-the-indieweb\/feed\/mf2\">mf2<\/a> and <a href=\"https:\/\/notiz.blog\/2013\/06\/18\/the-rise-of-the-indieweb\/feed\/jf2\">jf2<\/a> feeds.<\/p>\n\n<p>The plugin also adds <code>rel=\"alternate\"<\/code> links to the <code>&lt;head&gt;<\/code> of every page, so tools can discover the feeds on their own. And it supports content negotiation: a client that requests a post with the <code>Accept: application\/mf2+json<\/code> (or <code>application\/jf2+json<\/code>) header gets the JSON directly instead of the HTML.<\/p>\n\n<h3>Why?<\/h3>\n\n<p><a href=\"https:\/\/indieweb.org\/microformats\">Microformats2<\/a> are a key <a href=\"https:\/\/indieweb.org\/Category:building-blocks\">building block<\/a> of the IndieWeb. But it is very hard (if not impossible) to get them into all WordPress themes. There are a <a href=\"https:\/\/indieweb.org\/WordPress\/Themes\">few community themes<\/a> that support Microformats2, but you should be able to use the theme you like. After <a href=\"https:\/\/github.com\/indieweb\/wordpress-uf2\/issues\/30\">a lot of discussions<\/a> and some different plugin approaches, this plugin provides an alternate (<a href=\"https:\/\/indieweb.org\/rel-alternate\"><code>rel=\"alternate\"<\/code><\/a>) representation instead of changing the HTML of your theme.<\/p>\n\n<p>The URL design is inspired by <a href=\"https:\/\/github.com\/aaronpk\/p3k\">p3k<\/a> of <a href=\"https:\/\/github.com\/aaronpk\">@aaronpk<\/a>.<\/p>\n\n<!--section=installation-->\n<h3>From the plugin directory<\/h3>\n\n<ol>\n<li>Go to <em>Plugins &gt; Add New<\/em> in your WordPress admin.<\/li>\n<li>Search for \"<code>mf2-feed<\/code>\".<\/li>\n<li>Click <strong>Install Now<\/strong> and then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h3>Manual installation<\/h3>\n\n<ol>\n<li>Download the plugin from <a href=\"https:\/\/wordpress.org\/plugins\/mf2-feed\/\">the WordPress directory<\/a> or from <a href=\"https:\/\/github.com\/indieweb\/wordpress-mf2-feed\/releases\">GitHub<\/a>.<\/li>\n<li>Upload the <code>mf2-feed<\/code> folder to <code>wp-content\/plugins\/<\/code> on your server.<\/li>\n<li>Go to <em>Plugins<\/em> and click <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20are%20microformats2%3F\"><h3>What are Microformats2?<\/h3><\/dt>\n<dd><p>Microformats are a simple way to mark up structured information in HTML using classes. WordPress uses some classic Microformats out of the box. Microformats2 supersedes the classic ones. You can read more on <a href=\"http:\/\/microformats.org\/wiki\/microformats2\">microformats.org<\/a>.<\/p><\/dd>\n<dt id=\"what%20is%20jf2%3F\"><h3>What is JF2?<\/h3><\/dt>\n<dd><p><a href=\"https:\/\/jf2.spec.indieweb.org\/\">JF2<\/a> is a simpler JSON format based on Microformats2. It is easier to consume in code, so most tools prefer it.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20special%20theme%3F\"><h3>Do I need a special theme?<\/h3><\/dt>\n<dd><p>No. The feeds are generated from the post data, not from the HTML of your theme. That is the whole point of the plugin.<\/p><\/dd>\n<dt id=\"are%20there%20any%20settings%3F\"><h3>Are there any settings?<\/h3><\/dt>\n<dd><p>No. Install, activate, done.<\/p><\/dd>\n<dt id=\"the%20feed%20urls%20return%20a%20404\"><h3>The feed URLs return a 404<\/h3><\/dt>\n<dd><p>The plugin registers new rewrite rules on activation. If the URLs do not work, go to <em>Settings &gt; Permalinks<\/em> and click <em>Save Changes<\/em> once. This flushes the rewrite rules.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20feed%20output%3F\"><h3>Can I change the feed output?<\/h3><\/dt>\n<dd><p>Yes, for developers there are a few filters: <code>mf2_feed_array<\/code> and <code>jf2_feed_array<\/code> for the whole feed, <code>mf2_entry_array<\/code> and <code>jf2_entry_array<\/code> for a single entry, and <code>mf2_feed_content_type<\/code> \/ <code>jf2_feed_content_type<\/code> for the content type.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20help%3F\"><h3>Where can I get help?<\/h3><\/dt>\n<dd><p>The plugin is developed on GitHub at <a href=\"https:\/\/github.com\/indieweb\/wordpress-mf2-feed\">indieweb\/wordpress-mf2-feed<\/a>. Please file support issues there.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>Project actively developed on Github at <a href=\"https:\/\/github.com\/indieweb\/wordpress-mf2-feed\">indieweb\/wordpress-mf2-feed<\/a>. Please file support issues there.<\/p>\n\n<h3>3.2.0<\/h3>\n\n<ul>\n<li>Moved the main class to <code>includes\/<\/code> and renamed it to <code>Mf2_Feed<\/code> (<code>Mf2Feed<\/code> still works as alias)<\/li>\n<li>Added <code>MF2_FEED_*<\/code> constants<\/li>\n<li>Fixed the <code>mf2_feed_options<\/code>\/<code>jf2_feed_options<\/code> filters, they never fired<\/li>\n<li>Fixed post names being replaced by their IDs<\/li>\n<li>Fixed missing site icon in the JF2 feed<\/li>\n<li>Removed the <code>get_self_link()<\/code> shim, requires WordPress 5.3 now<\/li>\n<li>Fixed the feed links on a static front page, they pointed to the page entry instead of the site feed (#19)<\/li>\n<li>Feed links are only added on the home page, the front page and single entries, not on archives (#16)<\/li>\n<li>Added <code>Mf2_Feed_Entry::from_post()<\/code>, entries are only built for valid posts (#10)<\/li>\n<li>Added the <code>mf2_*<\/code> post meta (Micropub, Post Kinds) to the entries, with a <code>mf2_feed_meta_properties<\/code> filter (#3)<\/li>\n<li>Updated the dev dependencies and added a <code>composer lint<\/code> script<\/li>\n<\/ul>\n\n<h3>3.1.1<\/h3>\n\n<ul>\n<li>Small tweaks and dependency updates<\/li>\n<\/ul>\n\n<h3>3.1.0<\/h3>\n\n<ul>\n<li>Support Content Negotiation<\/li>\n<\/ul>\n\n<h3>3.0.0<\/h3>\n\n<ul>\n<li>Refactored to match the configuration of feeds built into WordPress<\/li>\n<li>Bumped PHP Version requirement to PHP5.6 to match WordPress 5.3<\/li>\n<li>Bumped minimum WordPress version to 5.2 as this allows for the version of get_content that includes a $post parameter<\/li>\n<li>Fixed incorrect PHPCS configuration<\/li>\n<li>Enabled JSON Pretty Print by default as originally disabled due a PHP5.4 requirement<\/li>\n<li>Changed Post Item Generation Class to use WordPress functions instead of directly accessing the data where applicable<\/li>\n<li>Adjusted jf2 feed to comply with jf2feed spec (https:\/\/jf2.spec.indieweb.org\/#jf2feed)<\/li>\n<\/ul>\n\n<h3>2.1.0<\/h3>\n\n<ul>\n<li>Fixed JSON output<\/li>\n<li>Fixed \"flush rewrite rules\" again<\/li>\n<\/ul>\n\n<h3>2.0.1<\/h3>\n\n<ul>\n<li>Fixed \"flush rewrite rules\"<\/li>\n<li>Added filter to extend the mf2\/jf2 data<\/li>\n<\/ul>\n\n<h3>2.0.0<\/h3>\n\n<ul>\n<li>Complete re-write to match the latest ideas of rel-alternate: https:\/\/github.com\/indieweb\/wordpress-uf2\/issues\/38<\/li>\n<\/ul>\n\n<h3>1.0.0<\/h3>\n\n<ul>\n<li>Initial plugin<\/li>\n<\/ul>","raw_excerpt":"Add Microformats2 Feeds for WordPress","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/90036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=90036"}],"author":[{"embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pfefferle"}],"wp:attachment":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=90036"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=90036"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=90036"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=90036"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=90036"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=90036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}