{"id":250842,"date":"2025-09-26T12:01:21","date_gmt":"2025-09-26T12:01:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/digital-product-passport\/"},"modified":"2025-09-26T12:01:12","modified_gmt":"2025-09-26T12:01:12","slug":"digital-product-passport","status":"publish","type":"plugin","link":"https:\/\/ru.wordpress.org\/plugins\/digital-product-passport\/","author":20943377,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"6.8.5","requires":"5.8","requires_php":"7.2","requires_plugins":null,"header_name":"Digital Product Passport","header_author":"PluginWave","header_description":"Display a Digital Product Passport (JSON or human-readable) via shortcode or block. Paste JSON on posts, pages, or products and render anywhere.","assets_banners_color":"","last_updated":"2025-09-26 12:01:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":257,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"pluginwave","date":"2025-09-26 12:01:12"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"dpp\/viewer":{"name":"dpp\/viewer","title":"Digital Product Passport"}},"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"HTML view with accordion sections and friendly labels","2":"JSON view with formatted code and \"Copy JSON\" button"}},"plugin_section":[],"plugin_tags":[246982,1118,286],"plugin_category":[45],"plugin_contributors":[246986],"plugin_business_model":[],"class_list":["post-250842","plugin","type-plugin","status-publish","hentry","plugin_tags-digital-product-passport","plugin_tags-json","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-pluginwave","plugin_committers-pluginwave"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/digital-product-passport.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This plugin exists to solve a simple but common need: display a Digital Product Passport (DPP) on WordPress sites, including WooCommerce product pages, without being tied to a specific provider or API. If you have the JSON, this plugin will render it consistently, accessibly, and without sending data to third parties.<\/p>\n\n<p>Key features<\/p>\n\n<ul>\n<li>Vendor-agnostic: Works with any DPP JSON source. No provider lock-in.<\/li>\n<li>WooCommerce ready: Adds a meta box on product edit screens to store the JSON.<\/li>\n<li>Human-readable HTML view: Clean accordion layout with friendly labels (for example, \"End of Life and Circularity\"), tuned for Ecodesign for Sustainable Products Regulation (ESPR) naming styles.<\/li>\n<li>JSON view: Inspect the raw JSON in a formatted code block; one-click Copy JSON.<\/li>\n<li>Shortcode and Block: Insert the viewer with a shortcode or the included Gutenberg block.<\/li>\n<li>Classic Editor button: \"Insert Digital Product Passport\" modal for quick shortcode setup.<\/li>\n<li>Accessibility: Keyboard navigation, ARIA roles, semantic HTML (details\/summary).<\/li>\n<li>Responsive: Looks great on phones, tablets, and desktops.<\/li>\n<li>Privacy by design: No tracking, no external calls, no cookies.<\/li>\n<li>Translation ready: All strings can be localized.<\/li>\n<\/ul>\n\n<p>Why this plugin<\/p>\n\n<ul>\n<li>One viewer for WordPress and WooCommerce that is independent of provider.<\/li>\n<li>Displays your DPP from post\/product meta in a consistent way across themes.<\/li>\n<li>Uses only the JSON you supply and renders it locally in the browser.<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<ul>\n<li><p>Quick start:<\/p>\n\n<ol>\n<li>Edit any post, page, or WooCommerce product and find the \"Digital Product Passport\" meta box.<\/li>\n<li>Paste valid JSON and update\/publish. The plugin stores it as post meta.<\/li>\n<li>Insert the viewer where you want it to appear using either the shortcode or the block below.<\/li>\n<\/ol><\/li>\n<li><p>Shortcode: <code>[digital_product_passport]<\/code><\/p>\n\n<ul>\n<li>By default renders the JSON saved in the meta box for that post\/product.<\/li>\n<li>You can also pass inline JSON via the <code>json<\/code> attribute (single quotes recommended around the JSON):<\/li>\n<li>Example: <code>[digital_product_passport json='{\"id\":\"urn:uuid:123\",\"type\":\"Product\",\"name\":\"Sample\"}']<\/code><\/li>\n<li>Attributes:<\/li>\n<li><code>json<\/code>: Inline JSON to render (optional). If omitted, uses the saved post meta JSON.<\/li>\n<li><code>view<\/code>: <code>html|json<\/code> to pick the default tab (default <code>html<\/code>).<\/li>\n<li><code>show_raw<\/code>: <code>true|false<\/code> to force JSON (deprecated; overrides <code>view<\/code>).<\/li>\n<li><code>title<\/code>: Optional title displayed above the viewer.<\/li>\n<li><code>limit<\/code>: Number of top-level sections to show before a Show more toggle. <code>0<\/code> (default) shows all.<\/li>\n<li><code>include<\/code>: Comma-separated list of section keys\/labels to include (case-insensitive; matches raw keys or humanized labels). Example: <code>include=\"id,type,manufacturer\"<\/code>.<\/li>\n<li><code>exclude<\/code>: Comma-separated list of section keys\/labels to hide. Example: <code>exclude=\"identifiers,documentation\"<\/code>.<\/li>\n<li><code>order<\/code>: Comma-separated preferred order of sections. Items not listed keep their natural order after these. Example: <code>order=\"id,type,manufacturers,identifiers\"<\/code>.<\/li>\n<li><p><code>more_label<\/code> \/ <code>less_label<\/code>: Override the Show more\/Show less button text.<\/p><\/li>\n<li><p>Examples:<\/p><\/li>\n<li><code>[digital_product_passport view=\"html\" title=\"Digital Product Passport\"]<\/code><\/li>\n<li><code>[digital_product_passport view=\"json\"]<\/code><\/li>\n<li><code>[digital_product_passport limit=\"5\" order=\"ID,Type,Manufacturers\" exclude=\"Documentation\"]<\/code><\/li>\n<li><code>[digital_product_passport include=\"ID,Version,Language,Identifiers\" more_label=\"Show all details\" less_label=\"Show fewer\"]<\/code><\/li>\n<li>Note: The legacy <code>[dpp]<\/code> shortcode has been removed to comply with wp.org prefixing guidelines. Use <code>[digital_product_passport]<\/code>.<\/li>\n<\/ul><\/li>\n<li><p>Block (Gutenberg): \"Digital Product Passport\"<\/p>\n\n<ul>\n<li>Add the block and (optionally) paste JSON in the block settings to override the post\/product meta for that block.<\/li>\n<li>Choose the default tab (HTML or JSON) in the block inspector.<\/li>\n<\/ul><\/li>\n<li><p>Classic Editor: Use the \"Digital Product Passport\" toolbar button<\/p>\n\n<ul>\n<li>Click the button, pick a title and default view (HTML or JSON), then insert. It uses the JSON saved in the meta box.<\/li>\n<\/ul><\/li>\n<li><p>WooCommerce: On product edit screens, the same meta box is available. Place the <code>[digital_product_passport]<\/code> shortcode in any product description area or block to display the viewer on the product page.<\/p><\/li>\n<li><p>Viewer controls (front end):<\/p>\n\n<ul>\n<li>Tabs switch between HTML and JSON. The JSON view has a \"Copy JSON\" button.<\/li>\n<li>Large passports show a Show more\/less toggle when <code>limit<\/code> is set.<\/li>\n<\/ul><\/li>\n<li><p>Troubleshooting:<\/p>\n\n<ul>\n<li>If you see \"No Digital Product Passport JSON found.\", either save valid JSON in the meta box or pass JSON via the shortcode <code>json<\/code> attribute.<\/li>\n<li>Ensure the shortcode <code>[digital_product_passport]<\/code> is present where you expect the viewer to appear.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h3>Compliance and Privacy<\/h3>\n\n<ul>\n<li>Privacy by design: No tracking, no external calls, no cookies.<\/li>\n<li>Data handling: DPP JSON is stored as post meta and rendered client-side. Nothing is sent to third parties.<\/li>\n<li>Security: Output is escaped and JSON is normalized server-side before embedding.<\/li>\n<li>Accessibility: Semantic HTML with ARIA, keyboard navigation, and visible focus.<\/li>\n<li>Performance: Minimal CSS\/JS loaded only when the viewer is present.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<ul>\n<li>None required: This plugin does not connect to, depend on, or transmit data to any third\u2011party\/external service. No data leaves your site when rendering a passport.<\/li>\n<li>Example placeholders: The sample JSON shown in the editor includes illustrative links such as <code>https:\/\/example.com<\/code> and <code>https:\/\/example.com\/manual.pdf<\/code>. These are placeholders for demonstration only; the plugin does not fetch or otherwise contact those URLs. Replace them with your own documentation links as needed.<\/li>\n<li>Namespaces in SVG: The editor\/block icon contains inline SVG markup that references the XML namespace <code>http:\/\/www.w3.org\/2000\/svg<\/code>. This is a namespace identifier, not a network request or external service.<\/li>\n<\/ul>\n\n<p>No third\u2011party terms of service or privacy policies apply because the plugin does not use any external services.<\/p>\n\n<h3>GDPR and EU Privacy Notes<\/h3>\n\n<ul>\n<li>Personal data scope: This plugin does not collect, track, or profile users. It only renders the DPP JSON you provide. If your JSON contains personal data (for example, a contact person's name or email), you are the controller of that data.<\/li>\n<li>Lawful basis: Ensure you have a lawful basis under GDPR to publish any personal data included in the DPP. Prefer business contacts or shared inboxes over named individuals where possible.<\/li>\n<li>Data minimization: Avoid including personal data unless strictly necessary for the product passport. Consider using role-based contacts (e.g., support@example.com).<\/li>\n<li>Data location and transfers: The plugin does not perform network requests or transfer data to third countries. Any links inside your JSON are rendered as links only; the plugin does not fetch or proxy them.<\/li>\n<li>Retention: DPP JSON is stored as post meta and retained until you edit or delete the post\/product or remove the meta.<\/li>\n<li>Data subject rights (DSR): The plugin does not store visitor-level personal data, so it does not add custom exporters or erasers. If you include personal data in DPP JSON, handle DSRs by updating\/removing the JSON in your content.<\/li>\n<li>Privacy Policy helper: The plugin registers guidance for Tools &gt; Privacy so you can include accurate information on your site's Privacy Policy page.<\/li>\n<li>Redaction hooks: Developers can filter or redact fields before display using the <code>digital_product_passport_viewer_data<\/code> filter.<\/li>\n<li>Access control: The viewer displays wherever the post\/product is visible. Use WordPress visibility\/roles or your membership tools to restrict access if needed.<\/li>\n<li>Disclaimer: This is not legal advice. Consult your legal counsel to confirm compliance for your use case.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>digital-product-passport<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>Paste (or save) JSON in the \"Digital Product Passport\" meta box on any post\/page\/product, or use the block\/shortcode.<\/li>\n<\/ol>\n\n<h4>Manual ZIP installs<\/h4>\n\n<ul>\n<li>From WordPress.org, the download is <code>digital-product-passport.zip<\/code> (latest stable).<\/li>\n<li>For manual builds (e.g., GitHub release), package the plugin as <code>digital-product-passport-&lt;version&gt;.zip<\/code> (with dots, e.g. <code>digital-product-passport-0.1.0.zip<\/code>).<\/li>\n<li>To generate a correctly named ZIP locally, run: <code>composer run package<\/code> and use the artifact created in <code>dist\/<\/code>.<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id='does%20this%20plugin%20require%20a%20third-party%20service%3F'><h3>Does this plugin require a third-party service?<\/h3><\/dt>\n<dd><p>No. It is provider-independent and does not call external APIs. If you have JSON, the plugin will render it.<\/p><\/dd>\n<dt id='does%20the%20plugin%20validate%20a%20specific%20dpp%20schema%3F'><h3>Does the plugin validate a specific DPP schema?<\/h3><\/dt>\n<dd><p>It does not enforce a particular schema. It renders any valid JSON and includes humanization for common ESPR-style keys in the HTML view.<\/p><\/dd>\n<dt id='is%20woocommerce%20required%3F'><h3>Is WooCommerce required?<\/h3><\/dt>\n<dd><p>No. The plugin works with WordPress posts and pages. When WooCommerce is active, a meta box is also available on product edit screens.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Lightweight, vendor-agnostic Digital Product Passport viewer for WordPress and WooCommerce. Renders DPP JSON as accessible HTML and JSON tabs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/250842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=250842"}],"author":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pluginwave"}],"wp:attachment":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=250842"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=250842"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=250842"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=250842"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=250842"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=250842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}