{"id":258842,"date":"2025-11-17T23:11:45","date_gmt":"2025-11-17T23:11:45","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/jsonmaker\/"},"modified":"2025-11-20T18:49:23","modified_gmt":"2025-11-20T18:49:23","slug":"fishdan-jsonmaker","status":"publish","type":"plugin","link":"https:\/\/syr.wordpress.org\/plugins\/fishdan-jsonmaker\/","author":23372721,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.2.8","stable_tag":"0.2.8","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"fishdan Jsonmaker","header_author":"Daniel Fishman","header_description":"Manage a hierarchical collection of titled links that can be edited from a shortcode and fetched as JSON.","assets_banners_color":"","last_updated":"2025-11-20 18:49:23","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.fishdan.com\/jsonmaker","header_author_uri":"https:\/\/www.fishdan.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":255,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.3":{"tag":"0.2.3","author":"fishdan","date":"2025-11-17 23:14:47"},"0.2.4":{"tag":"0.2.4","author":"fishdan","date":"2025-11-18 01:58:12"},"0.2.6":{"tag":"0.2.6","author":"fishdan","date":"2025-11-20 14:43:17"},"0.2.7":{"tag":"0.2.7","author":"fishdan","date":"2025-11-20 15:58:16"},"0.2.8":{"tag":"0.2.8","author":"fishdan","date":"2025-11-20 18:49:23"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.3","0.2.4","0.2.6","0.2.7","0.2.8"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1118,175,1753,80],"plugin_category":[43],"plugin_contributors":[249363],"plugin_business_model":[],"class_list":["post-258842","plugin","type-plugin","status-publish","hentry","plugin_tags-json","plugin_tags-links","plugin_tags-navigation","plugin_tags-shortcode","plugin_category-customization","plugin_contributors-fishdan","plugin_committers-fishdan"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/fishdan-jsonmaker.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>fishdan Jsonmaker lets administrators curate a nested tree of links directly on the front end. Drop the <code>[jsonmaker]<\/code> shortcode onto a page, expand nodes to add children, rename or remove items inline, and fetch any branch at <code>\/json\/&lt;slug&gt;.json<\/code>.<\/p>\n\n<p><strong>Highlights<\/strong><\/p>\n\n<ul>\n<li>Inline \u201cAdd\u201d, \u201cEdit\u201d, and \u201cDelete\u201d controls for administrators (capability <code>jsonmaker_manage<\/code>).<\/li>\n<li>Clean JSON endpoint for each node (<code>\/json\/&lt;slug&gt;.json<\/code>).<\/li>\n<li>Store either URLs or plain text values; an empty value keeps a node as a container.<\/li>\n<li>All data persists in a single WordPress option\u2014no custom tables.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>fishdan-jsonmaker<\/code> folder to <code>wp-content\/plugins\/<\/code>, or install the ZIP via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate <strong>fishdan Jsonmaker<\/strong> in <strong>Plugins \u2192 Installed Plugins<\/strong>.<\/li>\n<li>Add the <code>[jsonmaker]<\/code> shortcode to a page.<\/li>\n<li>(Optional) Visit <strong>Settings \u2192 Permalinks<\/strong> and click <strong>Save<\/strong> to refresh rewrite rules if <code>\/json\/&lt;slug&gt;.json<\/code> returns 404.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='who%20can%20edit%20the%20tree%3F'><h3>Who can edit the tree?<\/h3><\/dt>\n<dd><p>Administrators receive the <code>jsonmaker_manage<\/code> capability on activation. Grant it to other roles as needed.<\/p><\/dd>\n<dt id='how%20do%20i%20fetch%20json%20for%20a%20node%3F'><h3>How do I fetch JSON for a node?<\/h3><\/dt>\n<dd><p>Hit <code>\/json\/&lt;node-slug&gt;.json<\/code>. The slug appears in the add\/edit form IDs (e.g., <code>jsonmaker-form-slug<\/code>).<\/p><\/dd>\n<dt id='why%20do%20titles%20have%20to%20be%20unique%3F'><h3>Why do titles have to be unique?<\/h3><\/dt>\n<dd><p>Each node\u2019s slug is derived from its title. Enforcing unique titles guarantees stable JSON endpoints.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.8<\/h4>\n\n<ul>\n<li>Removed the optional extension ID text field from the toolbar import UX now that the browser postMessage flow handles extension discovery automatically.<\/li>\n<li>Relaxed import validation to allow repeating node titles (unique slugs are still generated) so toolbar exports with duplicate titles no longer fail.<\/li>\n<\/ul>\n\n<h4>0.2.7<\/h4>\n\n<ul>\n<li>Added \u201cImport current toolbar\u201d button that can pull JSON directly from the Subscribed Toolbar extension.<\/li>\n<li>Optional extension ID field plus visible error feedback when the extension isn\u2019t reachable.<\/li>\n<li>Successful extension imports now auto-select \u201cReplace entire tree\u201d to overwrite the current tree.<\/li>\n<\/ul>\n\n<h4>0.2.6<\/h4>\n\n<ul>\n<li>Adjusted Freemius configuration to use the wp.org-compliant free SDK settings and bumped the plugin version for release.<\/li>\n<\/ul>\n\n<h4>0.2.5<\/h4>\n\n<ul>\n<li>Reworked the admin screen with a dedicated license card that shows active plan details, remaining term, and a \u201cBuy Jsonmaker Basic\u201d button, plus an AJAX license-entry form.<\/li>\n<li>Added toolbar auto-insertion for \u201cHost Your Own Toolbar\u201d and \u201cEdit your toolbar source\u201d links inside an About folder for every change, ensuring free toolbars promote the upgrade path.<\/li>\n<li>Refined the tree editor UI with compact +\/- toggles, cookie-persisted open\/closed state, and collapsible action forms that never overlap.<\/li>\n<\/ul>\n\n<h4>0.2.4<\/h4>\n\n<ul>\n<li>Added a prominent login call-to-action so returning users can access their trees without hunting for the WordPress screen.<\/li>\n<li>Ensured successful registrations redirect back to the <code>[jsonmaker]<\/code> page instead of dropping users on the default dashboard.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>Enabled Freemius org-compliance mode, renamed helper APIs, and documented the change.<\/li>\n<li>Added nonce enforcement helpers, centralized input sanitization, and escaped shortcode output to satisfy Plugin Check.<\/li>\n<li>Bundled Bootstrap assets locally to comply with wp.org\u2019s CDN restrictions.<\/li>\n<\/ul>\n\n<h4>0.2.2.1<\/h4>\n\n<ul>\n<li>Bulk import now accepts copies of the \u201cCurrent JSON\u201d output (e.g., <code>{ \"username\": { ... } }<\/code>) and unwraps the username wrapper automatically.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Introduced per-user JSON trees with personalised <code>\/json\/&lt;username&gt;\/&lt;node&gt;.json<\/code> endpoints and a dedicated JSON role plus registration flow.<\/li>\n<li>Refreshed the shortcode UI with Bootstrap styling, actionable onboarding guidance, and centred collapsible toggles.<\/li>\n<li>Seed new accounts with a \u201cPopular\u201d starter library and ensured sample endpoints are linked for quick testing.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Addressed WordPress Plugin Check feedback by adding translators comments, tightening escaping, and removing debug logging for a compliance-focused release.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Renamed the plugin to fishdan Jsonmaker and aligned the text domain, Freemius slug, and packaging directory with the new branding.<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Wrapped bulk import, JSON preview, and the editing tree in collapsible sections with remembered state per user.<\/li>\n<li>Added \u201cView Node\u201d shortcut links beside each node\u2019s actions for quick JSON inspection.<\/li>\n<li>Defaulted management panels to start closed for new visitors while keeping the editor open.<\/li>\n<li>Refined Freemius admin fallbacks and section styling for a more consistent dashboard experience.<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Added a published JSON schema and linked helper text for quick validation.<\/li>\n<li>Introduced bulk import with append\/replace modes, optional append targeting, and duplicate-title safeguards.<\/li>\n<li>Added slug normalization for JSON endpoint requests so mixed-case and spaced URLs resolve correctly.<\/li>\n<li>Hardened Freemius admin bootstrapping by pre-populating the screen title and falling back to the bundled icon.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Added uninstall cleanup for the stored tree and custom capability, plus deactivation rewrite flushing.<\/li>\n<li>Registered inline assets with explicit versions and localized delete warnings.<\/li>\n<li>Declared metadata updates for WordPress.org compliance, including current tested version.<\/li>\n<li>Bundled the Freemius SDK for future distribution and telemetry tooling.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Added canonical redirect bypass and ensured CORS headers are sent during redirects for the JSON endpoint.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Updated plugin metadata to credit Daniel Fishman.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Added CORS headers and OPTIONS handling for the JSON endpoint to support browser extensions.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Addressed WordPress Plugin Check feedback and improved inline asset handling.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Manage hierarchical link collections via a shortcode, edit them inline, and expose any node as JSON.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/258842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=258842"}],"author":[{"embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fishdan"}],"wp:attachment":[{"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=258842"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=258842"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=258842"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=258842"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=258842"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/syr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=258842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}