| 开发者 | tackquote |
|---|---|
| 更新时间 | 2026年10月19日 03:38 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
tackquote) and never block checkout.tackquote.zip from the releases page, or build it from source with bash bin/build.sh.You may not need one: press Connect with TackQuote on the plugin's Connection tab, sign in and approve, and TackQuote creates a key for this store and sends it back to your site directly. To paste one by hand instead, in TackQuote go to Settings → Developer → API Keys.
It needs your site to use https. A development address (such as a .test name or a private IP) may use plain http. Other http sites can paste an API key instead.
Yes. The plugin declares HPOS (custom_order_tables) compatibility via WooCommerce FeaturesUtil and uses the WooCommerce order CRUD APIs (wc_get_order, order status hooks) rather than direct wp_posts order queries. You can run with HPOS enabled.
No. Sync is one-way: WooCommerce → TackQuote on order create and status change. Turning the toggle off stops new pushes; it does not delete data already in TackQuote.
Yes, with one line of code. WooCommerce core has no purchase-order field, and there is no
meta key this plugin could guess that would be right for every B2B extension — a guess that
looks correct and silently returns nothing is worse than an empty field. So the value is
read through a filter your theme or a small site plugin fills in:
add_filter( 'tack_quotes_order_po_number', function ( $po, $order ) { return $order->get_meta( '_my_checkout_po_field' ); }, 10, 2 );
Replace _my_checkout_po_field with the meta key your checkout writes. Without this filter
nothing is sent and TackQuote records no purchase-order number.
No, and no. "Add to Quote" adds the product to a separate, browser-side quote list — it never touches the WooCommerce cart, stock, or totals. "Checkout as Quote" creates a quote request in TackQuote from that list's contents. Customers can still shop and check out through WooCommerce completely normally, at the same time, with no interaction between the two.
So shoppers can add multiple products before requesting one combined quote. Use the floating "Quote list" button (bottom-right) once you've added everything you want quoted, then click "Checkout as Quote".
Yes, since 1.10.0, and both are off until you switch them on under TackQuote → Storefront. "Product cards" adds "Add to Quote" to every simple product in the shop, category and search lists; variable, grouped and external products link to their page instead, because a card cannot say which variation is wanted. "Cart page" adds "Request a quote for your cart" under Proceed to checkout on the classic cart; on the Cart block it appears as a fixed button at the bottom of the cart page. It copies the cart into the quote list and leaves the WooCommerce cart as it was.
Edit the product and tick Quote only in the General tab of the product data panel. Add to Cart disappears for that product (and for every variation of a variable product), a hand-made ?add-to-cart= link and the Cart/Checkout blocks refuse it too, and a cart that already held it loses that line with a notice. Unlike the store-wide mode, this applies to shop managers as well, so your own test sees what customers see.
Yes. Turn on quote-only mode and choose "Everyone except approved wholesale accounts". The plugin asks TackQuote whether the signed-in customer's wholesale application is approved, and only then shows the cart. If TackQuote cannot be reached, the customer sees the quote-only catalogue (this one check fails closed, because it is a price gate). It needs the API key.
Prices, quantity breaks, order limits, the buyer-group badge and the price gate follow the customer's account email. Net terms, tax exemption and credit standing go only to customers the seller has linked to a TackQuote buyer: approving the customer's wholesale application or their net-terms application sent from this store links them (both carry the WordPress user id since 1.10.0), or the seller links the WordPress user under Buyers → buyer → WooCommerce customer in TackQuote. A matching email alone never links one, because WooCommerce does not verify the email at registration. If the email belongs to a buyer already linked to a different WordPress user, that customer gets none of these B2B features.
To the quote line, where the seller sees "Buyer asked for …" beside your store price, which the quote keeps. A TackQuote server older than the attachments feature cannot take the field, so there they go into the request's note instead, one line per product ("Target prices: …"), after the shopper's own message.
It takes your theme's look by default: every button is your theme's button (so Site Editor > Styles > Blocks/Elements > Button restyles them), fields and tables use WooCommerce's classes, and the drawer and quote form use your theme's colours and fonts. Under TackQuote → Storefront → Styling you can pick an accent colour for the quote buttons and launcher, or tick "Use the theme's styles only" to load layout rules alone. For finer changes, set CSS variables in Appearance > Customize > Additional CSS or the Site Editor's custom CSS, for example :root { --tackquote-radius: 0; --tackquote-drawer-width: 26rem; } (also --tackquote-accent, --tackquote-surface, --tackquote-text, --tackquote-border, --tackquote-shadow, --tackquote-z-index, --tackquote-launcher-offset-x / -y). Developers can copy any file from the plugin's templates/tackquote/ folder (quote page, quote list drawer, volume table, wholesale and net-terms forms) into yourtheme/woocommerce/tackquote/ and edit it there, as with WooCommerce's own templates, and use the filters tackquote_button_label, tackquote_button_classes, tackquote_theme_styles_only, tackquote_quote_page_args, tackquote_quote_list_drawer_args, tackquote_quantity_breaks_args and tackquote_storefront_form_args. The full list is in docs/CUSTOMISATION.md in the plugin's GitHub repository.
English, plus German, Spanish, French, Italian, Japanese, Dutch and Brazilian Portuguese for the storefront text, in languages/ (machine-assisted from the TackQuote storefront catalogue; Italian awaits native review). A translate.wordpress.org language pack, when one exists, replaces the bundled file.
Sent when a shopper submits the quote form, using only what they typed into it:
/storefront/v1/quote-upload, with the signed-in customer's account email address and WordPress user ID, or for a guest a single-use upload token; the request then carries the upload IDs and the guest token. Files are never stored on your sitewooCustomerId) when they are signed in. Files (signed-in customers only, when the TackQuote server supports attachments): each file's bytes and name, the form slug and field key, the account email address and WordPress user ID; the application then goes to /storefront/v1/wholesale-signup/<slug> with the same answers and the upload IDs.Sent for each order when it is created and when its status changes, if the merchant has enabled Sync orders to TackQuote. This is the whole order. Read this list before switching order sync on. The customer's identity and addresses
0 for a guest ordertack_quotes_order_po_number filterstripe / "Credit Card")tack_quotes_connect_secret — a random value, created the first time Connect with TackQuote is pressed, that signs the connect request so this site can recognise the answer. Never sent anywhere. tack_quotes_connected_via (connect or key) and tack_quotes_connected_at record how and when the saved key arrived.tack_quotes_connect_<hash> — a 15-minute transient holding one pending Connect with TackQuote (the code verifier, a hash of the signed value, the administrator's user ID and TackQuote's request ID), deleted when the administrator comes back. tack_quotes_connect_notice_<user id> — a 5-minute transient carrying the outcome to the settings page.tack_quotes_registration_config — a transient caching the quote-form field policy for 15 minutes.tack_qr_* — short-lived transients counting quote requests per visitor for rate limiting. They hold a salted hash of the visitor's IP address, never the address itself, and expire after 5 minutes.tack_quotes_wholesale_form_cache — a transient caching wholesale form definitions for 5 minutes (60 seconds after a failure).tack_quotes_storefront_v1_missing — a transient remembering for one hour that the TackQuote server has no /storefront/v1 routes.tack_quotes_wholesale_form_missing — a transient listing, for one day, the wholesale form slugs already logged as matching no form, so the log gets one line a day per slug.tack_quotes_server_capabilities — a transient caching, for one day (ten minutes after a failed check), which optional features the TackQuote server advertises (for example attachments) and a 16-character SHA-256 prefix of the key it was read with (never the key).tack_qu_*, tack_qf_*, tack_qc_* — ten-minute transients counting attachment uploads, applications and checkout links per visitor for rate limiting, keyed on a salted hash of the IP address, never the address. Each counter also has a …s twin for the connecting address, which a client cannot forge. Attached files themselves are never written to your site: PHP's temporary copy is deleted as soon as the file has been sent.tack_quotes_connection_check — a transient remembering for one day whether the settings page's last "Test connection" passed, when, the message shown, and a 16-character SHA-256 prefix of the key that was tested (never the key itself). It lets the Overview say "Connected" only for the key saved now.tack_sf_* — two-minute transients carrying an application form's outcome (success or error text and what was typed, except phone numbers and tax, VAT or registration numbers, for refilling the form) back to the page after it is submitted. Read once and deleted.tack_quotes_vat_exempt_applied — a WooCommerce session value remembering that this plugin set the customer tax exempt, so the exemption can be withdrawn. Never saved to the customer record.tack_nt_<user id> (TackQuote's answer, one minute), order meta _tackquote_net_terms and _tackquote_po_number, option woocommerce_tackquote_net_terms_settings.tackquote_quote_checkout, order meta _tackquote_quote_ref and _tackquote_quote_number._tack_quotes_sync_key — order meta recording which order state was last accepted by TackQuote, so the same state is not sent twice._tack_known_email (a copy of the account email), _tack_email_unverified, _tack_mirrored_roles, _tack_role_mirror_checked, _tack_wholesale_applied (when a wholesale application sent from the store was answered "pending"); product meta _tackquote_quote_only. Tools → Export/Erase Personal Data covers the user meta, and WooCommerce's order export covers the order meta above. Erasure deletes only the purchase-order number, and only when WooCommerce's "Remove personal data from orders on request" is on; the quote reference, quote number and net terms are business records and stay._tack_email_unverified (no personal data; deleting it would trust a self-changed email again), the rate-limit counters (they expire within ten minutes and have no fixed name), and order meta (orders are financial records).
calendar), not this store's UTC day, so a shopper west of the seller can no longer pick a day TackQuote then refuses. A hint under the field says so when the shopper's own date differs ("Dates follow the seller's calendar (Kolkata). Today there is Oct 17, 2026."), translated in the seven bundled languages (machine-assisted, pending native review). An older TackQuote server without calendar gets exactly the old field. The seller's today is worked out again when the page is built, so a form definition cached shortly before the seller's midnight does not keep yesterday as the earliest day, and in the browser a wrong device clock can move it no earlier than the day TackQuote sent and no later than the day after. The hint stays hidden under themes that style .description as a block.tackquote/myaccount/wholesale-account.php.tackquote/myaccount/net-terms-account.php.