Japanized for WooCommerce is the essential toolkit for running a WooCommerce store in Japan. This plugin bridges the gap between WooCommerce's global features and Japan's unique e-commerce requirements.
Why You Need This Plugin
Running an online store in Japan requires specific features that standard WooCommerce doesn't provide out of the box:
- Japanese address formats with proper field ordering (postal code, prefecture, city, address lines)
- Name reading fields (Yomigana/Furigana) for accurate customer identification
- Delivery date and time selection that customers expect
- Popular Japanese payment methods like bank transfer and COD
- Legal compliance with Japan's Specified Commercial Transaction Act (特定商取引法)
Who Should Use This
This plugin is designed for:
- Japanese e-commerce businesses using WooCommerce
- International stores shipping to Japanese customers
- Anyone who needs Japanese address handling and payment methods
- Stores requiring delivery date/time selection functionality
Seamless Integration
Works smoothly with WooCommerce core features and popular extensions. Fully compatible with the new WooCommerce Blocks checkout experience. All features are optional - enable only what you need for your store.
Key Features
Address & Name Management
- Name reading (Yomigana/Furigana) input fields for billing and shipping addresses
- Honorific title (様/sama) automatically added after customer names
- Japanese-style address format with proper field ordering
- Auto-fill address from postal code using Yahoo! API integration
-
Company name field support
Shipping & Delivery
-
Delivery date and time selection at checkout
- Delivery time slot management
- Holiday and non-delivery day settings
- Weekend and specific date exclusions
-
Delivery-related fields hidden when free shipping is applied
Payment Methods
-
Bank Transfer (Japanese banks)
- Japan Post Bank Transfer
- Cash on Delivery (COD) with fee calculation
- COD subscription support
- Pay at Store (over-the-counter payment)
-
Paidy (Buy Now, Pay Later) - Official Japanese payment gateway
Legal & Compliance
-
Specified Commercial Transaction Act (特定商取引法) page creator
- Shortcode support for legal information display
-
Customizable legal notice templates
Additional Features
-
Email template optimization for Japanese format
- Address validation for Japanese postal codes
- Affiliate integration (A8.net, Access Trade, Value Commerce)
- WooCommerce Blocks compatibility
Note: Paidy Checkout is also available as a standalone payment plugin.
[youtube
https://www.youtube.com/watch?v=mPYlDDuGzis]
External Services
This plugin connects to the following third-party services:
- Yahoo! Japan Web API (yahoo.co.jp) — used by the postal-code auto-fill feature to look up a Japanese address from a postal code entered at checkout. The postal code is sent to Yahoo! Japan's address lookup API whenever a customer uses this feature; it uses a merchant-configured Application ID (Japan Settings → Address Form) if one is set, and a bundled shared ID otherwise, so it is active whenever the postal-code auto-fill feature itself is used, not only once an ID is configured. See Yahoo! Japan's own site for their terms of service and privacy policy.
- Paidy payment API (api.paidy.com) — used by the Paidy (Buy Now, Pay Later) payment gateway to process and verify payments. Only active when the Paidy gateway is enabled. See Paidy's own site for their terms of service and privacy policy.
- Artisan Workshop Paidy onboarding intermediary (paidy.artws.info) — used only while applying for a Paidy merchant account through this plugin's setup wizard (available even before the gateway is enabled, since onboarding is how it becomes eligible to be enabled). Submitting the application form sends the store's site name and URL, the merchant's contact details (email, phone), the representative's name and date of birth, the submitted screening survey answers, and a site-specific verification hash, to this Artisan Workshop-operated intermediary, which relays the application to Paidy and later delivers the issued API credentials back to the site.
- Artisan Workshop promotion service (wc.artws.info) — the plugin's own first-party service. It is contacted automatically (no setting to disable it) to fetch promotional notice content shown in the WordPress admin dashboard to users who can manage WooCommerce, on stores with at least one order placed in the last 5 days. No order, customer, or site-configuration data is sent or received beyond the request itself.
- Artisan Workshop usage tracking service (wc.artws.info) — the plugin's own first-party service. When "Allow usage tracking" is enabled in Japan Settings, it sends a site/store profile (site URL, admin email, WordPress/server info, active and inactive plugin list, user/product/order/review/category counts, active payment gateway and shipping method configuration, and WooCommerce settings values — no API keys or payment credentials) on a weekly schedule. Independently of that setting, the same profile is also sent once whenever the plugin is first installed and once after each update to a new version, including this one.
Minimum Requirements
- WordPress 6.0 or greater
- WooCommerce 8.0 or greater
- PHP version 8.3 or greater
- MySQL version 5.6 or greater
- WP Memory limit of 64 MB or greater (128 MB or higher is preferred)
Automatic installation
Automatic installation is the easiest option as WordPress handles the file transfers itself and you don’t need to leave your web browser. To do an automatic install of Japanized For WooCommerce, log in to your WordPress dashboard, navigate to the Plugins menu and click Add New.
In the search field type “Japanized For WooCommerce” and click Search Plugins. Once you’ve found our eCommerce plugin you can view details about it such as the the point release, rating and description. Most importantly of course, you can install it by simply clicking “Install Now”.
Manual installation
The manual installation method involves downloading and uploading our plugin to your webserver via your favorite FTP application.
2.9
2.9 is a minor update, but delete PayPal Payment Gateway. Make a full site backup, update your theme and extensions.
There is no change in the database saved by this plugin.
2.8
2.8 is a minor update, but change the setting page to block. Make a full site backup, update your theme and extensions.
There is no change in the database saved by this plugin.
2.1
2.1 is a minor update, but add Paidy payment method. Make a full site backup, update your theme and extensions.
There is no change in the database saved by this plugin.
2.0
2.0 is a major update. Make a full site backup, update your theme and extensions.
There is no change in the database saved by this plugin.
2.9.16 - 2026-09-07
- Added - Paidy onboarding callbacks can now be authenticated via an HMAC-SHA256 signature shared at application time, in addition to the one-time state token; this restores automatic API key delivery for merchants whose token had already expired or was never issued
- Added - A "Back to Paidy settings" link on the onboarding "under review" screen so merchants who received their Paidy API keys separately can enter them manually without waiting for automatic delivery
- Security - Fixed a replay/idempotency gap where two concurrent Paidy onboarding callbacks authorized by the same state token (without an accompanying signature) could both be processed, duplicating the credential/status update
- Security - Paidy onboarding callbacks are now authenticated strictly from the signed request body; a query-string parameter could previously override a value that was actually covered by the signature
- Security - Paidy onboarding callbacks for an application that is no longer the current one on record are now rejected, preventing a delayed or resent callback from overwriting a newer application's credentials
- Security - The Cash on Delivery / COD2 surcharge configured for Block Checkout could be bypassed by sending an invalid payment gateway ID to the cart-update endpoint while still completing the order via COD; the gateway ID is now validated against the site's registered gateways
- Security - Decrypted Paidy API secret keys are no longer duplicated in plaintext in the diagnostic
paidy_received_data option; they remain stored (as before) in the gateway's own settings
- Fixed -
wizard=false now correctly shows the Paidy gateway's manual configuration fields
- Fixed - Uninstalling the plugin now also removes the signature- and event-claim option rows created by the onboarding receiver's replay guards
- Fixed - A
wp_remote_post() failure during Paidy onboarding submission no longer also falls through to the HTTP-response-code error branch, avoiding duplicate log entries
- Changed - The admin promotion notice and its "has recent orders" check are now cached for a short period instead of making an uncached remote request and database query on every wp-admin page load
- Changed - Tested up to WordPress 7.1 and WooCommerce 11.1.0
2.9.15 - 2026-07-08
- Added - COD fee feature for the "Cash on Delivery for Subscriptions" (COD2) gateway: fee name, amount, maximum cart amount, tax settings, and a PRO tiered-fee table can now be configured on the gateway settings page
- Added - Toggleable debug logging for COD2 fee calculation; enable "Debug mode" on the gateway settings page to log calculation details (start values, max-amount check, filter results, applied fee) to WooCommerce → Status → Logs (source:
jp4wc-cod2-fee)
- Added - Tax label (e.g.
(incl. tax)) after the COD fee amount in cart/checkout totals on the classic checkout, following the same display logic as WooCommerce core subtotal/shipping rows; applied only to the JP4WC gateway fee
- Fixed - Deleting all rows of the COD2 tiered-fee table and saving restored the previous data; an empty table is now saved correctly (early return happens only on nonce failure)
- Fixed - Duplicated place-order row (privacy text, terms checkbox, order button) accumulating on every classic-checkout update when the admin-edited Paidy description contained unbalanced HTML; the description is now balanced with
force_balance_tags() on output and validated on save
- Fixed -
403 paidy_invalid_state error on Paidy Instant Onboarding key delivery when the merchant review took longer than 2 days; the one-time state token is now stored as a non-autoloaded option with an application-level expiry instead of a transient, so it survives until the callback arrives
- Fixed - Paidy settings wizard redirect no longer injects or rewrites the
pk_test_ prefix into the saved test API public key; key management is left entirely to the user
- Fixed - Yomigana (reading) fields duplicated on the My Account order details page (
view-order); the duplicate additional-field rows are now suppressed there as well as on the order received page
- Fixed - Yomigana displayed twice (and editable twice) on the admin order edit screen for orders placed via the block checkout; the Additional Checkout Fields API entries injected by WooCommerce core are now removed from the billing/shipping field lists since JP4WC already embeds yomigana in the formatted address
2.9.14 - 2026-06-22
- Fixed - Paidy payment verification was always failing (HTTP 404) because the gateway incorrectly used POST for
GET /payments/{id}; switched to wp_safe_remote_get() so payment status checks now succeed and order completion is unblocked
- Security -
payment_id parameter is now validated against the Paidy format (pay_[A-Za-z0-9_]+) and rawurlencode()-escaped before being interpolated into the API URL, preventing path/query injection from buyer-controllable transaction IDs
- Fixed - Paidy payment_id regex was too strict (rejected underscores); updated to
pay_[A-Za-z0-9_]+ to match actual Paidy IDs such as pay_aii8_kYAAEYA2BDW
2.9.13 - 2026-05-27
- Security - Fixed Broken Access Control (CVSS 6.5) in Paidy payment gateway REST endpoints:
paidy-receiver/v1/receive now enforces a one-time per-session state token (stored as a per-token transient keyed by the 32-char value itself so parallel sessions cannot clobber each other); paidy/v1/order and paidy/v1/check now require either HMAC signature verification or an IP allowlist — the previous unconditional return true fallback has been removed
- Security - State token parameter is validated for type and format (32-char alphanumeric) before use as a transient key suffix to prevent non-string or oversized inputs on the unauthenticated receiver endpoint
- Security - State transient is consumed only after the handler completes successfully so transient DB / decryption failures do not permanently prevent retrying the onboarding callback; orphaned transients are cleaned up when
wp_remote_post() fails
- Fixed - WP_Error messages for base64 and AES-256-CBC decryption failures in the Paidy receiver are now translatable via
__() / sprintf() with a %s field-name placeholder
- Fixed - Missing Paidy API key fields (absent from the intermediary POST) are now merged into
$filtered_params as empty strings so downstream code can access all four key fields unconditionally without undefined-index notices
2.9.12 - 2026-05-21
- Fixed - Yomigana (reading) fields duplicated on My Account address edit form when block checkout is active;
woocommerce_address_to_edit filter now removes _wc_{type}/jp4wc/yomigana_* duplicates when traditional {type}_yomigana_* fields are already present (classic checkout), and suppresses traditional fields when only WC Additional Fields API keys are registered (block checkout)
- Fixed - Yomigana rows duplicated on My Account Addresses view page (
/my-account/?edit-address) for both classic and block checkout; WC Additional Fields API render_address_fields callback is now removed before it fires when JP4WC yomigana is enabled, eliminating the extra "Last Name ( Yomigana )" label rows
- Fixed - My Account Addresses view page did not display yomigana for block checkout users whose data is stored only in
_wc_billing/jp4wc/yomigana_* meta keys; formatted_address() now reads both classic ({type}_yomigana_*) and block (_wc_{type}/jp4wc/yomigana_*) meta keys, selecting the set that matches the active checkout type
- Fixed -
{last_name}, {first_name}, and {yomigana_*} placeholders appeared as literal text in the Block Checkout address summary; address format filter now correctly handles block checkout context
- Changed - Removed unused PayPal Express Checkout (
ppec_paypal) compatibility code that referenced a decommissioned gateway
2.9.11 - 2026-05-11
- Fixed - Fatal error in
jp4wc_delivery_check_data() on Classic Checkout with Square / Amazon Pay; woocommerce_payment_successful_result was registered with 1 argument so $result['order_id'] was undefined when gateways omit it — wc_get_order(null) returned false, causing a PHP Fatal Error on $order->get_meta() and corrupting the AJAX redirect to the Thank You page; filter now accepts 2 arguments and $order_id arrives as the second parameter; added early-return guard when wc_get_order() returns false (Closes #166)
- Fixed - Yomigana (reading) fields no longer appeared in order emails after 2.9.10; restored accidentally removed
woocommerce_localisation_address_formats filter registration that injects {yomigana_last_name} / {yomigana_first_name} placeholders into the JP address format template
- Changed - "NOT registered" delivery log messages changed from
log_info to log_debug (WP_DEBUG only) to stop a 2 MB/day log flood on sites with delivery date disabled
- Changed - Removed unused
display_admin_order_meta() method in JP4WC_Delivery that was never registered to any hook (dead code since introduction)
2.9.10 - 2026-04-27
- Security -
jp4wc_hide_notices() now requires manage_woocommerce capability before processing notice-dismissal requests
- Fixed - Admin order edit page displayed 名|姓 instead of 姓|名; CSS overrides now swap float directions for first/last name fields to restore the correct Japanese display order
- Fixed - Admin order address field CSS was not applied on HPOS screens; enqueue now covers all screen ID variants including
admin_page_wc-orders and uses a $_GET['page'] fallback for early-init cases
- Fixed - JP4WC admin CSS was overridden by WooCommerce's cascade; inline styles are now attached directly after
woocommerce_admin_styles at admin_enqueue_scripts priority 20 to guarantee the overrides take effect
- Improved - Admin address field ordering rewritten with an order-list approach that preserves fields injected by third-party plugins and guards against yomigana field duplication
- Improved - Admin settings panel: Classic Checkout settings (Company name, Zip auto-entry, Free shipping display) grouped under a dedicated section; added PRO notice for Block Checkout zip auto-entry
- Changed - Removed unused
woocommerce_billing_fields/woocommerce_shipping_fields filter and streamlined yomigana field handling in address replacements
2.9.9 - 2026-04-23
- Fixed - COD fee not applied in Classic Checkout (Shortcode) or Block Checkout because
jp4wc_calculate_order_totals read from woocommerce_cod_settings while the JP4WC admin UI saves to wc4jp-extra_charge_* options; settings are now merged at runtime with JP4WC values taking precedence
- Fixed -
extra_charge_calc_taxes mismatch: React admin UI stored yes/no but PHP expected no-tax/tax-excl/tax-incl; legacy values are now normalised on read and the admin UI updated to a 3-way select
- Fixed - Stale
jp4wc_gateway_id session value could cause COD fee to be silently skipped in Classic Checkout (double session-check removed; gateway ID resolved once and passed through the entire calculation)
- Improved - Block Checkout fee script now uses exponential back-off retry (100 ms → 10 s) instead of fixed 1500 ms / 3000 ms timeouts to wait for
wc/store/payment store readiness
- Added - PRO-ready filter hooks for COD fee:
jp4wc_cod_fee_settings, jp4wc_cod_fee_name, jp4wc_cod_fee_amount, jp4wc_cod_fee_is_applicable, jp4wc_cod_fee_tax_class (all @since 2.9.8)
- Changed - Minimum required PHP version raised from 8.1 to 8.3
2.9.6 - 2026-04-22
- Fixed - Paidy webhook permission check rejected all notifications from Paidy (no
x-paidy-signature header) causing orders to remain "pending" and be auto-cancelled
- Fixed - Paidy webhook signature verification used wrong option name
secret_key (non-existent); corrected to api_secret_key / test_api_secret_key based on test mode
- Fixed - Bank transfer (
bankjp) account skip condition ! isset( $account_names[$i] ) was always false; replaced with empty( $bank_names[$i] ) && empty( $name ) to properly skip blank rows
- Added - Deduplication of bank transfer account entries on save and load to prevent double display caused by corrupted option data
- Fixed - Yomigana (読み仮名) fields not displayed in HTML emails when using Block Checkout; corrected meta key fallback from
_wc_other/ to _wc_billing/ and _wc_shipping/ prefixes
- Fixed - Yomigana displayed twice on order received (thank-you) page when using Block Checkout
- Fixed - Yomigana appearing as a separate bold
<strong> list below the formatted address in emails and thank-you page; now suppressed via show_in_order_confirmation: false and block render filter
- Fixed - "(よみがなを確認するには「編集」をクリックしてください。)" message incorrectly appearing in new order emails
- Fixed - Customer email salutation showing first name only instead of full name (姓名); email context detection now uses
WC_Email::$sending flag for reliability with WC 10.7+ BlockEmailRenderer
- Added - Country is hidden from formatted address in emails and thank-you page when the store sells to only one country
2.9.5 - 2026-04-20
- Fixed - White screen on frontend caused by fatal error in Paidy blocks support when gateway is not registered
- Fixed -
WC_Gateway_Paidy not found fatal error on admin pages when WooCommerce is installed with a non-standard path (e.g. wp-env)
- Fixed -
jp4wc_has_orders_in_last_5_days undefined function error caused by is_woocommerce_active() returning false in non-standard install paths
- Fixed - Google Calendar consultation button not displaying on some hosting environments (Xserver) due to CSP/WAF blocking external script injection; replaced with a plain link
- Added -
jp4wc_allowed_setting_keys filter to allow add-on plugins to register their own setting keys with the REST API
- Added -
jp4wc_setting_option_map filter to allow add-on plugins to map REST keys to their existing WordPress option names
- Added -
jp4wc.settings.tabs and jp4wc.settings.tabContent JS filters via @wordpress/hooks to allow add-on plugins to inject tabs into the React settings UI
2.9.0 & 2.9.4 - 2026-03-19
- Fixed - COD fee not calculating in Classic Checkout due to
is_admin() returning true for admin-ajax.php requests
- Fixed - COD fee showing for non-COD payment methods in Classic Checkout (stale session value)
- Fixed - COD fee incorrectly displayed on cart page (now checkout-only)
- Fixed - Delivery date/time fields not appearing in Checkout Block (changed
class_exists to interface_exists for IntegrationInterface)
- Fixed - Delivery select placeholder showing WooCommerce auto-generated text instead of admin-configured label
- Fixed - Paidy order completion hook firing multiple times (added
paidy_capture_id guard)
- Fixed -
_load_textdomain_just_in_time warning in WordPress 6.7+ by deferring translations to after init
- Fixed -
JP4WC_Framework config strings now lazy-loaded at init priority 2 to prevent early textdomain calls
- Fixed -
WC_Paidy_Endpoint instantiation deferred to init priority 11 to prevent early WC_Gateway_Paidy construction
- Removed - PayPal settings removed from admin settings UI and API
Earlier versions
View complete changelog