{"id":160547,"date":"2022-07-26T13:16:07","date_gmt":"2022-07-26T13:16:07","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/eacreadme\/"},"modified":"2025-08-08T11:30:34","modified_gmt":"2025-08-08T11:30:34","slug":"eacreadme","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/eacreadme\/","author":20183118,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.5.1","stable_tag":"1.5.1","tested":"6.8.5","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"{eac}Readme","header_author":"EarthAsylum Consulting","header_description":"{eac}Readme loads and translates a WordPress readme.txt file providing shortcodes to access header lines, section blocks, or the entire document.","assets_banners_color":"b4c5a5","last_updated":"2025-08-08 11:30:34","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/github.com\/sponsors\/EarthAsylum","header_plugin_uri":"https:\/\/eacdoojigger.earthasylum.com\/eacreadme\/","header_author_uri":"http:\/\/www.earthasylum.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":3279,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"kevinburkholder","date":"2022-09-10 14:19:42"},"1.1.1":{"tag":"1.1.1","author":"kevinburkholder","date":"2022-09-28 17:51:04"},"1.2.0":{"tag":"1.2.0","author":"kevinburkholder","date":"2023-03-31 13:55:01"},"1.2.2":{"tag":"1.2.2","author":"kevinburkholder","date":"2023-06-09 03:18:07"},"1.2.3":{"tag":"1.2.3","author":"kevinburkholder","date":"2023-11-01 21:49:05"},"1.2.4":{"tag":"1.2.4","author":"kevinburkholder","date":"2023-12-04 16:27:49"},"1.2.5":{"tag":"1.2.5","author":"kevinburkholder","date":"2023-12-11 01:48:21"},"1.2.6":{"tag":"1.2.6","author":"kevinburkholder","date":"2024-01-24 17:25:57"},"1.3.0":{"tag":"1.3.0","author":"kevinburkholder","date":"2024-01-30 18:25:33"},"1.4.0":{"tag":"1.4.0","author":"kevinburkholder","date":"2024-02-10 02:12:51"},"1.4.1":{"tag":"1.4.1","author":"kevinburkholder","date":"2024-03-01 16:50:24"},"1.4.2":{"tag":"1.4.2","author":"kevinburkholder","date":"2024-04-04 17:52:40"},"1.4.3":{"tag":"1.4.3","author":"kevinburkholder","date":"2024-10-12 12:53:02"},"1.4.4":{"tag":"1.4.4","author":"kevinburkholder","date":"2025-04-22 23:01:51"},"1.4.5":{"tag":"1.4.5","author":"kevinburkholder","date":"2025-07-21 22:25:15"},"1.5.0":{"tag":"1.5.0","author":"kevinburkholder","date":"2025-08-07 23:29:19"},"1.5.1":{"tag":"1.5.1","author":"kevinburkholder","date":"2025-08-08 11:30:34"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":2761820,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":2761820,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":2761820,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":2761820,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0","1.1.1","1.2.0","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.3.0","1.4.0","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5","1.5.0","1.5.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3092459,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3092459,"resolution":"2","location":"assets","locale":""}},"screenshots":{"1":"<p>Readme Extension\n<\/p>","2":"<p>Readme Help\n<\/p>"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[12156,212626,4608,42183,13433],"plugin_category":[],"plugin_contributors":[211905],"plugin_business_model":[],"class_list":["post-160547","plugin","type-plugin","status-publish","hentry","plugin_tags-code-highlighting","plugin_tags-eacdoojigger","plugin_tags-markdown","plugin_tags-parsedown","plugin_tags-readme","plugin_contributors-kevinburkholder","plugin_committers-kevinburkholder"],"banners":{"banner":"https:\/\/ps.w.org\/eacreadme\/assets\/banner-772x250.jpg?rev=2761820","banner_2x":"https:\/\/ps.w.org\/eacreadme\/assets\/banner-1544x500.jpg?rev=2761820","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/eacreadme\/assets\/icon-128x128.png?rev=2761820","icon_2x":"https:\/\/ps.w.org\/eacreadme\/assets\/icon-256x256.png?rev=2761820","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/eacreadme\/assets\/screenshot-1.png?rev=3092459","caption":"<p>Readme Extension\n<\/p>"},{"src":"https:\/\/ps.w.org\/eacreadme\/assets\/screenshot-2.png?rev=3092459","caption":"<p>Readme Help\n<\/p>"}],"raw_content":"<!--section=description-->\n<p><em>{eac}Readme<\/em> is an <a href=\"https:\/\/eacDoojigger.earthasylum.com\/\">{eac}Doojigger<\/a> extension which loads and translates a WordPress markdown 'readme' file providing shortcodes and embedding URLs to access header lines and section blocks.<\/p>\n\n<h4>Shortcode Usage<\/h4>\n\n<p>The first used shortcode must indicate the file to load...<\/p>\n\n<pre><code>[eacReadme file='\/docfolder\/readme.txt']        # file is relative to the WordPress document root folder\n[eacReadme content='\/contentfolder\/readme.txt'] # content file is relative to the WordPress content folder (wp-content\/)\n[eacReadme plugin='\/pluginfolder\/readme.txt']   # plugin file is relative to the WordPress plugins folder (wp-content\/plugins\/)\n[eacReadme theme='\/themefolder\/readme.txt']     # theme file is relative to the WordPress themes folder (wp-content\/themes\/)\n[eacReadme wpsvn='\/slugname\/trunk\/readme.txt']  # load file from WordPress SVN repository\n[eacReadme github='\/owner\/repository\/main\/readme.txt']      # load file from a github repository\n<\/code><\/pre>\n\n<p>After which, headers and sections may be pulled from that file...<\/p>\n\n<pre><code>[eacReadme]All Headers[\/eacReadme]              # parses all header lines\n[eacReadme]headerName[\/eacReadme]               # gets the value of the named header line\n\n[eacReadme]All Sections[\/eacReadme]             # parses all section blocks\n[eacReadme]sectionName[\/eacReadme]              # parses the content of the named section block\n[eacReadme]sectionName\/sub-section[\/eacReadme]  # parses the content of the named sub-section within section block\n<\/code><\/pre>\n\n<p>One shortcode can do it all...<\/p>\n\n<pre><code>[eacReadme plugin='\/pluginfolder\/readme.txt']Document[\/eacReadme]    # loads the file and parses the entire document\n<\/code><\/pre>\n\n<p>Or load the entire file as a single code block...<\/p>\n\n<pre><code>[eacReadme theme='\/themefolder\/functions.php']Code File[\/eacReadme]\n<\/code><\/pre>\n\n<h4>Shortcode Examples<\/h4>\n\n<p>Get header values...<\/p>\n\n<pre><code>[eacReadme]Contributors[\/eacReadme]\n[eacReadme]Donate link[\/eacReadme]\n[eacReadme]Requires at least[\/eacReadme]\n[eacReadme]Stable tag[\/eacReadme]\n<\/code><\/pre>\n\n<p>Get unnamed segments...<\/p>\n\n<pre><code>[eacReadme]Title[\/eacReadme]                    # gets the '=== plugin name ===' line (before headers)\n[eacReadme]Short Description[\/eacReadme]        # gets the short description (between headers and first section block)\n<\/code><\/pre>\n\n<p>Get section blocks...<\/p>\n\n<pre><code>[eacReadme]Description[\/eacReadme]\n[eacReadme]Installation[\/eacReadme]\n[eacReadme]Screenshots[\/eacReadme]\n[eacReadme]Changelog[\/eacReadme]\n<\/code><\/pre>\n\n<p>Get multiple blocks and\/or sub-sections...<\/p>\n\n<pre><code>[eacReadme plugin='\/eacReadme\/readme.txt']Short Description,Description[\/eacReadme]\n[eacReadme plugin='\/eacReadme\/readme.txt']Short Description,Description\/Shortcode Examples[\/eacReadme]\n<\/code><\/pre>\n\n<p>Get a file as a code block...<\/p>\n\n<pre><code>[eacReadme theme='\/my-child-theme\/functions.js' lang='js']Code File[\/eacReadme]\n[eacReadme theme='\/my-child-theme\/style.css' lang='css']Code File[\/eacReadme]\n<\/code><\/pre>\n\n<h4>Other Options<\/h4>\n\n<p>Change the default cache time-to-live by adding to wp-config.php:<\/p>\n\n<pre><code>define('EAC_README_CACHE_LIFETIME',$seconds);   # default: 1-day (DAY_IN_SECONDS).\n<\/code><\/pre>\n\n<p>Override the default cache time-to-live<\/p>\n\n<pre><code>[eacReadme ttl=$seconds ...]                    # minimum: 1-minute (MINUTE_IN_SECONDS).\n<\/code><\/pre>\n\n<p>Set the default GitHub access token (for private repositories):<\/p>\n\n<pre><code>define('GITHUB_ACCESS_TOKEN',$token);\n<\/code><\/pre>\n\n<p>Set\/override the GitHub access token<\/p>\n\n<pre><code>[eacReadme token=$token ...]\n<\/code><\/pre>\n\n<p>Override option to parse markdown when retrieving a segment<\/p>\n\n<pre><code>[eacReadme parse='true|false' ...]\n<\/code><\/pre>\n\n<p>Set class='language-*' on code blocks<\/p>\n\n<pre><code>[eacReadme lang='php|js|css|html' ...]\n<\/code><\/pre>\n\n<h4>Translating Header\/Section Names<\/h4>\n\n<p>Translate header\/section names when retrieving <em>All Headers<\/em>, <em>All Sections<\/em>, or <em>Document<\/em><\/p>\n\n<pre><code>[eacReadme translate='name=newname,...']\n[eacReadme translate='Requires at least=Requires WordPress Version,Screenshots=Screen Shots']\n<\/code><\/pre>\n\n<p>Erase default translation table<\/p>\n\n<pre><code>[eacReadme translate='no|none|false']\n<\/code><\/pre>\n\n<p>Default translation table<\/p>\n\n<pre><code>[\n    'Headers'               =&gt; 'Document Header',\n    'Plugin URI'            =&gt; 'Homepage',\n    'Stable tag'            =&gt; 'Current Version',\n    'Requires at least'     =&gt; 'Requires WordPress Version',\n    'Tested up to'          =&gt; 'Compatible up to',\n    'Requires PHP'          =&gt; 'Requires PHP Version',\n    'WC requires at least'  =&gt; 'Requires WooCommerce',\n    'Requires EAC'          =&gt; 'Requires {eac}Doojigger',\n    'Changelog'             =&gt; 'Change Log',\n    'Screenshots'           =&gt; 'Screen Shots',\n];\n<\/code><\/pre>\n\n<h4>Embedding<\/h4>\n\n<p>{eac}Readme can also be used to embed URLs in a WordPress Post or Page. Simply paste the url in the <code>Embed<\/code> URL block.<\/p>\n\n<ul>\n<li>Navigate to the post or page where the readme content is to be embedded.<\/li>\n<li>Click the '+' (Block Inserter) icon and search for \"Embed\" or type \/embed.<\/li>\n<li>Select the \"Embed\" block.<\/li>\n<li>Paste the URL to the readme file into the provided field.<\/li>\n<li>Click the \"Embed\" button. WordPress will automatically display the unformatted content.<\/li>\n<\/ul>\n\n<p><\/p>\n\n<p>The shortcut to this is to simply paste the URL at the end of the page\/post where it says \"Type \/ to choose a block\". WordPress will automatically convert your URL to an embed block.<\/p>\n\n<p>Files can be embedded from your site, from the WordPress repository or from Github. Embedded URLs are transformed internally to the appropriate format.<\/p>\n\n<p><em>From your site<\/em><\/p>\n\n<pre><code>https:\/\/&lt;your_site_url&gt;\/plugins\/&lt;plugin_slug&gt;\/readme.txt\nhttps:\/\/&lt;your_site_url&gt;\/themes\/&lt;theme_name&gt;\/readme.txt\n<\/code><\/pre>\n\n<p><em>From the Wordpress Repository<\/em><\/p>\n\n<pre><code>https:\/\/ps.w.org\/&lt;plugin_slug&gt;\/readme.txt\nhttps:\/\/plugins.svn.wordpress.org\/&lt;plugin_slug&gt;\/readme.txt\n<\/code><\/pre>\n\n<p><em>From a GitHub Repository<\/em><\/p>\n\n<pre><code>https:\/\/github.com\/&lt;owner&gt;\/&lt;repository&gt;\/blob\/main\/readme.md\nhttps:\/\/github.com\/&lt;owner&gt;\/&lt;repository&gt;\/main\/readme.md\n<\/code><\/pre>\n\n<p><em>To load only specific sections of the readme file, append a fragment to the url:<\/em><\/p>\n\n<pre><code>https:\/\/&lt;your_site_url&gt;\/plugins\/&lt;plugin_slug&gt;\/readme.txt#allheaders\nhttps:\/\/ps.w.org\/&lt;plugin_slug&gt;\/readme.txt#description\nhttps:\/\/github.com\/&lt;owner&gt;\/&lt;repository&gt;\/main\/readme.md#screenshots\n<\/code><\/pre>\n\n<h4>Readme Format<\/h4>\n\n<p>{eac}Readme expects a well-formed readme.txt file that follows the <a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/how-your-readme-txt-works\">WordPress readme file standard<\/a>...<\/p>\n\n<h3>title<\/h3>\n\n<pre><code>header: value\nheader: value\nshort Description&lt;h3&gt;section&lt;\/h3&gt;    = sub-section =\n<\/code><\/pre>\n\n<p>...but supports some extensions to that standard:<\/p>\n\n<ul>\n<li><p>Author &amp; Author URI<\/p>\n\n<ul>\n<li><code>Author<\/code> header may be a simple name or a markdown link:\n\n<ul>\n<li><code>[Author](Author URI)<\/code>.<\/li>\n<\/ul><\/li>\n<li>The <code>Author<\/code> &amp; <code>Author URI<\/code> headers, if present, are combined as a markdown <code>[Author](Author URI)<\/code>.<\/li>\n<\/ul><\/li>\n<li><p>Homepage<\/p>\n\n<ul>\n<li>Looks for <code>Homepage<\/code> or <code>Plugin URI<\/code>.<\/li>\n<\/ul><\/li>\n<li><p>Version<\/p>\n\n<ul>\n<li>Looks for <code>Version<\/code> or <code>Stable tag<\/code>.<\/li>\n<\/ul><\/li>\n<li><p>Contributors<\/p>\n\n<ul>\n<li><code>profileId<\/code> - wordpress profile (standard)<\/li>\n<li><code>profileId@youremaildomain.com<\/code> - gravatar profile<\/li>\n<li><code>profileId@wordpress<\/code> - wordpress profile<\/li>\n<li><code>profileId@gravatar<\/code> - gravatar profile<\/li>\n<li><code>profileId@github<\/code> - github profile<\/li>\n<li><code>[display name](mailto:email@address.com)<\/code> or <code>[display name](http:\/\/www.gravatar.com\/profileId\/)<\/code><\/li>\n<li><code>[display name](http:\/\/profiles.wordpress.org\/profileId\/)<\/code><\/li>\n<li><code>[your name]((http:\/\/your\/profile\/url)<\/code><\/li>\n<\/ul><\/li>\n<li><p>A \"banner\" section may be included between the top title line and the first header line.<\/p>\n\n<p><code>&lt;h3&gt;title&lt;\/h3&gt;   [![banner](\/\/image_url)](\/\/link_url)\nheader: value\nheader: value\nshort Description&lt;h3&gt;section&lt;\/h3&gt;    = sub-section =<\/code><\/p><\/li>\n<li><p>The header block may be enclosed in an html <code>&lt;header&gt;<\/code> or <code>&lt;details&gt;<\/code> tag, opening and closing each on a single line. These tags are ignored by the eacParseReadme parser but may be beneficial if posting your readme file elseware. See <a href=\"https:\/\/github.com\/EarthAsylum\/eacReadme\">{eac}Readme on Github<\/a>.<\/p><\/li>\n<\/ul>\n\n<blockquote>\n  <p>Note: these extensions are not supported by the WordPress Plugin Repository.<\/p>\n<\/blockquote>\n\n<p>{eac}Readme supports standard markdown (readme.md) formatting for section identification.\n+   <code>=== title ===<\/code> and <code>## title<\/code> are equivalent\n+   <code>== section ==<\/code> and <code>### section<\/code> are equivalent\n+   <code>= sub-section =<\/code> and <code>#### sub-section<\/code> are equivalent<\/p>\n\n<h4>Output HTML<\/h4>\n\n<p>When retrieving the header block with ...<\/p>\n\n<pre><code>[eacReadme]All Headers[\/eacReadme] or `\\eacParseReadme::getAllHeaders()`\n<\/code><\/pre>\n\n<p>Or when retrieving all sections with ...<\/p>\n\n<pre><code>[eacReadme]All Sections[\/eacReadme] or `\\eacParseReadme::getAllSections()`\n<\/code><\/pre>\n\n<p>Or when retrieving the entire document with ...<\/p>\n\n<pre><code>[eacReadme]Document[\/eacReadme] or `\\eacParseReadme::getDocument()`\n<\/code><\/pre>\n\n<p>Additional html tags and classes are added, including wrapping blocks within a <code>&lt;details&gt;<\/code> tags, adding <code>readme-*<\/code> class names, and adding <code>&lt;a&gt;<\/code> anchor links.<\/p>\n\n<h4>WordPress Actions<\/h4>\n\n<p>3rd-party actors may load and use the parser class included in {eac}Readme...<\/p>\n\n<pre><code>    do_action('eacReadme_load_parser');     \/\/ loads \\eacParseReadme static class\n    if (class_exists('\\eacParseReadme'))\n    {\n        \\eacParseReadme::loadFile($readme,$context);\n        $html_document  = \\eacParseReadme::getDocument();\n        $title          = \\eacParseReadme::getTitle();\n        $version        = \\eacParseReadme::getVersion();\n        $donations      = \\eacParseReadme::getHeader('donate_link');\n        $description    = \\eacParseReadme::getSection('description');\n    }= Additional Information =\n<\/code><\/pre>\n\n<ul>\n<li>{eac}Readme is an extension plugin to and requires installation and registration of <a href=\"https:\/\/eacDoojigger.earthasylum.com\/\">{eac}Doojigger<\/a>.<\/li>\n<li>{eac}Readme uses <a href=\"http:\/\/parsedown.org\/\">Parsedown 1.7.4<\/a>, Copyright (c) 2013-2018 <a href=\"erusev.com\">Emanuil Rusev<\/a><\/li>\n<li><p>{eac}Readme uses <a href=\"https:\/\/prismjs.com\/\">Prism syntax highlighter<\/a>, Copyright (c) 2012 Lea Verou<\/p><\/li>\n<li><p>The <a href=\"https:\/\/swregistry.earthasylum.com\/software-taxonomy\/\">{eac}SoftwareRegistry Software Product Taxonomy<\/a> plugin uses {eac}Readme to parse readme markdown files hosted on Github to provide plugin information and automated updates to WordPress for self-hosted plugins.<\/p><\/li>\n<\/ul>\n\n<h3>Copyright<\/h3>\n\n<h4>Copyright \u00a9 2019-2025, EarthAsylum Consulting, distributed under the terms of the GNU GPL.<\/h4>\n\n<p>This program is free software: you can redistribute it and\/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.<\/p>\n\n<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.<\/p>\n\n<p>You should receive a copy of the GNU General Public License along with this program. If not, see <a href=\"https:\/\/www.gnu.org\/licenses\/\">https:\/\/www.gnu.org\/licenses\/<\/a>.<\/p>\n\n<!--section=installation-->\n<p><strong>{eac}Doojigger Readme Extension<\/strong> is an extension plugin to and requires installation and registration of <a href=\"https:\/\/eacDoojigger.earthasylum.com\/\">{eac}Doojigger<\/a>.<\/p>\n\n<h4>Automatic Plugin Installation<\/h4>\n\n<p>This plugin is available from the <a href=\"https:\/\/wordpress.org\/plugins\/search\/earthasylum\/\">WordPress Plugin Repository<\/a> and can be installed from the WordPress Dashboard \u00bb <em>Plugins<\/em> \u00bb <em>Add New<\/em> page. Search for 'EarthAsylum', click the plugin's [Install] button and, once installed, click [Activate].<\/p>\n\n<p>See <a href=\"https:\/\/wordpress.org\/support\/article\/managing-plugins\/#automatic-plugin-installation-1\">Managing Plugins -&gt; Automatic Plugin Installation<\/a><\/p>\n\n<h4>Upload via WordPress Dashboard<\/h4>\n\n<p>Installation of this plugin can be managed from the WordPress Dashboard \u00bb <em>Plugins<\/em> \u00bb <em>Add New<\/em> page. Click the [Upload Plugin] button, then select the eacreadme.zip file from your computer.<\/p>\n\n<p>See <a href=\"https:\/\/wordpress.org\/support\/article\/managing-plugins\/#upload-via-wordpress-admin\">Managing Plugins -&gt; Upload via WordPress Admin<\/a><\/p>\n\n<h4>Manual Plugin Installation<\/h4>\n\n<p>You can install the plugin manually by extracting the eacreadme.zip file and uploading the 'eacreadme' folder to the 'wp-content\/plugins' folder on your WordPress server.<\/p>\n\n<p>See <a href=\"https:\/\/wordpress.org\/support\/article\/managing-plugins\/#manual-plugin-installation-1\">Managing Plugins -&gt; Manual Plugin Installation<\/a><\/p>\n\n<h4>Settings<\/h4>\n\n<p>Once installed and activated options for this extension will show in the 'General' tab of {eac}Doojigger settings.<\/p>\n\n<!--section=changelog-->\n<h4>Version 1.5.1 \u2013 August 8, 2025<\/h4>\n\n<ul>\n<li>Remove ineffective shortcode circumvention.<\/li>\n<li>Expanded allowed file name regex for embedding.<\/li>\n<\/ul>\n\n<h4>Version 1.5.0 \u2013 August 7, 2025<\/h4>\n\n<ul>\n<li>Added embedding support using <code>wp_embed_register_handler()<\/code>.<\/li>\n<\/ul>\n\n<h4>Version 1.4.5 \u2013 April 29, 2025<\/h4>\n\n<ul>\n<li>Don't register until <code>admin_init<\/code>.<\/li>\n<\/ul>\n\n<h4>Version 1.4.4 \u2013 April 19, 2025<\/h4>\n\n<ul>\n<li>Updated Prism code highlighter to version 1.30.0.<\/li>\n<li>Compatible with WordPress 6.8.<\/li>\n<li>Prevent <code>_load_textdomain_just_in_time was called incorrectly<\/code> notice from WordPress.\n\n<ul>\n<li>All extensions - via eacDoojigger 3.1.<\/li>\n<li>Modified extension registration in constructor.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Version 1.4.3 \u2013 October 12, 2024<\/h4>\n\n<ul>\n<li>Fix proper access of WordPress profile using wp.org wp-json api.<\/li>\n<li>Fix retrieval of github profile when given as <a href=\"url\">profile<\/a>.<\/li>\n<li>Made transient names more unique using profile source.<\/li>\n<\/ul>\n\n<h4>Version 1.4.2 \u2013 April 4, 2024<\/h4>\n\n<ul>\n<li>Fix deprecated notice on substr\/strpos with null value in parser.<\/li>\n<li>Compatible with WordPress 6.5.<\/li>\n<\/ul>\n\n<h4>Version 1.4.1 \u2013 March 1, 2024<\/h4>\n\n<ul>\n<li>Additional documentation.<\/li>\n<li>Improved isolation of headers and short description.<\/li>\n<li>Support readme.md (standard markdown) files.\n\n<ul>\n<li>Expects WordPress layout (h2 title, headers, Short Description, h3 sections).<\/li>\n<\/ul><\/li>\n<li>Non-standard 'banner' content between === title === and headers.<\/li>\n<li>Updated most regular expressions.<\/li>\n<\/ul>\n\n<h4>Version 1.4.0 \u2013 February 9, 2024<\/h4>\n\n<ul>\n<li>Added github profile support along with optional profile formats for contributors.<\/li>\n<li>Trim tags when tagifying from header.<\/li>\n<li>Added new action, 'eacReadme_load_parser', to allow 3rd-party apps to use the parser class.\n\n<ul>\n<li><code>do_action('eacReadme_load_parser'); \/\/ loads \\eacParseReadme static class<\/code><\/li>\n<\/ul><\/li>\n<li>Added context to file access for github authentication &amp; WP headers.<\/li>\n<li>Changed WordPress svn uri (https:\/\/ps.w.org\/)<\/li>\n<\/ul>\n\n<h4>Version 1.3.0 \u2013 January 31, 2024<\/h4>\n\n<ul>\n<li>Added 'ttl' option to shortcode to set cache time-to-live (min 1 minute).<\/li>\n<li>Added WP SVN support:\n\n<ul>\n<li>[eacReadme wpsvn='\/slugname\/trunk\/readme.txt']document[\/eacReadme]<\/li>\n<\/ul><\/li>\n<li>Added GitHub support:\n\n<ul>\n<li>[eacReadme github='\/owner\/repository\/main\/readme.txt']document[\/eacReadme]<\/li>\n<li>[eacReadme github='...',token='...']<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Version 1.2.6 \u2013 January 24, 2024<\/h4>\n\n<ul>\n<li>Fixed \"preg_match(): Passing null\" notice.<\/li>\n<\/ul>\n\n<h4>Version 1.2.5 \u2013 December 8, 2023<\/h4>\n\n<ul>\n<li>Fixed caching (yet again) by adding current file name to cache key.\n\n<ul>\n<li>subsequent segments could load the wrong cache key when no file given.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Version 1.2.4 \u2013 December 4, 2023<\/h4>\n\n<ul>\n<li>Added button to flush group cache when using drop-in object cache.<\/li>\n<li>Added use of 'EAC_README_CACHE_LIFETIME' constant to set cache life-time (default = 1 day).\n\n<ul>\n<li>In wp-config.php: <code>define('EAC_README_CACHE_LIFETIME',3600);<\/code><\/li>\n<\/ul><\/li>\n<li>md5() cache key name.<\/li>\n<\/ul>\n\n<h4>Version 1.2.3 \u2013 August 30, 2023<\/h4>\n\n<ul>\n<li>Improved caching.<\/li>\n<\/ul>\n\n<h4>Version 1.2.2 \u2013 June 6, 2023<\/h4>\n\n<ul>\n<li>Removed unnecessary plugin_update_notice trait.<\/li>\n<li>Cosmetic changes to option &amp; help titles.<\/li>\n<\/ul>\n\n<h4>Version 1.2.1 \u2013 April 22, 2023<\/h4>\n\n<ul>\n<li>Correctly load inline style using wp_add_inline_style()<\/li>\n<li>Tested with WordPress 6.2 and {eac}Doojigger 2.2.<\/li>\n<\/ul>\n\n<h4>Version 1.2.0 \u2013 November 16, 2022<\/h4>\n\n<ul>\n<li>Updated to \/ Requires {eac}Doojigger 2.0.<\/li>\n<li>Uses 'options_settings_page' action to register options.<\/li>\n<li>Added contextual help using 'options_settings_help' action.<\/li>\n<li>Renamed extension file(s) and vendor directory.<\/li>\n<li>Changed tab name in registerExtension (must be -re-enabled in admin).<\/li>\n<li>Moved plugin_action_links hook to eacDoojigger_load_extensions filter.<\/li>\n<li>Added use of WP_Object_Cache.<\/li>\n<li>Fixed problem with admin page reload when changing style.<\/li>\n<\/ul>\n\n<h4>Version 1.1.1 \u2013 September 25, 2022<\/h4>\n\n<ul>\n<li>Fixed potential PHP notice on load (plugin_action_links_).<\/li>\n<li>Added upgrade notice trait for plugins page.<\/li>\n<li>Added tagify option: getTags(true) when processing tags to convert to array [slug=&gt;tag]<\/li>\n<\/ul>\n\n<h4>Version 1.1.0 \u2013 September 7, 2022<\/h4>\n\n<ul>\n<li>Added ability to get the full file contents as a code block (Code File).<\/li>\n<li>Renamed include file eacParseReadme.php to class.readme_parser.php.<\/li>\n<\/ul>\n\n<h4>Version 1.0.7 \u2013 August 28, 2022<\/h4>\n\n<ul>\n<li>Updated to \/ Requires {eac}Doojigger 1.2<\/li>\n<li>Added 'Settings', 'Docs' and 'Support' links on plugins page.<\/li>\n<li>Fixed admin display error (section not found).<\/li>\n<\/ul>\n\n<h4>Version 1.0.6 \u2013 July 12, 2022<\/h4>\n\n<ul>\n<li>Get contributor profile when getting all headers.<\/li>\n<li>Move short description before headers in getDocument().<\/li>\n<\/ul>\n\n<h4>Version 1.0.5 \u2013 June 22, 2022<\/h4>\n\n<ul>\n<li>Added \"{plugin}_eacReadme\" filter.<\/li>\n<li>Added title attribute to nav links.<\/li>\n<\/ul>\n\n<h4>Version 1.0.4 \u2013 June 9, 2022<\/h4>\n\n<ul>\n<li>Updated for {eac}Doojigger 1.1.0<\/li>\n<\/ul>\n\n<h4>Version 1.0.3 \u2013 May 12, 2022<\/h4>\n\n<ul>\n<li>Added transient caching of contributor profiles.<\/li>\n<\/ul>\n\n<h4>Version 1.0.2 \u2013 May 10, 2022<\/h4>\n\n<ul>\n<li>Added section name translation.<\/li>\n<\/ul>\n\n<h4>Version 1.0.1 \u2013 April 28, 2022<\/h4>\n\n<ul>\n<li>Minor changes \/ enhancements.<\/li>\n<\/ul>\n\n<h4>Version 1.0.0 \u2013 February 26, 2022<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"{eac}Readme loads and translates a WordPress markdown &#039;readme&#039; file providing shortcodes and embedding URLs to access header lines and section blocks.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/160547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=160547"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kevinburkholder"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=160547"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=160547"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=160547"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=160547"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=160547"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=160547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}