@prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix content: <http://purl.org/rss/1.0/modules/content/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<https://lhero.org/?post_type=lh-portfolio&#038;p=145764>
  a sioc:Post ;
  dc:title "Changelog" ;
  dcterms:identifier 145764 ;
  dc:modified "2026-09-15T23:22:40Z"^^xsd:dateTime ;
  dc:created "2026-08-18T13:26:48Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-qr-codes/changelog/> ;
  sioc:has_creator <https://lhero.org/author/1015845/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded "<ul class=\"lh_portfolio-meta\"><li><strong>Part of:</strong> <a href=\"https://lhero.org/portfolio/lh-qr-codes/\">LH QR Codes</a></li></ul><h2 class=\"wp-block-heading\">2.19</h2><p class=\"wp-block-paragraph\">Fixed fatal error: <code>self::</code> was used inside the nested global function <code>lh_qr_code()</code> to call <code>get_qr_png_url()</code>/<code>get_qr_svg_url()</code>/<code>return_plugin_namespace()</code>. Nested function declarations are not class methods in PHP, so <code>self::</code> is illegal there and fails at compile time. Replaced with the explicit class name <code>LH_QR_codes_plugin::</code>. This is the same bug originally fixed in 2.14; see the 2.18 note below.</p><h2 class=\"wp-block-heading\">2.18</h2><p class=\"wp-block-paragraph\">File was modified on disk without a corresponding code-change proposal record. The only observable change from 2.17 was the version bump itself, but the <code>self::</code> nested-function bug from 2.14 was present again in this version, causing every plugin-activation attempt to fatal. Root cause of the regression is unconfirmed.</p><h2 class=\"wp-block-heading\">2.17</h2><p class=\"wp-block-paragraph\">Reverted text domain in translation functions to method call; documented as known false positive in readme.md.</p><h2 class=\"wp-block-heading\">2.16</h2><p class=\"wp-block-paragraph\">Fixed all PCP errors: added License header, bumped Requires at least to 6.9, updated block apiVersion to 3, removed non-existent Domain Path header, fixed EscapeOutput warnings, reverted text domain to literal strings in translation functions.</p><h2 class=\"wp-block-heading\">2.15</h2><p class=\"wp-block-paragraph\">All translatable strings use return_plugin_text_domain() method.</p><h2 class=\"wp-block-heading\">2.14</h2><p class=\"wp-block-paragraph\">Fixed self:: usage in global function context.</p><h2 class=\"wp-block-heading\">2.13</h2><p class=\"wp-block-paragraph\">REST namespace derived from return_plugin_text_domain() via rest_namespace() method.</p><h2 class=\"wp-block-heading\">2.12</h2><p class=\"wp-block-paragraph\">Ability slugs and category slug derived from return_plugin_text_domain().</p><h2 class=\"wp-block-heading\">2.11</h2><p class=\"wp-block-paragraph\">Added identity methods and init_plugin filter gate per LocalHero plugin conventions.</p><h2 class=\"wp-block-heading\">2.10</h2><p class=\"wp-block-paragraph\">Added VERSION constant, readme.md, error handling, GD check, block PNG scale from display size, removed dead includes file.</p><h2 class=\"wp-block-heading\">2.09</h2><p class=\"wp-block-paragraph\">Added generate-qr-svg MCP ability returning raw SVG markup.</p><h2 class=\"wp-block-heading\">2.08</h2><p class=\"wp-block-paragraph\">Replaced nonce-based URL protection with HMAC-SHA256 signatures.</p><h2 class=\"wp-block-heading\">2.00</h2><p class=\"wp-block-paragraph\">Complete rewrite. REST API, rewrite endpoints, Gutenberg block, Composer autoloader.</p>"^^rdf:XMLLiteral ;
  sioc:content "Part of: LH QR Codes2.19Fixed fatal error: self:: was used inside the nested global function lh_qr_code() to call get_qr_png_url()/get_qr_svg_url()/return_plugin_namespace(). Nested function declarations are not class methods in PHP, so self:: is illegal there and fails at compile time. Replaced with the explicit class name LH_QR_codes_plugin::. This is the same bug originally fixed in 2.14; see the 2.18 note below.2.18File was modified on disk without a corresponding code-change proposal record. The only observable change from 2.17 was the version bump itself, but the self:: nested-function bug from 2.14 was present again in this version, causing every plugin-activation attempt to fatal. Root cause of the regression is unconfirmed.2.17Reverted text domain in translation functions to method call; documented as known false positive in readme.md.2.16Fixed all PCP errors: added License header, bumped Requires at least to 6.9, updated block apiVersion to 3, removed non-existent Domain Path header, fixed EscapeOutput warnings, reverted text domain to literal strings in translation functions.2.15All translatable strings use return_plugin_text_domain() method.2.14Fixed self:: usage in global function context.2.13REST namespace derived from return_plugin_text_domain() via rest_namespace() method.2.12Ability slugs and category slug derived from return_plugin_text_domain().2.11Added identity methods and init_plugin filter gate per LocalHero plugin conventions.2.10Added VERSION constant, readme.md, error handling, GD check, block PNG scale from display size, removed dead includes file.2.09Added generate-qr-svg MCP ability returning raw SVG markup.2.08Replaced nonce-based URL protection with HMAC-SHA256 signatures.2.00Complete rewrite. REST API, rewrite endpoints, Gutenberg block, Composer autoloader." ;
  sioc:topic <https://lhero.org/?taxonomy=author&term=cap-1015845> .

<https://lhero.org/author/1015845/#account> rdfs:seeAlso <https://lhero.org/author/1015845/?feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=author&term=cap-1015845> rdfs:seeAlso <https://lhero.org/?taxonomy=author&term=cap-1015845&feed=lhrdf&format=turtle> .
