{"id":256010,"date":"2025-11-13T18:32:56","date_gmt":"2025-11-13T18:32:56","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kc-donate-box\/"},"modified":"2025-11-13T18:59:24","modified_gmt":"2025-11-13T18:59:24","slug":"kc-donate-box","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/kc-donate-box\/","author":23381241,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.6.4","stable_tag":"1.6.4","tested":"6.8.5","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"KC Donate Box","header_author":"Kerim Candan","header_description":"Adds a customizable donate\/support box under posts (repeatable links + multiple crypto wallets with QR). Shortcode: [kcdobo_donate_box].","assets_banners_color":"549bc8","last_updated":"2025-11-13 18:59:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/kerimcandan\/kc-donate-box","header_author_uri":"https:\/\/kerimcandan.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":162,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.6.4":{"tag":"1.6.4","author":"kerimcandan","date":"2025-11-13 18:59:24"}},"upgrade_notice":{"1.6.4":"<p>Security hardening, strict prefixing, and enqueue fixes per review. Please update.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3395275,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3395275,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3395275,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3395275,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.6.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3395274,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3395274,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3395274,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3395274,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"Settings \u2013 General &amp; Display options","2":"Front-end donate box (default)","3":"Crypto wallets with QR (Auto\/Upload)","4":"Copy-to-clipboard &amp; custom links"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[21057,616,617,334,1104],"plugin_category":[45],"plugin_contributors":[250668],"plugin_business_model":[],"class_list":["post-256010","plugin","type-plugin","status-publish","hentry","plugin_tags-crypto","plugin_tags-donate","plugin_tags-donation","plugin_tags-paypal","plugin_tags-support","plugin_category-ecommerce","plugin_contributors-kerimcandan","plugin_committers-kerimcandan"],"banners":{"banner":"https:\/\/ps.w.org\/kc-donate-box\/assets\/banner-772x250.png?rev=3395275","banner_2x":"https:\/\/ps.w.org\/kc-donate-box\/assets\/banner-1544x500.png?rev=3395275","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kc-donate-box\/assets\/icon-128x128.png?rev=3395275","icon_2x":"https:\/\/ps.w.org\/kc-donate-box\/assets\/icon-256x256.png?rev=3395275","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kc-donate-box\/assets\/screenshot-1.png?rev=3395274","caption":"Settings \u2013 General &amp; Display options"},{"src":"https:\/\/ps.w.org\/kc-donate-box\/assets\/screenshot-2.png?rev=3395274","caption":"Front-end donate box (default)"},{"src":"https:\/\/ps.w.org\/kc-donate-box\/assets\/screenshot-3.png?rev=3395274","caption":"Crypto wallets with QR (Auto\/Upload)"},{"src":"https:\/\/ps.w.org\/kc-donate-box\/assets\/screenshot-4.png?rev=3395274","caption":"Copy-to-clipboard &amp; custom links"}],"raw_content":"<!--section=description-->\n<p>KC Donate Box adds a lightweight donate\/support panel after your posts:<\/p>\n\n<ul>\n<li>Custom title &amp; message<\/li>\n<li>Repeatable custom links (e.g., Buy me a coffee, PayPal)<\/li>\n<li>Multiple crypto wallets with QR (uploaded image or auto-generated)<\/li>\n<li>Copy-to-clipboard button<\/li>\n<li>Shortcode: [kcdobo_donate_box]<\/li>\n<li>Reset to defaults, and JSON export\/import<\/li>\n<li>No tracking. No external calls unless you choose \"Auto\" QR (uses api.qrserver.com)<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin can optionally generate QR images via an external API when the \"QR mode\" is set to \"Auto\".\nIn that case, the plugin sends the wallet URI (e.g., \"bitcoin:\", \"ethereum:\") to the external service to get a QR image.<\/p>\n\n<p>Service: GOQR \u2013 QR code API (api.qrserver.com)<br \/>\n- Purpose: Generating QR images for the configured wallet URIs.<br \/>\n- Data sent: Only the wallet URI (as the <code>data<\/code> parameter) and the requested QR size. No personal data is sent by the plugin.<br \/>\n- When: On front-end render (when the donate box is visible) and only for entries where QR Mode = \"Auto\".<br \/>\n- Terms of Service: https:\/\/goqr.me\/legal\/tos-api.html<br \/>\n- Privacy Policy: https:\/\/goqr.me\/privacy-safety-security\/<br \/>\n- API docs: https:\/\/goqr.me\/api\/doc\/create-qr-code\/<\/p>\n\n<p>If you prefer not to contact external services, set \"QR mode\" to \"Upload\" (use a locally uploaded QR image) or \"None\".<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or upload the ZIP in <strong>Plugins &gt; Add New &gt; Upload<\/strong>.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>Go to <strong>Settings &gt; KC Donate Box<\/strong> and configure.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='can%20i%20show%20it%20on%20every%20post%20type%3F'><h3>Can I show it on every post type?<\/h3><\/dt>\n<dd><p>By default it shows on single posts. Uncheck \"Show only on single posts\" to render it everywhere.<\/p><\/dd>\n<dt id='does%20it%20support%20emojis%3F'><h3>Does it support emojis?<\/h3><\/dt>\n<dd><p>You can paste emojis manually in the Message\/Link labels.<\/p><\/dd>\n<dt id='what%20shortcode%20is%20supported%3F'><h3>What shortcode is supported?<\/h3><\/dt>\n<dd><p>Use <code>[kcdobo_donate_box]<\/code>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.4<\/h4>\n\n<ul>\n<li>Prefix\/Namespacing: Consolidated all shortcodes, option names, and admin\/front CSS\/JS selectors to the longer <code>kcdobo<\/code> scheme; removed remaining <code>kc_<\/code> traces.<\/li>\n<li>Asset Enqueue: Admin\/front assets are loaded only via <code>wp_enqueue_*<\/code>. Inline <code>&lt;script&gt;<\/code> was removed; admin JS config is injected with <code>wp_add_inline_script( ..., 'before' )<\/code>.<\/li>\n<li>Security: Nonce validation now applies <code>sanitize_text_field( wp_unslash( ... ) )<\/code> before <code>wp_verify_nonce()<\/code>. Invalid requests fail safely.<\/li>\n<li>Admin UI: Repeater buttons and row selectors (add\/remove) use the new prefix and delegated jQuery handlers.<\/li>\n<li>Uninstall: Cleans options on single-site and per-site on multisite.<\/li>\n<li>Docs: \"External Services\" section clarifies that only the optional \"Auto\" QR mode calls api.qrserver.com.<\/li>\n<\/ul>\n\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>Security\/Hardening: Nonce validation path updated \u2013 unslash + sanitize before verification.<\/li>\n<li>Fix: Removed inline  output; all admin\/front assets are enqueued via wp_enqueue_*.<\/li>\n<li>Fix: Settings sanitization \u2013 removing all rows now saves empty arrays instead of restoring defaults; when a section is not posted, previous values are kept.<\/li>\n<li>Docs: Added \"External Services\" section (QR API: what\/why\/when\/where + ToS\/Privacy links). Clarified that \"Auto\" QR uses api.qrserver.com.<\/li>\n<li>Dev: Switched to a longer internal prefix (kcdobo_). Removed legacy shortcodes and aliases.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Fix: escape rows attribute in textarea (Plugin Check).<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Hardening: escape output everywhere; PHPCS\/Plugin Check fixes.<\/li>\n<li>Admin JS: safer template insertion (split\/join).<\/li>\n<li>Readme: short description + =5 tags; \"Tested up to: 6.8\".<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Added uninstall.php (cleans options on delete; multisite-safe).<\/li>\n<li>Moved front CSS\/JS to <code>assets\/<\/code> files (no inline JS).<\/li>\n<li>Minor admin cosmetics via <code>assets\/css\/admin.css<\/code>.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Public release without emoji picker.<\/li>\n<li>Simplified crypto fields, copy button, auto\/uploaded QR.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Bugfix: PHP syntax in build_crypto_uri().<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>(Internal) Emoji picker, repeatable links\/cryptos, export\/import, reset.<\/li>\n<\/ul>","raw_excerpt":"Add a clean donate box after posts: custom links (PayPal etc.), multiple crypto wallets with QR (auto\/upload), copy-to-clipboard, no tracking.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/256010","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=256010"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kerimcandan"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=256010"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=256010"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=256010"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=256010"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=256010"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=256010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}