| 开发者 | aosdigital |
|---|---|
| 更新时间 | 2026年9月11日 06:19 |
| PHP版本: | 8.0 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/01/{gtin}/21/{serial} standardhttps://w3id.org/dpp/)/wp-json/dpp/v1/passport/{id} with HTTP caching headersdigital-product-passport-for-woocommerce text domain/wp-content/plugins/digital-product-passport-for-woocommerce/ or install via the WordPress plugin directoryAll passport data stays in your WordPress database, and the plugin contacts no external service at all — QR codes are generated on your own server. No analytics, no telemetry, nothing sent anywhere. Whether your site as a whole is GDPR compliant depends on the rest of it, but this plugin adds no data flow you would have to declare.
Yes. Each product (including variations) can have its own complete passport. HPOS and legacy order storage are both supported.
Inside the plugin, with no network request. The encoder writes the symbol as SVG and stores it in your uploads folder so the work is done once per product. Addresses longer than 213 characters do not fit a version 10 symbol; there you get a visible note instead of an unreadable code.
Yes. Use the display_position setting to choose between a modal button or an inline product tab. CSS custom properties (--dpp-primary, --dpp-radius, etc.) let you restyle without editing plugin files. The add-on adds PDF branding options.
[dpp_button] — renders the "View Passport" button[dpp_passport] — renders the full passport inline[dpp_qr_code] — renders the product's QR codeproduct_id attribute. When omitted, the current product is used.
GET requests to /wp-json/dpp/v1/passport/{id} are public by default (configurable in settings). The API returns JSON-LD with Cache-Control and X-Robots-Tag: noindex headers.
Yes. The plugin explicitly declares custom-order-tables compatibility, so it works whether you use HPOS or the legacy posts table.
Ten key fields are checked (manufacturer name, GTIN, country, CO₂, energy class, materials, recyclability, repair index, warranty, compliance). Each filled field adds weight to the score displayed as a progress bar in the product panel.
dpp-* while the CSS and the JavaScript listened for dppass-*. The visible result: clicking "Digital Product Passport" on a product page opened nothing, and in the admin the buttons for adding and removing a material, opening the material library, saving and applying the company profile, the template buttons and the supplier edit and delete buttons had no handler. Everything is on one prefix now.dppass-settings and dppass-upgrade, but the "Settings" link WordPress shows next to the plugin, the add-on button in the settings sidebar and the link from the AOS Hub all pointed at dpp-settings and dpp-upgrade.number_format(), which is not locale-aware. A German or French visitor saw 12.40 where 12,40 belongs. Now number_format_i18n(). The REST and JSON-LD output is untouched and stays machine-readable.product_id attribute without a check, and the free add-on served the same data as a printable page. All five now ask one shared guard (Utils\Access), so the next door cannot be forgotten. A nonce answers whether a request came from our page, never whether the visitor may see the data.--dpp- prefix; the rename in 1.6.0 was anchored on quotes and dots, and a custom property is preceded by a hyphen, so no rule matched it. They are now --dppass-, in step with the free add-on, which reads two of them.Cache-Control: private, no-store so no proxy in between can hand it on either.generate() may also return it from a file in wp-content/uploads — anything able to write there could have put arbitrary markup on the page. Both output paths now run through wp_kses() against an allowlist of the five elements a QR symbol consists of. Verified that the generated symbol passes through byte-identical and that script, event handlers, foreignObject, use and links are removed.dpp_ prefix to dppass_. WordPress.org discards any prefix shorter than four characters. Existing installations are migrated automatically on the first page load after the update — options, the material library, the supplier list and all 29 passport fields per product. The migration runs on plugins_loaded, not on activation, because a plugin update does not activate anything. Nothing has to be re-entered.dpp_is_pro() and dpp_upgrade_url() while their function_exists() guards already asked for the new names — so the guards could never match.dpp_upgrade_url().digital-product-passport-for-woocommerce, matching the
plugin name. WordPress.org derives a plugin's permalink from the plugin name, and language
packs are looked up by text domain — with the two out of step, no translation would ever
have loaded. Nothing users store changes: every option, hook and meta key keeps its dpp_
prefix.load_plugin_textdomain() call it required;
WordPress has loaded language packs on its own since 4.6.DPP_ → DPPASS_). Plugin Check discards any
prefix shorter than four characters, so all seven were reported as unprefixed globals.fgetcsv()/fputcsv() now pass $escape explicitly. PHP 8.4 deprecates the implicit
default, and the plugin declares PHP 8.0, which includes 8.4.WP_Filesystem. On installations
that write over FTP the previous direct write silently did nothing — and that is exactly
where the directory would have been left unprotected.DPP_PRO_VERSION at activation time — now uses DPP_PRO_VERSION_RAW)is_writable() with wp_is_writable() in the MO generator for full WP Filesystem API compliance$_POST access now fully phpcs-annotated for WordPress.Security complianceuninstall.php global variable names annotated for Plugin Check complianceload_plugin_textdomain() phpcs-annotated (kept intentionally for MO auto-compilation fallback)wp_add_inline_script (timing fix)/01/{gtin}/21/{serial})dpp_passport_viewed and dpp_passport_content_end action hooks for Pro extensions