{"id":339665,"date":"2026-07-12T18:41:46","date_gmt":"2026-07-12T18:41:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/harbor-checkout-fields-for-woocommerce\/"},"modified":"2026-07-12T18:41:26","modified_gmt":"2026-07-12T18:41:26","slug":"harbor-checkout-fields-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/harbor-checkout-fields-for-woocommerce\/","author":23530116,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.1","requires":"6.4","requires_php":"8.2","requires_plugins":null,"header_name":"Harbor Checkout Fields for WooCommerce","header_author":"Harbor Plugins","header_description":"Add custom fields to the WooCommerce block-based checkout. HPOS-native, no legacy checkout required.","assets_banners_color":"64508f","last_updated":"2026-07-12 18:41:26","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/harborplugins.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":26,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"harborplugins","date":"2026-07-12 18:41:26"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3605086,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3605086,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3605086,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3605086,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3605086,"resolution":"1","location":"assets","locale":"","width":1280,"height":986},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3605086,"resolution":"2","location":"assets","locale":"","width":1280,"height":986},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3605086,"resolution":"3","location":"assets","locale":"","width":1280,"height":1175},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3605086,"resolution":"4","location":"assets","locale":"","width":1280,"height":1839},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3605086,"resolution":"5","location":"assets","locale":"","width":1280,"height":1266}},"screenshots":{"1":"Admin settings page with field list and drag-to-reorder","2":"Add Field form with type and location options","3":"Custom field displayed in the block checkout","4":"Field value shown in the admin order view","5":"Field value shown in the order confirmation email"}},"plugin_section":[],"plugin_tags":[271272,233863,3148,2010,286],"plugin_category":[45],"plugin_contributors":[271094],"plugin_business_model":[],"class_list":["post-339665","plugin","type-plugin","status-publish","hentry","plugin_tags-additional-checkout-fields","plugin_tags-block-checkout","plugin_tags-checkout","plugin_tags-custom-fields","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-harborplugins","plugin_committers-harborplugins"],"banners":{"banner":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/banner-772x250.png?rev=3605086","banner_2x":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/banner-1544x500.png?rev=3605086","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/icon-128x128.png?rev=3605086","icon_2x":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/icon-256x256.png?rev=3605086","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/screenshot-1.png?rev=3605086","caption":"Admin settings page with field list and drag-to-reorder"},{"src":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/screenshot-2.png?rev=3605086","caption":"Add Field form with type and location options"},{"src":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/screenshot-3.png?rev=3605086","caption":"Custom field displayed in the block checkout"},{"src":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/screenshot-4.png?rev=3605086","caption":"Field value shown in the admin order view"},{"src":"https:\/\/ps.w.org\/harbor-checkout-fields-for-woocommerce\/assets\/screenshot-5.png?rev=3605086","caption":"Field value shown in the order confirmation email"}],"raw_content":"<!--section=description-->\n<p><strong>Harbor Checkout Fields for WooCommerce<\/strong> lets you add custom fields to WooCommerce's block-based checkout without writing code.<\/p>\n\n<p>Fields are collected at checkout, saved to order metadata using WooCommerce's HPOS-safe order API, and automatically appear in the admin order detail screen and in customer confirmation emails.<\/p>\n\n<h4>Real-world use cases<\/h4>\n\n<ul>\n<li><strong>Gift message<\/strong> - let customers include a message for the recipient<\/li>\n<li><strong>Delivery instructions<\/strong> - collect access codes, gate instructions, or preferred drop-off spots<\/li>\n<li><strong>B2B purchase order number<\/strong> - required for invoice reconciliation<\/li>\n<li><strong>How did you hear about us?<\/strong> - a select dropdown for attribution tracking<\/li>\n<li><strong>Age confirmation checkbox<\/strong> - required for alcohol, tobacco, or age-gated products<\/li>\n<li><strong>Special requests or dietary notes<\/strong> - for food, events, or personalised items<\/li>\n<\/ul>\n\n<h4>Free Features<\/h4>\n\n<ul>\n<li>Add text, email, phone, checkbox, and select (dropdown) fields to the block checkout<\/li>\n<li>Choose field location: Contact section, Address block, or Order section<\/li>\n<li>Mark fields as required or optional<\/li>\n<li>Add a placeholder prompt to select fields<\/li>\n<li>Drag-to-reorder fields in the admin settings page<\/li>\n<li>Field values saved to order metadata (HPOS-compatible)<\/li>\n<li>Values displayed in the admin order detail view (after billing address)<\/li>\n<li>Values displayed in customer and admin order confirmation emails<\/li>\n<li>No coding required - works out of the box<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<p>Fields are registered with WooCommerce's official block checkout additional-fields API (available in WooCommerce 8.9 and later). Values are stored on the order with the HPOS-safe order API and read back with <code>$order-&gt;get_meta()<\/code>, so no direct database queries are made against order tables.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.4 or later<\/li>\n<li>WooCommerce 8.9 or later (block checkout additional fields API)<\/li>\n<li>PHP 8.2 or later<\/li>\n<li>WooCommerce block checkout (not the legacy shortcode checkout)<\/li>\n<li>HPOS (High Performance Order Storage) compatible<\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<p>For help with the plugin, post in the <a href=\"https:\/\/wordpress.org\/support\/plugin\/harbor-checkout-fields-for-woocommerce\/\">WordPress.org support forum<\/a> or email support@harborplugins.com.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the Plugins screen in WordPress<\/li>\n<li>Go to <strong>WooCommerce &gt; Checkout Fields<\/strong> to add your first field (or click <strong>Settings<\/strong> in the plugin list)<\/li>\n<li>Ensure you are using the WooCommerce block checkout (not the legacy shortcode checkout)<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20the%20classic%2Flegacy%20woocommerce%20checkout%3F\"><h3>Does this work with the classic\/legacy WooCommerce checkout?<\/h3><\/dt>\n<dd><p>No. This plugin targets the WooCommerce block checkout exclusively. For the legacy shortcode checkout, use WooCommerce's Checkout Field Editor or a similar plugin.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20compatible%20with%20hpos%3F\"><h3>Is this plugin compatible with HPOS?<\/h3><\/dt>\n<dd><p>Yes. Field values are saved automatically by WooCommerce when a registered field is submitted. The plugin reads them via <code>$order-&gt;get_meta()<\/code>. No direct database queries against order tables are made.<\/p><\/dd>\n<dt id=\"what%20woocommerce%20version%20is%20required%3F\"><h3>What WooCommerce version is required?<\/h3><\/dt>\n<dd><p>WooCommerce 8.9 or later. The <code>woocommerce_register_additional_checkout_field()<\/code> function was introduced in WooCommerce 8.9.<\/p><\/dd>\n<dt id=\"what%20php%20version%20is%20required%3F\"><h3>What PHP version is required?<\/h3><\/dt>\n<dd><p>PHP 8.2 or later. PHP 8.0 and 8.1 reached end-of-life and are no longer supported.<\/p><\/dd>\n<dt id=\"where%20do%20field%20values%20appear%3F\"><h3>Where do field values appear?<\/h3><\/dt>\n<dd><p>Field values appear in:<\/p>\n\n<ol>\n<li>The WooCommerce admin order detail screen (after the billing address)<\/li>\n<li>Customer and admin order confirmation emails<\/li>\n<\/ol><\/dd>\n<dt id=\"what%20does%20the%20location%20setting%20do%3F\"><h3>What does the Location setting do?<\/h3><\/dt>\n<dd><p>Location controls where the field appears in the block checkout:<\/p>\n\n<ul>\n<li><strong>Contact<\/strong> - below the email and phone fields<\/li>\n<li><strong>Address<\/strong> - inside the billing\/shipping address block<\/li>\n<li><strong>Order<\/strong> - below the order notes section<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20reorder%20fields%3F\"><h3>Can I reorder fields?<\/h3><\/dt>\n<dd><p>Yes. Drag the handle icon on the left of each field row in WooCommerce &gt; Checkout Fields to change the display order.<\/p><\/dd>\n<dt id=\"how%20many%20fields%20can%20i%20add%3F\"><h3>How many fields can I add?<\/h3><\/dt>\n<dd><p>There is no hard limit enforced by this plugin. WooCommerce's own additional fields API handles rendering. Keeping the number of fields small helps keep checkout simple for customers.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20store%3F\"><h3>Will it slow down my store?<\/h3><\/dt>\n<dd><p>No. Fields are registered server-side using WooCommerce's official API. No JavaScript is injected into the checkout frontend. The admin settings use lightweight AJAX.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20field%20data%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens to field data if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Field values are stored as order meta on each order and will remain in your database. If you reactivate the plugin, historical field values will be visible again. Deleting a field from the settings page removes it from future checkouts and from the order and email displays; the stored values are not deleted and remain in the database.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20stripe%2C%20paypal%2C%20and%20other%20payment%20gateways%3F\"><h3>Does it work with Stripe, PayPal, and other payment gateways?<\/h3><\/dt>\n<dd><p>Yes. Fields are rendered and validated by the WooCommerce block checkout before payment is processed. They are compatible with all major payment gateways.<\/p><\/dd>\n<dt id=\"is%20this%20compatible%20with%20popular%20page%20builders%20and%20themes%3F\"><h3>Is this compatible with popular page builders and themes?<\/h3><\/dt>\n<dd><p>Yes. Because this plugin uses WooCommerce's official block checkout extensibility API, it works with any theme that uses the standard WooCommerce block checkout.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Add text, email, phone, checkbox, and select fields to the WooCommerce block checkout<\/li>\n<li>Choose field location: Contact, Address, or Order section<\/li>\n<li>Mark fields as required or optional; add a placeholder prompt to select fields<\/li>\n<li>Drag-to-reorder fields with persistence via AJAX<\/li>\n<li>AJAX-powered add, edit, delete, and reorder - no page reloads<\/li>\n<li>Inline delete confirmation; no browser alert dialogs<\/li>\n<li>Duplicate label detection on both add and edit forms<\/li>\n<li>Select field options editor (value|Label format, one per line)<\/li>\n<li>Checkbox fields are never stored as required (WooCommerce restriction)<\/li>\n<li>HPOS-safe: field values read via <code>$order-&gt;get_meta()<\/code>, no direct DB queries<\/li>\n<li>HPOS and block checkout compatibility declared to WooCommerce<\/li>\n<li>Field values displayed in admin order detail view (after billing address)<\/li>\n<li>Field values displayed in customer and admin confirmation emails (HTML + plain text)<\/li>\n<li>AJAX write operations rate-limited to 60 requests per minute per user<\/li>\n<li>Empty state shown when no fields exist; hidden when at least one is added<\/li>\n<li>Toast notifications with aria-live screen reader announcement on every action<\/li>\n<li>Focus returns to Edit button when edit form is cancelled (keyboard\/SR navigation)<\/li>\n<li>Full accessibility: aria-live regions, aria-expanded, role=\"status\/alert\" attributes<\/li>\n<li>GitHub Actions CI: PHPUnit matrix (PHP 8.2\/8.3\/8.4), PHPCS (WordPress Coding Standards), Playwright E2E<\/li>\n<li>Unit tests across field registry, storage, admin settings, and sanitisation, plus Playwright E2E coverage<\/li>\n<li>Requires PHP 8.2 or later (PHP 8.0\/8.1 are end-of-life)<\/li>\n<\/ul>","raw_excerpt":"Add custom fields to the WooCommerce block checkout: gift messages, delivery notes, PO numbers, and more. No code required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/339665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=339665"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/harborplugins"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=339665"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=339665"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=339665"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=339665"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=339665"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=339665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}