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.
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.
Reverted text domain in translation functions to method call; documented as known false positive in readme.md.
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.
All translatable strings use return_plugin_text_domain() method.
Fixed self:: usage in global function context.
REST namespace derived from return_plugin_text_domain() via rest_namespace() method.
Ability slugs and category slug derived from return_plugin_text_domain().
Added identity methods and init_plugin filter gate per LocalHero plugin conventions.
Added VERSION constant, readme.md, error handling, GD check, block PNG scale from display size, removed dead includes file.
Added generate-qr-svg MCP ability returning raw SVG markup.
Replaced nonce-based URL protection with HMAC-SHA256 signatures.
Complete rewrite. REST API, rewrite endpoints, Gutenberg block, Composer autoloader.