| 开发者 | kesadh |
|---|---|
| 更新时间 | 2026年9月27日 16:34 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/wp-content/plugins/, or install the zip via Plugins → Add New → Upload Plugin.No. The product's stored price is never modified. Add-on prices are added only to the line item shown to the customer, and only for the add-ons they actually select.
Orders already placed keep the name and price that was charged at the time — editing an add-on afterwards never changes past orders. If you edit an add-on's price while it's still sitting unpurchased in someone's cart, their cart total will reflect the corrected price the next time it recalculates (the same way a normal product price correction would). If you delete an add-on entirely, any cart that already had it selected keeps the price it had captured at the time it was added.
Up to 5. This is a fixed limit in the current version.
That's intentional. Those "express checkout" buttons charge whatever price they're shown before the customer ever sees the add-on choices, so letting one through would silently check out without any add-ons the customer might have wanted. Whenever a product has active add-ons, the plugin hides that button so customers go through the normal Add to Cart flow instead, where the price is always correct. The button is unaffected on products with no add-ons, and it still appears normally on the Cart and Checkout pages (by then the price is already correct).
Add-on prices are added directly into the product's line item, so they automatically follow that product's tax class and your store's normal tax display settings — you don't need to configure tax separately for add-ons.
tnt-extras-for-woocommerce. Text Domain header and every translation string now updated to match, for real this time — this is the final value going forward.Requires Plugins: woocommerce header, flagged as useful by the review team's automated dependency check since the plugin extends WooCommerce; declares the dependency to WordPress core (6.5+) so it can prompt/require WooCommerce to be active before this plugin activates.product-add-ons — the review team has not yet processed the tnt-extras-for-woocommerce rename requested in 1.0.8, so shipping that value now fails every text-domain check. The plugin's display name stays "TNT Extras for WooCommerce" (that satisfies the reviewer's naming objection); only the internal Text Domain reverts, and only until the new slug is confirmed, at which point it will be updated to match in a follow-up release..DS_Store file from the plugin folder ("Hidden files are not permitted").tnt-extras-for-woocommerce) at the request of the WordPress.org review team — the previous name was judged too close to WooCommerce's own "Product Add-Ons" extension. Text Domain and every translation string updated to match; user-facing labels ("Product Add-Ons" settings tab, admin notices) renamed to "TNT Extras".WordPress.DB.SlowDBQuery.slow_db_query_meta_key warnings (4x) on the $wpdb->delete() cleanup calls in the uninstall routine — added to the existing phpcs:disable/phpcs:enable justification block alongside the direct-query codes already suppressed there.AP_ prefix, e.g. AP_Settings) renamed to a unique, plugin-specific prefix (Product_Add_Ons_*) together with the plugin's global helper functions and constants, resolving "non-prefixed" naming warnings from the WordPress.org Plugin Check.$_POST reads in the add-to-cart handler (the add-to-cart form has no dedicated nonce in core WooCommerce; selections are always re-validated server-side against the product's own configuration regardless).$product global reassignment in the frontend renderer now carries the same justified phpcs:ignore as its declaration (WooCommerce's own global, not one this plugin defines).phpcs:ignore placement for two $_POST reads in the cart add-to-cart handling so the documented justification sits on the exact flagged line.phpcs:ignore annotations for WooCommerce's own $product global in the frontend renderer, and renamed a local $settings variable in the uninstall routine to a prefixed name — both were flagged as unprefixed globals.