{"id":4084,"date":"2025-02-16T05:30:05","date_gmt":"2025-02-16T05:30:05","guid":{"rendered":"https:\/\/s-o-s.net\/micropub\/"},"modified":"2025-02-16T05:30:05","modified_gmt":"2025-02-16T05:30:05","slug":"micropub","status":"publish","type":"post","link":"https:\/\/s-o-s.net\/en_gb\/micropub\/","title":{"rendered":"Micropub"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<article id=\"post-34523\" class=\"alignwide post-34523 plugin type-plugin status-publish hentry plugin_tags-indieweb plugin_tags-microformats plugin_tags-micropub plugin_tags-publish plugin_contributors-dshanske plugin_contributors-indieweb plugin_contributors-snarfed plugin_business_model-community plugin_committers-dshanske plugin_committers-indieweb plugin_committers-snarfed plugin_support_reps-indieweb\">\n<div class=\"plugin-banner\" id=\"plugin-banner-micropub\"><\/div>\n<header class=\"plugin-header\">\n<div class=\"entry-heading-container\">\n<div>\n<div class=\"entry-thumbnail\">\n\t\t\t\t\t<img decoding=\"async\" class=\"plugin-icon\" src=\"https:\/\/ps.w.org\/micropub\/assets\/icon.svg?rev=3102075\" alt=\"\">\t\t\t\t<\/div>\n<div>\n<h1 class=\"plugin-title\">Micropub<\/h1>\n<p>\t\t\t\t\t<span class=\"byline\">By <span class=\"author vcard\"><a target=\"_blank\" class=\"url fn n\" href=\"https:\/\/profiles.wordpress.org\/indieweb\/\" rel=\"noopener\">IndieWeb<\/a><\/span><\/span>\n\t\t\t\t<\/div>\n<\/p><\/div>\n<div class=\"plugin-actions\">\n<div class=\"wp-block-button is-small plugin-download download-button\"><a target=\"_blank\" class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/downloads.wordpress.org\/plugin\/micropub.2.4.0.zip\" rel=\"noopener\">Download<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/header>\n<p><!-- .entry-header --><\/p>\n<p>\t<span id=\"description\"><\/span><br \/>\n\t<span id=\"reviews\"><\/span><br \/>\n\t<span id=\"installation\"><\/span><br \/>\n\t<span id=\"developers\"><\/span><br \/>\n\t<span id=\"advanced\" class=\"\"><\/span><br \/>\n\t<span id=\"section-links\"><\/p>\n<ul class=\"tabs clear\">\n<li id=\"tablink-description\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/micropub\/#description\" rel=\"noopener\">Details<\/a><\/li>\n<li id=\"tablink-reviews\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/micropub\/#reviews\" rel=\"noopener\">Reviews<\/a><\/li>\n<li id=\"tablink-installation\">\n\t\t\t\t<a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/micropub\/#installation\" rel=\"noopener\">Installation<\/a>\n\t\t\t<\/li>\n<li id=\"tablink-developers\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/micropub\/#developers\" rel=\"noopener\">Development<\/a><\/li>\n<\/ul>\n<div id=\"link-support\">\n\t\t\t<a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/micropub\/\" rel=\"noopener\">Support<\/a>\n\t\t<\/div>\n<p>\t<\/span><br \/>\n\t<script type=\"text\/javascript\">if ( '#changelog' == window.location.hash ) { window.setTimeout( function() { window.location.hash=\"#developers\"; }, 10 ); }<\/script><\/p>\n<div class=\"entry-content\">\n<div id=\"tab-description\" class=\"plugin-description section\">\n<h2 id=\"description-header\">Description<\/h2>\n<p>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.<\/p>\n<p>Once you\u2019ve installed and activated the plugin, try a client such as <a target=\"_blank\" href=\"http:\/\/quill.p3k.io\/\" rel=\"nofollow ugc noopener\">Quill<\/a> 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 <a target=\"_blank\" href=\"https:\/\/indieweb.org\/Micropub\/Clients\" rel=\"nofollow ugc noopener\">here<\/a><\/p>\n<p>Supports the full <a target=\"_blank\" href=\"https:\/\/micropub.spec.indieweb.org\/\" rel=\"nofollow ugc noopener\">Micropub spec<\/a><\/p>\n<p>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.<\/p>\n<p>Available in the WordPress plugin directory at <a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/micropub\/\" rel=\"ugc noopener\">wordpress.org\/plugins\/micropub<\/a>.<\/p>\n<h3>License<\/h3>\n<p>This project is placed in the public domain. You may also use it under the <a target=\"_blank\" href=\"http:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/\" rel=\"nofollow ugc noopener\">CC0 license<\/a>.<\/p>\n<h3>WordPress details<\/h3>\n<h4>Filters and hooks<\/h4>\n<p>Adds ten filters:<\/p>\n<pre><code>before_micropub( $input )\n<\/code><\/pre>\n<p>Called before handling a Micropub request. Returns <code>$input<\/code>, possibly modified.<\/p>\n<pre><code>micropub_post_content( $post_content, $input )\n<\/code><\/pre>\n<p>Called during the handling of a Micropub request. The content generation function is attached to this filter by default. Returns <code>$post_content<\/code>, possibly modified.<\/p>\n<pre><code>micropub_post_type( $post_type=\"post\", $input )\n<\/code><\/pre>\n<p>Called during the creation of a Micropub post. This defaults to post, but allows for setting Micropub posts to a custom post type.<\/p>\n<pre><code>micropub_tax_input( $tax_input, $input )\n<\/code><\/pre>\n<p>Called during the creation of a Micropub post. This defaults to nothing but allows for a Micropub post to set a custom taxonomy.<\/p>\n<pre><code>micropub_syndicate-to( $synd_urls, $user_id, $input )\n<\/code><\/pre>\n<p>Called to generate the list of <code>syndicate-to<\/code> targets to return in response to a query. Returns <code>$synd_urls<\/code>, an array, possibly modified. This filter is empty by default<\/p>\n<pre><code>micropub_query( $resp, $input )\n<\/code><\/pre>\n<p>Allows you to replace a query response with your own customized version to add additional information<\/p>\n<pre><code>micropub_suggest_title( $mf2 )\n<\/code><\/pre>\n<p>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<\/p>\n<pre><code>indieauth_scopes( $scopes )\n<\/code><\/pre>\n<p>This returns scopes from a plugin implementing IndieAuth. This filter is empty by default.<\/p>\n<pre><code>indieauth_response( $response )\n<\/code><\/pre>\n<p>This returns the token auth response from a plugin implementing IndieAuth. This filter is empty by default.<\/p>\n<pre><code>pre_insert_micropub_post( $args )\n<\/code><\/pre>\n<p>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.<\/p>\n<p>\u2026and two hooks:<\/p>\n<pre><code>after_micropub( $input, $wp_args = null)\n<\/code><\/pre>\n<p>Called after handling a Micropub request. Not called if the request fails (ie doesn\u2019t return HTTP 2xx).<\/p>\n<pre><code>micropub_syndication( $ID, $syndicate_to )\n<\/code><\/pre>\n<p>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 <code>micropub_syndicate-to<\/code> filter.<\/p>\n<p>Arguments:<\/p>\n<ul>\n<li><code>$input<\/code>: associative array, the Micropub request in <a target=\"_blank\" href=\"http:\/\/micropub.net\/draft\/index.html#json-syntax\" rel=\"nofollow ugc noopener\">JSON format<\/a>. If the request was form-encoded or a multipart file upload, it\u2019s converted to JSON format.<\/li>\n<li><code>$wp_args<\/code>: optional associative array. For creates and updates, this is the arguments passed to <code>wp_insert_post<\/code> or <code>wp_update_post<\/code>. For deletes and undeletes, <code>args['ID']<\/code> contains the post id to be (un)deleted. Null for queries.<\/li>\n<\/ul>\n<h4>Other<\/h4>\n<p>Stores <a target=\"_blank\" href=\"http:\/\/microformats.org\/wiki\/microformats2\" rel=\"nofollow ugc noopener\">microformats2<\/a> properties in <a target=\"_blank\" href=\"https:\/\/codex.wordpress.org\/Function_Reference\/post_meta_Function_Examples\" rel=\"nofollow ugc noopener\">post metadata<\/a> with keys prefixed by <code>mf2_<\/code>. <a target=\"_blank\" href=\"https:\/\/indiewebcamp.com\/WordPress_Data#Microformats_data\" rel=\"nofollow ugc noopener\">Details here.<\/a> All values are arrays; use <code>unserialize()<\/code> to deserialize them.<\/p>\n<p>Does <em>not<\/em> support multithreading. PHP doesn\u2019t really either, so it generally won\u2019t matter, but just for the record.<\/p>\n<p>Supports Stable Extensions to Micropub:<\/p>\n<ul>\n<li><a target=\"_blank\" href=\"https:\/\/indieweb.org\/Micropub-extensions#Post_Status\" rel=\"nofollow ugc noopener\">Post Status<\/a> \u2013 Either <code>published<\/code> or <code>draft<\/code><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/indieweb.org\/Micropub-extensions#Visibility\" rel=\"nofollow ugc noopener\">Visibility<\/a> \u2013 Either <code>public<\/code> or <code>private<\/code>.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/indieweb.org\/Micropub-extensions#Query_for_Category.2FTag_List\" rel=\"nofollow ugc noopener\">Query for Category\/Tag List<\/a> \u2013 Supports querying for categories and tags.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/indieweb.org\/Micropub-extensions#Slug\" rel=\"nofollow ugc noopener\">Slug<\/a> \u2013 Custom slug.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/indieweb.org\/Micropub-extensions#Query_for_Post_List\" rel=\"nofollow ugc noopener\">Query for Post List<\/a> \u2013 Supports query for the last x number of posts.<\/li>\n<\/ul>\n<p>Supports Proposed Extensions to Micropub:<\/p>\n<ul>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/35\" rel=\"nofollow ugc noopener\">Limit Parameter for Query<\/a> \u2013 Supports adding limit to any query designed to return a list of options to limit it to that number.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/36\" rel=\"nofollow ugc noopener\">Offset Parameter for Query<\/a> \u2013 Supports adding offset to any query. Must be used with limit.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/34\" rel=\"nofollow ugc noopener\">Filter Parameter for Query<\/a> \u2013 Supported for the Category\/Tag List query.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/16\" rel=\"nofollow ugc noopener\">Location Visiblity<\/a> \u2013 Either <code>public<\/code>, <code>private<\/code>, or <code>protected<\/code><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/7\" rel=\"nofollow ugc noopener\">Query for Supported Queries<\/a> \u2013 Returns a list of query parameters the endpoint supports<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/8\" rel=\"nofollow ugc noopener\">Query for Supported Properties<\/a> \u2013 Returns a list of which supported experimental properties the endpoint supports so the client can choose to hide unsupported ones.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/15\" rel=\"nofollow ugc noopener\">Discovery of Media Endpoint using Link Rel<\/a> \u2013 Adds a link header for the media endpoint<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/32\" rel=\"nofollow ugc noopener\">Supports extended GEO URIs<\/a> \u2013 Supports adding arbitrary parameters to the GEO URI. Micropub converts this into an mf2 object. Supported as built into the Indigenous client.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/30\" rel=\"nofollow ugc noopener\">Supports deleting uploaded media<\/a> \u2013 Supports action=delete&amp;url=url on the media endpoint to delete files.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/14\" rel=\"nofollow ugc noopener\">Supports querying for media on the media endpoint<\/a> and <a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/37)\" rel=\"nofollow ugc noopener\">optional URL parameter for same<\/a><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/45\" rel=\"nofollow ugc noopener\">Supports filtering media queries by mime-type<\/a><\/li>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/8#issuecomment-536301952\" rel=\"nofollow ugc noopener\">Return Visibility in q=config<\/a><\/li>\n<\/ul>\n<p>Deprecated Extensions still Supported:<\/p>\n<ul>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/10\" rel=\"nofollow ugc noopener\">Last Media Uploaded<\/a> \u2013 Supports querying for the last image uploaded \u2026set to within the last hour. This was superseded by supporting <code>q=source&amp;limit=1<\/code> on the media endpoint.<\/li>\n<\/ul>\n<p>Extensions Supported by Other Plugins:<\/p>\n<ul>\n<li><a target=\"_blank\" href=\"https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/6\" rel=\"nofollow ugc noopener\">Query for Location<\/a> \u2013 Suported by Simple Location if installed.<\/li>\n<\/ul>\n<p>If an experimental property is not set to one of the noted options, the plugin will return HTTP 400 with body:<\/p>\n<pre><code>{\n  \"error\": \"invalid_request\",\n}\n<\/code><\/pre>\n<p>WordPress has a <a target=\"_blank\" href=\"https:\/\/codex.wordpress.org\/Uploading_Files#About_Uploading_Files_on_Dashboard\" rel=\"nofollow ugc noopener\">whitelist of file extensions that it allows in uploads<\/a>. If you upload a file in a Micropub extension that doesn\u2019t have an allowed extension, the plugin will return HTTP 400 with body:<\/p>\n<pre><code>{\n  &quot;error&quot;: &quot;invalid_request&quot;,\n  &quot;error_description&quot;: &quot;Sorry, this file is not permitted for security reasons.&quot;\n}&lt;h3&gt;Authentication and authorization&lt;\/h3&gt;\n<\/code><\/pre>\n<p>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.<\/p>\n<p>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.<\/p>\n<h3>Configuration Options<\/h3>\n<p>These configuration options can be enabled by adding them to your wp-config.php<\/p>\n<ul>\n<li><code>define('MICROPUB_NAMESPACE', 'micropub\/1.0' )<\/code> \u2013 By default the namespace for micropub is micropub\/1.0. This would allow you to change this for your endpoint<\/li>\n<li><code>define('MICROPUB_DISABLE_NAG', 1 )<\/code> \u2013 Disable notices for insecure sites<\/li>\n<li><code>define('MICROPUB_DRAFT_MODE', 1 )<\/code> \u2013 Override default post status and set to draft for debugging purposes.<\/li>\n<\/ul>\n<h3>Development<\/h3>\n<p>The canonical repo is http:\/\/github.com\/indieweb\/wordpress-micropub . Feedback and pull requests are welcome!<\/p>\n<p>To add a new release to the WordPress plugin directory, tag it with the version number and push the tag. It will automatically deploy.<\/p>\n<p>To set up your local environment to run the unit tests and set up PHPCodesniffer to test adherence to <a target=\"_blank\" href=\"https:\/\/make.wordpress.org\/core\/handbook\/coding-standards\/php\/\" rel=\"nofollow ugc noopener\">WordPress Coding Standards<\/a> and <a target=\"_blank\" href=\"https:\/\/github.com\/wimg\/PHPCompatibility\" rel=\"nofollow ugc noopener\">PHP Compatibility<\/a>:<\/p>\n<ol>\n<li>Install <a target=\"_blank\" href=\"https:\/\/getcomposer.org\" rel=\"nofollow ugc noopener\">Composer<\/a>. Composer is only used for development and is not required to run the plugin.<\/li>\n<li>Run <code>composer install<\/code> which will install PHP Codesniffer, PHPUnit, the standards required, and all dependencies.<\/li>\n<\/ol>\n<p>To configure PHPUnit<\/p>\n<ol>\n<li>Install and start MySQL. (You may already have it.)<\/li>\n<li>Run <code>.\/bin\/install-wp-tests.sh wordpress_micropub_test root '' localhost<\/code> to download WordPress and <a target=\"_blank\" href=\"https:\/\/develop.svn.wordpress.org\/trunk\/tests\/phpunit\/\" rel=\"nofollow ugc noopener\">its unit test library<\/a>, into your systems tmp directory by default, and create a MySQL db to test against. <a target=\"_blank\" href=\"http:\/\/wp-cli.org\/docs\/plugin-unit-tests\/\" rel=\"nofollow ugc noopener\" class=\"broken_link\">Background here<\/a>. Feel free to use a MySQL user other than <code>root<\/code>. You can set the <code>WP_CORE_DIR<\/code> and <code>WP_TESTS_DIR<\/code> environment variables to change where WordPress and its test library are installed. For example, I put them both in the repo dir.<\/li>\n<li>Open <code>wordpress-tests-lib\/wp-tests-config.php<\/code> and add a slash to the end of the ABSPATH value. No clue why it leaves off the slash; it doesn\u2019t work without it.<\/li>\n<li>\n<p>Run <code>phpunit<\/code> in the repo root dir. If you set <code>WP_CORE_DIR<\/code> and <code>WP_TESTS_DIR<\/code> above, you\u2019ll need to set them for this too. You should see output like this:<\/p>\n<p>Installing\u2026<br \/>\n\u2026<br \/>\n1 \/ 1 (100%)<br \/>\nTime: 703 ms, Memory: 33.75Mb<br \/>\nOK (1 test, 3 assertions)<\/p>\n<\/li>\n<\/ol>\n<p>To set up PHPCodesniffer to test adherence to <a target=\"_blank\" href=\"https:\/\/make.wordpress.org\/core\/handbook\/coding-standards\/php\/\" rel=\"nofollow ugc noopener\">WordPress Coding Standards<\/a> and <a target=\"_blank\" href=\"https:\/\/github.com\/wimg\/PHPCompatibility\" rel=\"nofollow ugc noopener\">PHP 5.6 Compatibility<\/a>:<\/p>\n<ol>\n<li>To list coding standard issues in a file, run <code>composer phpcs<\/code><\/li>\n<li>If you want to try to automatically fix issues, run `composer phpcbf\u201c.<\/li>\n<\/ol>\n<p>To automatically convert the readme.txt file to readme.md, you may, if you have installed composer as noted in the previous section, enter <code>composer update-readme<\/code> to have the .txt file converted<br \/>\ninto markdown and saved to readme.md.<\/p>\n<\/div>\n<div id=\"tab-installation\" class=\"plugin-installation section\">\n<h2 id=\"installation-header\">Installation<\/h2>\n<p>Install the IndieAuth plugin from the WordPress plugin directory, then install this plugin. No setup needed.<\/p>\n<\/div>\n<div id=\"faq\" class=\"plugin-faq section\">\n<h2 id=\"faq-header\">FAQ<\/h2>\n<dl>\n<dt id=\"i%20am%20experiencing%20issues%20in%20logging%20in%20with%20indieauth.\">\n<h3>I am experiencing issues in logging in with IndieAuth.<\/h3>\n<\/dt>\n<dd>\n<p>There are a series of troubleshooting steps in the IndieAuth plugin for this. The most common problem involves the token not being passed due the configuration of your hosting provider.<\/p>\n<\/dd>\n<\/dl>\n<\/div>\n<div id=\"tab-reviews\" class=\"plugin-reviews section\">\n<h2 id=\"reviews-header\">Reviews<\/h2>\n<div class=\"plugin-reviews\">\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/b386c3be63ad40515532f06f0a3f8fc3c5a9c760da75708f03eff64f35cd66d4?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/b386c3be63ad40515532f06f0a3f8fc3c5a9c760da75708f03eff64f35cd66d4?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/great-plugin-32041\/\" rel=\"noopener\">great plugin<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/shawfactor\/\" title=\"Posts by shawfactor\" rel=\"author noopener\">shawfactor<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">September 9, 2021<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">Great plugin that supports a very worthy movement in wordpress<\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/2f88c80005db8d6bc27301a3023cc557e267ae64b6ccd8dd5773120511910312?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/2f88c80005db8d6bc27301a3023cc557e267ae64b6ccd8dd5773120511910312?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/install-and-activate\/\" rel=\"noopener\">install and activate<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/khurtwilliams\/\" title=\"Posts by Kh\u00fcrt Williams\" rel=\"author noopener\">Kh\u00fcrt Williams<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">April 19, 2018<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">it works.<\/div>\n<\/p><\/div>\n<\/article><\/div>\n<p>\t\t<a target=\"_blank\" class=\"reviews-link\" href=\"https:\/\/wordpress.org\/support\/plugin\/micropub\/reviews\/\" rel=\"noopener\"><br \/>\n\t\t\tRead all 3 reviews\t\t<\/a><\/div>\n<div id=\"tab-developers\" class=\"plugin-developers section\">\n<h2 id=\"developers-header\">Contributors &amp; Developers<\/h2>\n<div class=\"plugin-contributors\">\n<p>\u201cMicropub\u201d is open source software. The following people have contributed to this plugin.<\/p>\n<p><span class=\"screen-reader-text\">Contributors<\/span><\/p>\n<ul id=\"contributors-list\" class=\"contributors-list\">\n<li>\n\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/f1f10f2209422ea3995be2be9662912db8e77b3866031470194d4dd9850d4e6b?s=32&amp;d=mm&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/f1f10f2209422ea3995be2be9662912db8e77b3866031470194d4dd9850d4e6b?s=64&amp;d=mm&amp;r=g 2x\" class=\"avatar avatar-32 photo\" height=\"32\" width=\"32\">\t\t\t\t<a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/indieweb\/\" rel=\"noopener\"><br \/>\n\t\t\t\t\tIndieWeb\t\t\t\t<\/a>\n\t\t\t<\/li>\n<li>\n\t\t\t\t<img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/1e98e73450023e3d952ec9cd4843c572580c50ea1de020f3e955a33873e1a316?s=32&amp;d=mm&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/1e98e73450023e3d952ec9cd4843c572580c50ea1de020f3e955a33873e1a316?s=64&amp;d=mm&amp;r=g 2x\" class=\"avatar avatar-32 photo\" height=\"32\" width=\"32\">\t\t\t\t<a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/snarfed\/\" rel=\"noopener\"><br \/>\n\t\t\t\t\tRyan\t\t\t\t<\/a>\n\t\t\t<\/li>\n<li>\n\t\t\t\t<img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/a2b36fcd437633d77a3fdaad2bde62dd98dce706821c6743dc6c52fb27a7e370?s=32&amp;d=mm&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/a2b36fcd437633d77a3fdaad2bde62dd98dce706821c6743dc6c52fb27a7e370?s=64&amp;d=mm&amp;r=g 2x\" class=\"avatar avatar-32 photo\" height=\"32\" width=\"32\">\t\t\t\t<a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/dshanske\/\" rel=\"noopener\"><br \/>\n\t\t\t\t\tDavid Shanske\t\t\t\t<\/a>\n\t\t\t<\/li>\n<\/ul><\/div>\n<div class=\"plugin-development\">\n<p>\u201cMicropub\u201d has been translated into 1 locale. Thank you to <a target=\"_blank\" href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/micropub\/contributors\" rel=\"noopener\">the translators<\/a> for their contributions.<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/micropub\" rel=\"noopener\">Translate \u201cMicropub\u201d into your language.<\/a><\/p>\n<h3>Interested in development?<\/h3>\n<p><a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/browser\/micropub\/\" rel=\"noopener\" class=\"broken_link\">Browse the code<\/a>, check out the <a target=\"_blank\" href=\"https:\/\/plugins.svn.wordpress.org\/micropub\/\" rel=\"noopener\">SVN repository<\/a>, or subscribe to the <a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/log\/micropub\/\" rel=\"noopener\" class=\"broken_link\">development log<\/a> by <a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/log\/micropub\/?limit=100&amp;mode=stop_on_copy&amp;format=rss\" rel=\"noopener\" class=\"broken_link\">RSS<\/a>.<\/p>\n<\/div>\n<\/div>\n<div id=\"tab-changelog\" class=\"plugin-changelog section\">\n<h2 id=\"changelog-header\">Changelog<\/h2>\n<h4>2.4.0 (2024-06-13)<\/h4>\n<ul>\n<li>Remove sole setting as no longer needed(see upgrade notice)<\/li>\n<li>Remove settings page as no more settings.<\/li>\n<li>Bump minimum PHP version to PHP7.2<\/li>\n<li>Require IndieAuth plugin as a dependency<\/li>\n<li>Switch to dynamic from static rendering on posts\u2026markup will no longer be placed inside the content block but dynamically added.<\/li>\n<\/ul>\n<h4>2.3.3 (2023-03-10)<\/h4>\n<ul>\n<li>Stop including visible text in reply contexts since they go inside since they go inside e-content, which webmention recipients use as the reply text.<\/li>\n<li>Fix undeclared variables<\/li>\n<\/ul>\n<h4>2.3.2 (2022-06-22 )<\/h4>\n<ul>\n<li>Update readme<\/li>\n<li>Fix client name bug<\/li>\n<\/ul>\n<h4>2.3.1 (2021-12-25 )<\/h4>\n<ul>\n<li>Made one little mistake.<\/li>\n<\/ul>\n<h4>2.3.0 (2021-12-25 )<\/h4>\n<ul>\n<li>Sanitize media endpoint queries<\/li>\n<li>Add mime_type filter for media queries<\/li>\n<li>Update media endpoint query response<\/li>\n<li>Set client application taxonomy id if present<\/li>\n<li>Add display functions for showing the client or returning the client data which will work with or without the client application taxonomy added in Indieauth<\/li>\n<li>Normalize JSON inputs to ensure no errors<\/li>\n<li>Add support for Visibility config return https:\/\/github.com\/indieweb\/micropub-extensions\/issues\/8#issuecomment-536301952<\/li>\n<li>Sets <code>_edit_last<\/code> property when a post is updated.<\/li>\n<\/ul>\n<h4>2.2.5 (2021-09-22 )<\/h4>\n<ul>\n<li>Update readme links<\/li>\n<li>Add filter to allow custom database insert.<\/li>\n<li>Latitude and longitude properties are now converted into a location property.<\/li>\n<li>Introduce new function to simplify returning a properly set datetime with timezone<\/li>\n<li>Media Endpoint now supports a delete action.<\/li>\n<li>New query unit test revealed bug in new q=source&amp;url= query previously introduced.<\/li>\n<li>Update media response to now just include published, updated, created, and mime_type for now.<\/li>\n<\/ul>\n<h4>2.2.4 (2021-05-06 )<\/h4>\n<ul>\n<li>Add published date to return from q=source on media endpoint<\/li>\n<\/ul>\n<h4>2.2.3 (2020-09-09 )<\/h4>\n<ul>\n<li>Deduplicated endpoint test code from endpoint and media endpoint classes.<\/li>\n<li>Removed error suppression revealing several notices that had been hidden. Fixed warning notices.<\/li>\n<li>Abstract request for scope and response into functions to avoid calling the actual filter as this may be deprecated in future.<\/li>\n<li>Switch check in permissions to whether a user was logged in.<\/li>\n<li>Published, updated, name, and summary properties are no longer stored in post meta. When queried, they will be pulled from the equivalent WordPress properties. Content should be as well, however as content in the post includes rendered microformats we need to store the pure version. Might address this in a future version.<\/li>\n<li>As timezone is not stored in the WordPress timestamp, store the timezone offset for the post in meta instead.<\/li>\n<li>Sideload and set featured images if featured property is set.<\/li>\n<\/ul>\n<h4>2.2.2 (2020-08-23 )<\/h4>\n<ul>\n<li>Fixed and updated testing environment<\/li>\n<li>Fixed failing tests as a result of update to testing environment<\/li>\n<li>Change return response code based on spec update from 401 to 403<\/li>\n<\/ul>\n<h4>2.2.1 (2020-07-31 )<\/h4>\n<ul>\n<li>Change category query parameter from search to filter per decision at Micropub Popup Session<\/li>\n<li>Fix permissions for Media Endpoint to match Endpoint<\/li>\n<li>For source query on both media and micropub endpoint support offset parameter<\/li>\n<\/ul>\n<h4>2.2.0 (2020-07-25 )<\/h4>\n<ul>\n<li>Deprecate MICROPUB_LOCAL_AUTH, MICROPUB_AUTHENTICATION_ENDPOINT and MICROPUB_TOKEN_ENDPOINT constants.<\/li>\n<li>Remove IndieAuth Client code, will now require the IndieAuth or other plugin that does not yet exist.<\/li>\n<\/ul>\n<h4>2.1.0 (2020-02-06 )<\/h4>\n<ul>\n<li>Fix bug where timezone meta key was always set to website timezone instead of provided one<\/li>\n<li>Fix issue where title and caption were not being set for images by adopting code from WordPress core<\/li>\n<li>Remove post scope<\/li>\n<li>Add support for draft scope<\/li>\n<li>Improve permission handling by ensuring someone cannot edit another users posts unless they have that capability<\/li>\n<li>Fix issue with date rendering in events<\/li>\n<li>return URL in response to creating a post<\/li>\n<li>introduce two new filters to filter the post type and the taxonomy input for posts<\/li>\n<\/ul>\n<h4>2.0.11 (2019-05-25)<\/h4>\n<ul>\n<li>Fix issues with empty variables<\/li>\n<li>Update last media query to limit itself to last hour<\/li>\n<li>Undelete is now part of delete scope as there is no undelete scope<\/li>\n<li>Address issue where properties in upload are single property arrays<\/li>\n<\/ul>\n<h4>2.0.10 (2019-04-13)<\/h4>\n<ul>\n<li>Fix issue with media not being attached to post<\/li>\n<\/ul>\n<h4>2.0.9 (2019-03-25)<\/h4>\n<ul>\n<li>Add filter <code>micropub_suggest_title<\/code> and related function to generate slugs<\/li>\n<li>Map updated property to WordPress modified property<\/li>\n<li>Add meta key to micropub uploaded media so it can be queried<\/li>\n<li>Add last and source queries for media endpoint<\/li>\n<li>Set up return function for media that returns attachment metadata for now<\/li>\n<\/ul>\n<h4>2.0.8 (2019-03-08)<\/h4>\n<ul>\n<li>Parse geo URI into h-geo or h-card object<\/li>\n<\/ul>\n<h4>2.0.7 (2019-02-18)<\/h4>\n<ul>\n<li>Update geo storage to fix accuracy storage as well as allow for name parameter and future parameters to be passed. Indigenous for Android now supports passing this<\/li>\n<\/ul>\n<h4>2.0.6 (2018-12-30)<\/h4>\n<ul>\n<li>Adjust query filter to allow for new properties to be added by query<\/li>\n<li>Add Gutenberg information into README<\/li>\n<\/ul>\n<h4>2.0.5 (2018-11-23)<\/h4>\n<ul>\n<li>Move syndication trigger to after micropub hook in order to ensure final version is rendered before sending syndication<\/li>\n<li>Add settings UI for alternate authorization endpoint and token endpoint which will be hidden if Indieauth plugin is enabled<\/li>\n<\/ul>\n<h4>2.0.4 (2018-11-17)<\/h4>\n<ul>\n<li>Issues raised on prior release.<\/li>\n<li>Removed generating debug messages when the data is empty<\/li>\n<\/ul>\n<h4>2.0.3 (2018-11-17)<\/h4>\n<ul>\n<li>Fix issue where the after_micropub action could not see form encoded files by adding them as properties on upload<\/li>\n<li>Fix issue in previous release where did not account for a null request sent by wpcli<\/li>\n<li>Add search parameter to category<\/li>\n<li>Wrap category query in categories key to be consistent with other query parameters<\/li>\n<li>If a URL is not provided to the query source parameter it will return the last 10 posts or more\/less with an optional parameter<\/li>\n<li>Micropub query filter now called after default parameters are added rather than before so it can modify the defaults rather than replacing them.<\/li>\n<li>Micropub config query now returns a list of supported mp parameters and supported q query parameters<\/li>\n<li>Micropub media endpoint config query now returns an empty array indicating that it has no configuration parameters yet<\/li>\n<\/ul>\n<h4>2.0.2 (2018-11-12)<\/h4>\n<ul>\n<li>Fix issue with built-in auth and update compatibility testing<\/li>\n<li>Add experimental endpoint discovery option(https:\/\/indieweb.org\/micropub_media_endpoint#Discovery_via_link_rel)<\/li>\n<\/ul>\n<h4>2.0.1 (2018-11-04)<\/h4>\n<ul>\n<li>Move authorization code later in load to resolve conflict<\/li>\n<\/ul>\n<h4>2.0.0 (2018-10-22)<\/h4>\n<ul>\n<li>Split plugin into files by functionality<\/li>\n<li>Change authorization to integrate with WordPress mechanisms for login<\/li>\n<li>Reject where the URL cannot be matched with a user account<\/li>\n<li>Rewrite using REST API<\/li>\n<li>Use <code>indieauth_scopes<\/code> and <code>indieauth_response<\/code> originally added for IndieAuth integration to be used by built in auth as well<\/li>\n<li>Improve handling of access tokens in headers to cover additional cases<\/li>\n<li>Add Media Endpoint<\/li>\n<li>Improve error handling<\/li>\n<li>Ensure compliance with Micropub spec<\/li>\n<li>Update composer dependencies and include PHPUnit as a development dependency<\/li>\n<li>Add nag notice for http domains and the option to diable with a setting<\/li>\n<li>Load auth later in init sequence to avoid conflict<\/li>\n<\/ul>\n<h4>1.4.3 (2018-05-27)<\/h4>\n<ul>\n<li>Change scopes to filter<\/li>\n<li>Get token response when IndieAuth plugin is installed<\/li>\n<\/ul>\n<h4>1.4.2 (2018-04-19)<\/h4>\n<ul>\n<li>Enforce scopes<\/li>\n<\/ul>\n<h4>1.4.1 (2018-04-15)<\/h4>\n<ul>\n<li>Version bump due some individuals not getting template file<\/li>\n<\/ul>\n<h4>1.4 (2018-04-08)<\/h4>\n<ul>\n<li>Separate functions that generate headers into micropub and IndieAuth<\/li>\n<li>Add support for an option now used by the IndieAuth plugin to set alternate token and authorization endpoints<\/li>\n<li>MICROPUB_LOCAL_AUTH configuration option adjusted to reflect that this disables the plugin built in authentication. This can hand it back to WordPress or allow another plugin to take over<\/li>\n<li>MICROPUB_LOCAL_AUTH now disables adding auth headers to the page.<\/li>\n<li>Fix post status issue by checking for valid defaults<\/li>\n<li>Add configuration option under writing settings to set default post status<\/li>\n<li>Add <code>micropub_syndication<\/code> hook that only fires on a request to syndicate to make it easier for third-party plugins to hook in<\/li>\n<\/ul>\n<h4>1.3 (2017-12-31)<\/h4>\n<ul>\n<li>Saves access token response in a post meta field <code>micropub_auth_response<\/code>.<\/li>\n<li>Bug fix for <code>post_date_gmt<\/code><\/li>\n<li>Store timezone from published in arguments passed to micropub filter<\/li>\n<li>Correctly handle published times that are in a different timezone than the site.<\/li>\n<li>Set minimum version to PHP 5.3<\/li>\n<li>Adhere to WordPress Coding Standards<\/li>\n<li>Add <code>micropub_query<\/code> filter<\/li>\n<li>Support Nested Properties in Content Generation<\/li>\n<li>Deprecate <code>MICROPUB_DRAFT_MODE<\/code> configuration option in favor of setting option<\/li>\n<li>Remove post content generation override in case of microformats2 capable theme or Post Kinds plugin installed<\/li>\n<li>Introduce <code>micropub_post_content<\/code> filter to which post content generation is attached so that a theme or plugin can modify\/remove the post generation as needed<\/li>\n<\/ul>\n<h4>1.2 (2017-06-25)<\/h4>\n<ul>\n<li>Support <a target=\"_blank\" href=\"https:\/\/ownyourswarm.p3k.io\/\" rel=\"nofollow ugc noopener\">OwnYourSwarm<\/a>\u2018s <a target=\"_blank\" href=\"https:\/\/ownyourswarm.p3k.io\/docs#checkins\" rel=\"nofollow ugc noopener\">custom <code>checkin<\/code> microformats2 property<\/a>, including auto-generating content if necessary.<\/li>\n<li>Support <code>u-bookmark-of<\/code>.<\/li>\n<\/ul>\n<h4>1.1 (2017-03-30)<\/h4>\n<ul>\n<li>Support <a target=\"_blank\" href=\"http:\/\/microformats.org\/wiki\/h-adr\" rel=\"nofollow ugc noopener\"><code>h-adr<\/code><\/a>, <a target=\"_blank\" href=\"http:\/\/microformats.org\/wiki\/h-geo\" rel=\"nofollow ugc noopener\"><code>h-geo<\/code><\/a>, and plain text values for <a target=\"_blank\" href=\"http:\/\/microformats.org\/wiki\/h-event#p-location\" rel=\"nofollow ugc noopener\"><code>p-location<\/code><\/a>.<\/li>\n<li>Bug fix for create\/update with <code>content[html]<\/code>.<\/li>\n<\/ul>\n<h4>1.0.1<\/h4>\n<ul>\n<li>Remove accidental dependence on PHP 5.3 (#46).<\/li>\n<\/ul>\n<h4>1.0<\/h4>\n<p>Substantial update. Supports <a target=\"_blank\" href=\"https:\/\/www.w3.org\/TR\/micropub\/\" rel=\"nofollow ugc noopener\">full W3C Micropub spec<\/a>, except for optional<br \/>\nmedia endpoint.<\/p>\n<ul>\n<li>Change <code>mf2_*<\/code> post meta format from multiple separate values to single array value that can be deserialized with <code>unserialize<\/code>.<\/li>\n<li>Change the <code>before_micropub<\/code> filter\u2019s signature from <code>( $wp_args )<\/code> to <code>( $input )<\/code> (microformats2 associative array).<\/li>\n<li>Change the <code>after_micropub<\/code> hook\u2019s signature changed from <code>( $post_id )<\/code> to <code>( $input, $wp_args )<\/code> (microformats2 associative array, WordPress post args).<\/li>\n<li>Post content will not be automatically marked up if theme supports microformats2 or <a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/indieweb-post-kinds\/\" rel=\"ugc noopener\">Post Kinds plugin<\/a> is enabled.<\/li>\n<li>Add PHP Codesniffer File.<\/li>\n<\/ul>\n<h4>0.4<\/h4>\n<ul>\n<li>Store all properties in post meta except those in a blacklist.<\/li>\n<li>Support setting authentication and token endpoint in wp-config by setting <code>MICROPUB_AUTHENTICATION_ENDPOINT<\/code> and <code>MICROPUB_TOKEN_ENDPOINT<\/code>.<\/li>\n<li>Support setting all micropub posts to draft in wp-config for testing by setting <code>MICROPUB_DRAFT_MODE<\/code> in wp-config.<\/li>\n<li>Support using local auth to authenticate as opposed to IndieAuth as by setting <code>MICROPUB_LOCAL_AUTH<\/code> in wp-config.<\/li>\n<li>Set content to summary if no content provided.<\/li>\n<li>Support querying for syndicate-to and future query options.<\/li>\n<\/ul>\n<h4>0.3<\/h4>\n<ul>\n<li>Use the specific WordPress user whose URL matches the access token, if possible.<\/li>\n<li>Set <code>post_date_gmt<\/code> as well as <code>post_date<\/code>.<\/li>\n<\/ul>\n<h4>0.2<\/h4>\n<ul>\n<li>Support more Micropub properties: <code>photo<\/code>, <code>like-of<\/code>, <code>repost-of<\/code>, <code>in-reply-to<\/code>, <code>rsvp<\/code>, <code>location<\/code>, <code>category<\/code>, <code>h=event<\/code>.<\/li>\n<li>Check but don\u2019t require access tokens on localhost.<\/li>\n<li>Better error handling.<\/li>\n<\/ul>\n<h4>0.1<\/h4>\n<p>Initial release.<\/p>\n<\/div><\/div>\n<p><!-- .entry-content --><\/p>\n<p>\t<!-- .entry-meta --><br \/>\n<\/article>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><br \/>\n<br \/><br \/>\n<br \/><a href=\"https:\/\/wordpress.org\/plugins\/micropub\/\" target=\"_blank\" rel=\"noopener\">Source link <\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Micropub By IndieWeb Download Details Reviews Installation Development Support Description 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 [&hellip;]<\/p>","protected":false},"author":219,"featured_media":4085,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"give_campaign_id":0,"footnotes":""},"categories":[1933,39,40],"tags":[2800],"class_list":["post-4084","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-community-plugin","category-lite-version","category-wp-plugin-solution","tag-micropub"],"acf":[],"fifu_image_url":"https:\/\/ps.w.org\/micropub\/assets\/banner-772x250.png?rev=3102075","_links":{"self":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts\/4084","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/users\/219"}],"replies":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/comments?post=4084"}],"version-history":[{"count":0,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts\/4084\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/media\/4085"}],"wp:attachment":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/media?parent=4084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/categories?post=4084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/tags?post=4084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}