Doc-section

2.19

Fixed 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.18

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 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.17

Reverted text domain in translation functions to method call; documented as known false positive in readme.md.

2.16

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.

2.15

All translatable strings use return_plugin_text_domain() method.

2.14

Fixed self:: usage in global function context.

2.13

REST namespace derived from return_plugin_text_domain() via rest_namespace() method.

2.12

Ability slugs and category slug derived from return_plugin_text_domain().

2.11

Added identity methods and init_plugin filter gate per LocalHero plugin conventions.

2.10

Added VERSION constant, readme.md, error handling, GD check, block PNG scale from display size, removed dead includes file.

2.09

Added generate-qr-svg MCP ability returning raw SVG markup.

2.08

Replaced nonce-based URL protection with HMAC-SHA256 signatures.

2.00

Complete rewrite. REST API, rewrite endpoints, Gutenberg block, Composer autoloader.