{"id":261263,"date":"2026-04-30T07:33:48","date_gmt":"2026-04-30T07:33:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kiriminaja-official\/"},"modified":"2026-06-29T11:04:07","modified_gmt":"2026-06-29T11:04:07","slug":"kiriminaja-official","status":"publish","type":"plugin","link":"https:\/\/arg.wordpress.org\/plugins\/kiriminaja-official\/","author":21176046,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.2.6","stable_tag":"2.2.6","tested":"7.0","requires":"6.8","requires_php":"8.0","requires_plugins":null,"header_name":"KiriminAja Official","header_author":"KiriminAja","header_description":"KiriminAja plugin for Woocommerce simplifies your online store\u2019s shipping management with automation, speed, and efficiency. Display real-time shipping rates from multiple couriers, offer COD options, schedule pickups, print labels, and track deliveries directly from your Woocommerce dashboard. Enjoy discounted shipping, flat-rate promotions, comprehensive reports, and an integrated system that helps your business grow through easier, safer, and more reliable deliveries across Indonesia","assets_banners_color":"c191e1","last_updated":"2026-06-29 11:04:07","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/developer.kiriminaja.com\/kopi","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/kiriminaja-official\/","header_author_uri":"https:\/\/kiriminaja.com","rating":5,"author_block_rating":0,"active_installs":100,"downloads":1890,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.1.15":{"tag":"2.1.15","author":"kiriminaja","date":"2026-04-30 07:32:45"},"2.1.16":{"tag":"2.1.16","author":"kiriminaja","date":"2026-04-30 08:21:50"},"2.1.17":{"tag":"2.1.17","author":"kiriminaja","date":"2026-04-30 09:22:08"},"2.1.18":{"tag":"2.1.18","author":"kiriminaja","date":"2026-04-30 11:46:10"},"2.1.19":{"tag":"2.1.19","author":"kiriminaja","date":"2026-05-04 10:36:33"},"2.1.20":{"tag":"2.1.20","author":"kiriminaja","date":"2026-05-04 10:45:03"},"2.1.21":{"tag":"2.1.21","author":"kiriminaja","date":"2026-05-05 02:34:35"},"2.1.23":{"tag":"2.1.23","author":"kiriminaja","date":"2026-05-18 07:21:23"},"2.1.24":{"tag":"2.1.24","author":"kiriminaja","date":"2026-05-21 11:09:20"},"2.1.25":{"tag":"2.1.25","author":"kiriminaja","date":"2026-05-21 11:50:25"},"2.1.26":{"tag":"2.1.26","author":"kiriminaja","date":"2026-05-23 05:41:15"},"2.1.27":{"tag":"2.1.27","author":"kiriminaja","date":"2026-05-23 05:53:02"},"2.1.28":{"tag":"2.1.28","author":"kiriminaja","date":"2026-05-28 10:29:18"},"2.1.29":{"tag":"2.1.29","author":"kiriminaja","date":"2026-05-29 07:38:48"},"2.1.30":{"tag":"2.1.30","author":"kiriminaja","date":"2026-05-29 08:00:51"},"2.1.31":{"tag":"2.1.31","author":"kiriminaja","date":"2026-05-29 08:18:03"},"2.1.32":{"tag":"2.1.32","author":"kiriminaja","date":"2026-05-29 09:52:41"},"2.1.33":{"tag":"2.1.33","author":"kiriminaja","date":"2026-05-29 10:05:22"},"2.1.34":{"tag":"2.1.34","author":"kiriminaja","date":"2026-05-29 10:09:15"},"2.1.35":{"tag":"2.1.35","author":"kiriminaja","date":"2026-05-29 10:14:04"},"2.1.36":{"tag":"2.1.36","author":"kiriminaja","date":"2026-05-29 10:17:41"},"2.1.37":{"tag":"2.1.37","author":"kiriminaja","date":"2026-05-29 10:29:08"},"2.1.38":{"tag":"2.1.38","author":"kiriminaja","date":"2026-05-29 10:47:50"},"2.1.39":{"tag":"2.1.39","author":"kiriminaja","date":"2026-06-02 10:38:12"},"2.1.40":{"tag":"2.1.40","author":"kiriminaja","date":"2026-06-09 13:16:40"},"2.1.41":{"tag":"2.1.41","author":"kiriminaja","date":"2026-06-14 02:07:58"},"2.1.42":{"tag":"2.1.42","author":"kiriminaja","date":"2026-06-15 11:56:19"},"2.1.43":{"tag":"2.1.43","author":"kiriminaja","date":"2026-06-17 04:33:19"},"2.1.44":{"tag":"2.1.44","author":"kiriminaja","date":"2026-06-17 04:42:02"},"2.2.0":{"tag":"2.2.0","author":"kiriminaja","date":"2026-06-23 04:42:24"},"2.2.1":{"tag":"2.2.1","author":"kiriminaja","date":"2026-06-23 08:49:43"},"2.2.2":{"tag":"2.2.2","author":"kiriminaja","date":"2026-06-24 02:07:06"},"2.2.3":{"tag":"2.2.3","author":"kiriminaja","date":"2026-06-24 04:19:31"},"2.2.4":{"tag":"2.2.4","author":"kiriminaja","date":"2026-06-24 06:45:26"},"2.2.5":{"tag":"2.2.5","author":"kiriminaja","date":"2026-06-25 03:57:51"},"2.2.6":{"tag":"2.2.6","author":"kiriminaja","date":"2026-06-29 11:04:07"}},"upgrade_notice":{"2.1.15":"<p>First official release on WordPress.org with full security audit, interactive map picker, and improved transaction management.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3551898,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3551898,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3551898,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3553132,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3553132,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.1.15","2.1.16","2.1.17","2.1.18","2.1.19","2.1.20","2.1.21","2.1.23","2.1.24","2.1.25","2.1.26","2.1.27","2.1.28","2.1.29","2.1.30","2.1.31","2.1.32","2.1.33","2.1.34","2.1.35","2.1.36","2.1.37","2.1.38","2.1.39","2.1.40","2.1.41","2.1.42","2.1.43","2.1.44","2.2.0","2.2.1","2.2.2","2.2.3","2.2.4","2.2.5","2.2.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3519296,"resolution":"1","location":"assets","locale":"","width":2000,"height":1100},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3519296,"resolution":"2","location":"assets","locale":"","width":2000,"height":1100},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3519296,"resolution":"3","location":"assets","locale":"","width":2000,"height":1100},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3519296,"resolution":"4","location":"assets","locale":"","width":2000,"height":1100},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3519296,"resolution":"5","location":"assets","locale":"","width":2000,"height":1100}},"screenshots":{"1":"Manage all your transactions in one place \u2014 view order details, statuses, and shipping info at a glance","2":"Handle shipments effortlessly \u2014 monitor delivery progress and track every package","3":"Schedule and manage pickups \u2014 request courier pickups with just a few clicks","4":"AWB generated automatically \u2014 no manual input, shipping labels ready to print instantly","5":"Simple configuration \u2014 connect your store, set your address, and start shipping in minutes"}},"plugin_section":[],"plugin_tags":[282,24151,3546,286],"plugin_category":[45],"plugin_contributors":[261511],"plugin_business_model":[],"class_list":["post-261263","plugin","type-plugin","status-publish","hentry","plugin_tags-ecommerce","plugin_tags-logistics","plugin_tags-shipping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-kiriminaja","plugin_committers-kiriminaja"],"banners":{"banner":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/banner-772x250.png?rev=3553132","banner_2x":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/banner-1544x500.png?rev=3553132","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/icon.svg?rev=3551898","icon":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/icon.svg?rev=3551898","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/screenshot-1.png?rev=3519296","caption":"Manage all your transactions in one place \u2014 view order details, statuses, and shipping info at a glance"},{"src":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/screenshot-2.png?rev=3519296","caption":"Handle shipments effortlessly \u2014 monitor delivery progress and track every package"},{"src":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/screenshot-3.png?rev=3519296","caption":"Schedule and manage pickups \u2014 request courier pickups with just a few clicks"},{"src":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/screenshot-4.png?rev=3519296","caption":"AWB generated automatically \u2014 no manual input, shipping labels ready to print instantly"},{"src":"https:\/\/ps.w.org\/kiriminaja-official\/assets\/screenshot-5.png?rev=3519296","caption":"Simple configuration \u2014 connect your store, set your address, and start shipping in minutes"}],"raw_content":"<!--section=description-->\n<p>KiriminAja helps WooCommerce store owners streamline shipping operations, reduce manual fulfillment work, and offer more flexible delivery options for customers across Indonesia. Built by PT Selalu Siap Solusi, KiriminAja supports COD and Non-COD shipping workflows so online businesses can manage deliveries, pickups, and tracking from one connected platform.<\/p>\n\n<p><strong>Key Business Benefits:<\/strong>\n- Offer customers more courier choices with real-time shipping rates directly at checkout.\n- Support COD (Cash On Delivery) orders with pickup handling and faster fund disbursement workflows.\n- Process Non-COD shipments more efficiently with courier pickup from your store location.\n- Reduce manual order fulfillment by creating shipments, tracking packages, and managing pickup requests from WooCommerce.\n- Improve operational visibility so store owners can control shipping activity, delivery status, and customer fulfillment more effectively.\n- Help online businesses scale their logistics process with integrated shipping tools designed for Indonesian eCommerce needs.<\/p>\n\n<p>This plugin is ideal for WooCommerce merchants who want a reliable shipping integration that improves checkout experience, simplifies fulfillment, and supports business growth.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to KiriminAja API services to provide shipping functionality for your WooCommerce store.<\/p>\n\n<p><strong>KiriminAja API<\/strong>\n- Service: https:\/\/client.kiriminaja.com\n- Purpose: Process shipping rates, create shipments, track packages, and manage pickup requests\n- Data sent: Shipping addresses, package dimensions and weight, order details, customer information\n- When: Every time shipping rates are calculated, when shipments are created, and when tracking packages\n- Terms of Service: https:\/\/kiriminaja.com\/syarat-ketentuan\n- Privacy Policy: https:\/\/kiriminaja.com\/privacy-policy<\/p>\n\n<p><strong>KiriminAja Callback (Webhook)<\/strong>\n- Endpoint (on your site): <code>\/?feed=kiriminaja-callback<\/code>\n- Purpose: Receive shipment\/pickup status updates from KiriminAja\n- Data received: Package status events including order IDs, AWB, and timestamps\n- Authentication: Requires an <code>Authorization<\/code> header; the token is validated against the API key configured in the plugin<\/p>\n\n<p><strong>Print.js Library<\/strong>\n- This plugin includes Print.js (https:\/\/github.com\/crabbly\/Print.js) for printing shipping labels\n- Source code: https:\/\/github.com\/crabbly\/Print.js\n- License: MIT<\/p>\n\n<p><strong>Select2 Library<\/strong>\n- This plugin includes Select2 (https:\/\/github.com\/select2\/select2) for searchable select fields\n- Source code: https:\/\/github.com\/select2\/select2\n- License: MIT<\/p>\n\n<p>By using this plugin, you acknowledge that your store will communicate with KiriminAja's servers to provide shipping services. Please review KiriminAja's terms of service and privacy policy before using this plugin.<\/p>\n\n<h3>Links<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/kiriminaja.com\/kontak-kami\">Support<\/a><\/li>\n<li><a href=\"https:\/\/developer.kiriminaja.com\">Developer<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Make sure WooCommerce is installed and activated.<\/li>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/kiriminaja-official<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Go to <a href=\"https:\/\/app.kiriminaja.com\/settings\/api-request\">app.kiriminaja.com\/settings\/api-request<\/a>, request integration with WordPress, and copy your Setup Key.<\/li>\n<li>Navigate to <code>KiriminAja &gt; Integration<\/code> and enter your Setup Key.<\/li>\n<li>Navigate to <code>KiriminAja &gt; Shipping<\/code>, fill in your store address, pin your location on the map, select your area, and save.<\/li>\n<li>Optionally, configure your courier whitelist under the Shipping tab to limit which couriers appear at checkout.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20set%20up%20the%20plugin%3F\"><h3>How do I set up the plugin?<\/h3><\/dt>\n<dd><ol>\n<li>Install and activate WooCommerce (required).<\/li>\n<li>Go to <strong>KiriminAja &gt; Integration<\/strong> and enter your Setup Key from your KiriminAja dashboard.<\/li>\n<li>Go to <strong>KiriminAja &gt; Shipping<\/strong> and fill in your store address, pin your location on the map, choose your area, and save.<\/li>\n<li>Optionally whitelist specific couriers under the Shipping tab.<\/li>\n<\/ol><\/dd>\n<dt id=\"where%20do%20i%20get%20a%20setup%20key%3F\"><h3>Where do I get a Setup Key?<\/h3><\/dt>\n<dd><p>Register or log in at <a href=\"https:\/\/kiriminaja.com\">kiriminaja.com<\/a>, then go to <a href=\"https:\/\/app.kiriminaja.com\/settings\/api-request\">app.kiriminaja.com\/settings\/api-request<\/a> and request integration with WordPress. Once approved, copy the Setup Key and paste it into the Integration tab inside the plugin.<\/p><\/dd>\n<dt id=\"which%20couriers%20are%20supported%3F\"><h3>Which couriers are supported?<\/h3><\/dt>\n<dd><p>KiriminAja connects to a wide range of Indonesian couriers \u2014 the available options depend on your KiriminAja account. Rates are fetched in real time during checkout, so customers always see up-to-date pricing.<\/p><\/dd>\n<dt id=\"can%20i%20limit%20which%20couriers%20appear%20at%20checkout%3F\"><h3>Can I limit which couriers appear at checkout?<\/h3><\/dt>\n<dd><p>Yes. In <strong>KiriminAja &gt; Shipping<\/strong>, use the <strong>Whitelist Expedition<\/strong> selector to choose only the couriers you want to offer.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20cod%20%28cash%20on%20delivery%29%3F\"><h3>Does the plugin support COD (Cash on Delivery)?<\/h3><\/dt>\n<dd><p>Yes. When a customer selects COD at checkout, only couriers that support COD are shown. COD orders have a minimum of Rp10,000 and a maximum of Rp3,000,000.<\/p><\/dd>\n<dt id=\"how%20do%20i%20request%20a%20package%20pickup%3F\"><h3>How do I request a package pickup?<\/h3><\/dt>\n<dd><p>Go to <strong>KiriminAja &gt; Request Pickup<\/strong> in your WordPress admin. Select the orders you want picked up, choose a pickup schedule, and confirm. The courier will collect the packages from your store address.<\/p><\/dd>\n<dt id=\"can%20i%20print%20shipping%20labels%20%28resi%29%3F\"><h3>Can I print shipping labels (resi)?<\/h3><\/dt>\n<dd><p>Yes. After a pickup is scheduled and an AWB is assigned, you can print shipping labels directly from the Shipping Process page in the plugin.<\/p><\/dd>\n<dt id=\"how%20does%20package%20tracking%20work%3F\"><h3>How does package tracking work?<\/h3><\/dt>\n<dd><p>Customers can track their orders through a tracking link that appears on the order confirmation page. KiriminAja also sends status updates back to your store via webhook, automatically updating order statuses.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20support%20international%20shipping%3F\"><h3>Does this plugin support international shipping?<\/h3><\/dt>\n<dd><p>No. Currently the plugin only supports domestic shipping within Indonesia.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20woocommerce%20hpos%20%28high-performance%20order%20storage%29%3F\"><h3>Is it compatible with WooCommerce HPOS (High-Performance Order Storage)?<\/h3><\/dt>\n<dd><p>Yes. The plugin fully supports WooCommerce HPOS \/ Custom Order Tables.<\/p><\/dd>\n<dt id=\"my%20shipping%20rates%20are%20not%20showing%20at%20checkout.%20what%20should%20i%20do%3F\"><h3>My shipping rates are not showing at checkout. What should I do?<\/h3><\/dt>\n<dd><p>Make sure you have completed the Shipping setup (store address and area). Also verify that your products have weight and dimensions set \u2014 both are required for rate calculation.<\/p><\/dd>\n<dt id=\"the%20plugin%20says%20%22woocommerce%20is%20not%20yet%20installed%20or%20activated%22.\"><h3>The plugin says \"WooCommerce is not yet installed or activated\".<\/h3><\/dt>\n<dd><p>This plugin requires WooCommerce. Install and activate WooCommerce first, then activate KiriminAja Official.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.2.6<\/h4>\n\n<ul>\n<li>Duplicated payment options section on classic woocommerce theme<\/li>\n<li>Avoid auto opening payment for cod pickups<\/li>\n<\/ul>\n\n<h4>2.2.5<\/h4>\n\n<ul>\n<li>Auto-register KiriminAja as a WooCommerce shipping option during plugin activation and surface the setup guide step.<\/li>\n<li>Add bulk resi print status flow (#235)<\/li>\n<li>Add bulk resi print status flow<\/li>\n<li>Sanitize value content<\/li>\n<\/ul>\n\n<h4>2.2.4<\/h4>\n\n<ul>\n<li>Fallback transaction process recipients to wc order<\/li>\n<li>Restore recipient fallbacks<\/li>\n<\/ul>\n\n<h4>2.2.3<\/h4>\n\n<ul>\n<li>Restore missing shipment info<\/li>\n<\/ul>\n\n<h4>2.2.2<\/h4>\n\n<ul>\n<li>\n<ul>\n<li>Add margin: 0 auto to center the card wrapper<\/li>\n<\/ul><\/li>\n<li>Transients kiriof_profile_cache and kiriof_profile_last_success_cache<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Use order items instead of analytics lookup for shippable check (#227)<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Expose shipping rate metadata to Store API<\/li>\n<li>Seamless integration of settings to woocommmerce plugin settings page<\/li>\n<li>Handle number that lead by zero<\/li>\n<li>Update coupon validation to allow optional shipping and courier requirements<\/li>\n<li>Add support for active coupon combination validation and update related tests<\/li>\n<li>Enhance virtual product handling in volumetric configuration and update related tests<\/li>\n<li>Skip weight and volumetric requirements for virtual products in shipping validation<\/li>\n<li>Add validation to prevent combining multiple shipping discount coupons<\/li>\n<li>Implement logistics session cleanup for virtual carts in checkout process<\/li>\n<li>Add shipment details display after order table in checkout process<\/li>\n<li>Enhance shipping method handling in block checkout and improve test coverage<\/li>\n<li>Handling COD Fee label<\/li>\n<li>Form billing not render select<\/li>\n<li>Enhance customer meta handling for shipping and billing addresses in checkout process<\/li>\n<li>Enhance district management by persisting selected district in customer meta and updating shipping rates on changes<\/li>\n<li>Implement block district management for shipping address in checkout process<\/li>\n<li>Enhance block checkout functionality to manage district validation and button behavior<\/li>\n<li>Implement structured logging across the plugin<\/li>\n<li>Feat(setup-guide): make step titles clickable links for improved navigation<\/li>\n<li>Feat(onboarding): reduce size of icons and simplify step navigation in setup guide<\/li>\n<li>Feat(onboarding): enhance setup guide design for improved user experience<\/li>\n<li>Ignore the lang generated binary<\/li>\n<li>Add discounted shipping display and update localization for shipping breakdown<\/li>\n<li>Add actual shipping display and update localization files<\/li>\n<li>Add shipping discount calculation and update fee name alias handling<\/li>\n<li>Discount cod deficit handler (#202)<\/li>\n<li>Feat(discount-coupon): courier restriction validation and auto-removal<\/li>\n<li>Feat(block-checkout): disable Place Order button when district not selected<\/li>\n<li>Feat(checkout): make phone field mandatory when plugin is active<\/li>\n<li>Feat(admin): use WooCommerce order preview for transactions<\/li>\n<li>Courier cache management, proper labels, and filter instant\/international<\/li>\n<li>Feat(coupon): improve combinations, individual use, and UI polish<\/li>\n<li>Feat(coupon-ui): redesign region picker with card grid layout<\/li>\n<li>Feat(coupon-ui): move Area Restrictions into a full-width metabox postbox<\/li>\n<li>Feat(coupon-ui): improve region scope radio buttons styling and visibility<\/li>\n<li>Feat(region-cache): bundle pre-fetched regions.json as offline fallback<\/li>\n<li>Show strikethrough shipping price in block checkout Order Summary<\/li>\n<li>Enhance shipping discount and rate metadata handling in checkout process<\/li>\n<li>Implement shipping discount management feature with AJAX support, including display in checkout and cart, session handling for saved districts, and enhanced error handling<\/li>\n<li>Implement shipping discount feature with display in cart and checkout, including calculations and metadata handling<\/li>\n<li>Enhance API integration by adding flexible base URL resolution, improving province and city retrieval methods, and updating error handling in region cache service<\/li>\n<li>Update API methods to use POST for province and city retrieval, enhance error handling in region cache service, and improve test coverage for AJAX error messages<\/li>\n<li>Enhance Shipping Discount Features and Error Handling<\/li>\n<li>Feat(coupon): add shipping coupon combinations UI<\/li>\n<li>Feat(coupon): apply shipping discount coupons to rates<\/li>\n<li>Feat(coupon): add shipping discount admin foundations<\/li>\n<li>Implement discount management feature with WooCommerce integration<\/li>\n<li>Fix(checkout): clear shipping sync timer<\/li>\n<li>Fix(checkout): delay block shipping discount sync<\/li>\n<li>Fix(checkout): prevent block postcode fallback<\/li>\n<li>Re-apply shipping strikethrough after React DOM re-render<\/li>\n<li>Use wp.data.useSelect for cart data in order meta fill<\/li>\n<li>Fallback to global summary when rate-specific discount unavailable<\/li>\n<li>Hide discount row when selected rate signature is unknown<\/li>\n<li>Hide original price when equal to current cost and add WP\/PHP version headers<\/li>\n<li>Update shipping discount when rate changes<\/li>\n<li>Show original price for all discounted rates<\/li>\n<li>Show original price in block shipping options<\/li>\n<li>Simplify shipping discount checkout integration<\/li>\n<li>Comply plugin check on warning notice<\/li>\n<li>Comply plugin check<\/li>\n<li>Postal code forced fallback<\/li>\n<li>Shipping discount not show on top member account. and handling shipping information on cart too<\/li>\n<li>Fix(checkout): relax Store API shipping coupon validation<\/li>\n<li>Fix(checkout): keep shipping coupons applied in Store API<\/li>\n<li>Product comibined with virtual can't use shipping discount<\/li>\n<li>Sync with development branch fixing<\/li>\n<li>Fix(i18n): add missing translators comment in _setup-guide.php<\/li>\n<li>Fix(i18n): add Bahasa translations for 19 courier name strings<\/li>\n<li>Fix(plugin-check): wrap courier name strings in __() for i18n<\/li>\n<li>Fix(shipping): stable sort with secondary name comparison<\/li>\n<li>Fix(shipping): courier name mapping and display formatting<\/li>\n<li>Plugin check fails<\/li>\n<li>Transaction process<\/li>\n<li>Fix(checkout): hide COD for virtual carts<\/li>\n<li>Update district handling in block checkout to prevent premature field updates and ensure proper order submission<\/li>\n<li>Preserve typed postcode in block checkout<\/li>\n<li>Sync block checkout district field before submit<\/li>\n<li>Adjust shipping rates control visibility for district warning display<\/li>\n<li>Clear shipping coupon notices when no shipping coupons exist<\/li>\n<li>Clear stale shipping coupon validation notices<\/li>\n<li>Classify shipping discount coupons by scope<\/li>\n<li>Read posted district during shipping coupon validation<\/li>\n<li>Fix(test): satisfy setup guide validation<\/li>\n<li>Fix(i18n): localize setup guide strings<\/li>\n<li>Fix(admin): compact KiriminAja setup guide<\/li>\n<li>Fix(pickup): use recipient name for destination<\/li>\n<li>Fix(pickup): omit zero-value discount fields<\/li>\n<li>Rename variables for consistency in COD adjustment modal and transaction process<\/li>\n<li>Fix(tracking): restore front page autofill and submit<\/li>\n<li>Update Makefile for environment-specific ZIP file handling and add .env.example<\/li>\n<li>Fix(pickup): sanitize origin and destination names<\/li>\n<li>Fix(pickup): use saved destination area name<\/li>\n<li>Adjust spacing in user capability checks and update test for order details method length<\/li>\n<li>Remove unnecessary class from discounted shipping row in metabox<\/li>\n<li>Add padding to dialog modal<\/li>\n<li>Shipping discount can't saved<\/li>\n<li>TrackOrder ReferenceError \u2014 output script tag directly from shortcode<\/li>\n<li>Tracking page autofill and button not working<\/li>\n<li>Use feed URL for callback registration instead of pretty permalink<\/li>\n<li>Plugin check errors \u2014 translators comment + install from clean build<\/li>\n<li>Fix(plugin-check): fix text domain mismatch and nonce warning in TransactionProcessController<\/li>\n<li>Fix(i18n): update Bahasa translations for changed\/new strings<\/li>\n<li>Fix(block-checkout): show district warning message when shipping options blocked<\/li>\n<li>Fix(block-checkout): block shipping options when postcode is cleared<\/li>\n<li>Fix(block-checkout): hide Shipment package card when district not selected<\/li>\n<li>Fix(block-checkout): use native WC styling for district required message<\/li>\n<li>Fix(block-checkout): show district warning below Shipping options heading<\/li>\n<li>Fix(block-checkout): fully hide shipping options section when no district selected<\/li>\n<li>Fix(block-checkout): suppress district warning on fresh non-logged-in load<\/li>\n<li>Fix(block-checkout): remove whitespace gap under Shipping options on first load<\/li>\n<li>Fix(block-checkout): eliminate shipping rate jank on initial page load<\/li>\n<li>Fix(block-checkout): restore district on page refresh for logged-in users<\/li>\n<li>Fix(i18n): add pickup modal translations<\/li>\n<li>Fix(admin): size Woo action modals inline<\/li>\n<li>Fix(cart): read shipping discount meta from session or rate<\/li>\n<li>Add translators comments to each sprintf\/__() branch<\/li>\n<li>Resolve WP Plugin Check warnings<\/li>\n<li>Address Copilot PR review feedback (#198)<\/li>\n<li>Fix(coupon-ui): force inline styles + version bump to bust CSS cache<\/li>\n<li>Fix(coupon-ui): tree hidden on init, 3-column province grid<\/li>\n<li>Fix(coupon-ui): use native radio inputs, hide tree in All Regions mode<\/li>\n<li>Fix(coupon-ui): replace radio inputs with button toggles, fix search disabled bug<\/li>\n<li>Fix(coupon-ui): stats show selected count, hidden in All Regions mode<\/li>\n<li>Fix(coupon-ui): replace :has() with JS-driven .is-active class for radio buttons<\/li>\n<li>Fix(region-cache): seed bundled data in enqueueCouponAdminAssets before localize_script<\/li>\n<li>Fix(region-cache): run migration before DB upsert to ensure tables exist<\/li>\n<li>Fix(region-cache): use background cron for region data refresh<\/li>\n<li>Update fee key checks and improve payment method session handling<\/li>\n<li>Read shipping discount from session rate meta, not WC_Shipping_Rate meta_data<\/li>\n<li>Persist district to postcode map on selection and restore<\/li>\n<li>Re-fetch shipping discount when selected rate changes<\/li>\n<li>Collapse shipping step whitespace when no district selected<\/li>\n<li>Use CSS body class for React-proof no-district state hiding<\/li>\n<li>Prevent infinite loop in block checkout district warning sync<\/li>\n<li>Hide shipping+payment sections and validate district for logged-in users<\/li>\n<li>Clear stale shipping rates from Order Summary when district not selected<\/li>\n<li>Remove shipping injection, fix district autoload &amp; unused vars<\/li>\n<\/ul>\n\n<h4>2.1.44<\/h4>\n\n<ul>\n<li>Fix(callback): register feed query callback URL<\/li>\n<\/ul>\n\n<h4>2.1.43<\/h4>\n\n<ul>\n<li>Fix(tracking): enqueue tracking page script<\/li>\n<\/ul>\n\n<h4>2.1.42<\/h4>\n\n<ul>\n<li>Handling process and shipping logic<\/li>\n<li>Persistent select courier issue<\/li>\n<li>Order summary not sync with selected courier extended<\/li>\n<li>Order summary not sync with selected courier<\/li>\n<li>Fix(checkout): trust WC-resolved shipping method in block checkout<\/li>\n<li>Fix(checkout): preserve selected block shipping method<\/li>\n<li>Fix(tracking): resolve shortcode lookup by shipment identifiers<\/li>\n<\/ul>\n\n<h4>2.1.41<\/h4>\n\n<ul>\n<li>Implement block district management for shipping address in checkout process<\/li>\n<li>Enhance block checkout functionality to manage district validation and button behavior<\/li>\n<li>Implement structured logging across the plugin<\/li>\n<li>Feat(setup-guide): make step titles clickable links for improved navigation<\/li>\n<li>Feat(onboarding): reduce size of icons and simplify step navigation in setup guide<\/li>\n<li>Feat(onboarding): enhance setup guide design for improved user experience<\/li>\n<li>Ignore the lang generated binary<\/li>\n<li>Add discounted shipping display and update localization for shipping breakdown<\/li>\n<li>Add actual shipping display and update localization files<\/li>\n<li>Add shipping discount calculation and update fee name alias handling<\/li>\n<li>Discount cod deficit handler (#202)<\/li>\n<li>Feat(discount-coupon): courier restriction validation and auto-removal<\/li>\n<li>Feat(block-checkout): disable Place Order button when district not selected<\/li>\n<li>Feat(checkout): make phone field mandatory when plugin is active<\/li>\n<li>Feat(admin): use WooCommerce order preview for transactions<\/li>\n<li>Courier cache management, proper labels, and filter instant\/international<\/li>\n<li>Feat(coupon): improve combinations, individual use, and UI polish<\/li>\n<li>Preserve typed postcode in block checkout<\/li>\n<li>Sync block checkout district field before submit<\/li>\n<li>Adjust shipping rates control visibility for district warning display<\/li>\n<li>Clear shipping coupon notices when no shipping coupons exist<\/li>\n<li>Clear stale shipping coupon validation notices<\/li>\n<li>Classify shipping discount coupons by scope<\/li>\n<li>Read posted district during shipping coupon validation<\/li>\n<li>Fix(test): satisfy setup guide validation<\/li>\n<li>Fix(i18n): localize setup guide strings<\/li>\n<li>Fix(admin): compact KiriminAja setup guide<\/li>\n<li>Fix(PickupRequest): origin_name and destination_name not sanitized, causing the pickup request failed (#205)<\/li>\n<li>Fix(pickup): use recipient name for destination<\/li>\n<li>Fix(pickup): omit zero-value discount fields<\/li>\n<li>Rename variables for consistency in COD adjustment modal and transaction process<\/li>\n<li>Fix(tracking): restore front page autofill and submit<\/li>\n<li>Update Makefile for environment-specific ZIP file handling and add .env.example<\/li>\n<li>Fix(pickup): sanitize origin and destination names<\/li>\n<li>Fix(pickup): use saved destination area name<\/li>\n<li>Adjust spacing in user capability checks and update test for order details method length<\/li>\n<li>Remove unnecessary class from discounted shipping row in metabox<\/li>\n<li>Add padding to dialog modal<\/li>\n<li>Shipping discount can't saved<\/li>\n<li>TrackOrder ReferenceError \u2014 output script tag directly from shortcode<\/li>\n<li>Tracking page autofill and button not working<\/li>\n<li>Use feed URL for callback registration instead of pretty permalink<\/li>\n<li>Plugin check errors \u2014 translators comment + install from clean build<\/li>\n<li>Fix(plugin-check): fix text domain mismatch and nonce warning in TransactionProcessController<\/li>\n<li>Fix(i18n): update Bahasa translations for changed\/new strings<\/li>\n<li>Fix(block-checkout): show district warning message when shipping options blocked<\/li>\n<li>Fix(block-checkout): block shipping options when postcode is cleared<\/li>\n<li>Fix(block-checkout): hide Shipment package card when district not selected<\/li>\n<li>Fix(block-checkout): use native WC styling for district required message<\/li>\n<li>Fix(block-checkout): show district warning below Shipping options heading<\/li>\n<li>Fix(block-checkout): fully hide shipping options section when no district selected<\/li>\n<li>Fix(block-checkout): suppress district warning on fresh non-logged-in load<\/li>\n<li>Fix(block-checkout): remove whitespace gap under Shipping options on first load<\/li>\n<li>Fix(block-checkout): eliminate shipping rate jank on initial page load<\/li>\n<li>Fix(block-checkout): restore district on page refresh for logged-in users<\/li>\n<li>Fix(i18n): add pickup modal translations<\/li>\n<li>Fix(admin): size Woo action modals inline<\/li>\n<li>Fix(cart): read shipping discount meta from session or rate<\/li>\n<li>Add translators comments to each sprintf\/__() branch<\/li>\n<li>Resolve WP Plugin Check warnings<\/li>\n<li>Address Copilot PR review feedback (#198)<\/li>\n<li>Feat(Onboarding): make the onboarding design more compact (#208)<\/li>\n<li>Fix(request-pickup): send discount percentage with discounts<\/li>\n<\/ul>\n\n<h4>2.1.40<\/h4>\n\n<ul>\n<li>Fix(PickupRequest): origin_name and destination_name not sanitized, causing the pickup request failed (#205)<\/li>\n<\/ul>\n\n<h4>2.1.39<\/h4>\n\n<ul>\n<li>Migrate plugin translations to WordPress i18n (#191)<\/li>\n<li>Transaction table UX overhaul \u2014 filters, pagination, search, &amp; status badges (#190)<\/li>\n<li>Address plugin check warnings for PHPCS and i18n (#195)<\/li>\n<li>Translate request pickup payment strings (#194)<\/li>\n<li>Localize settings page strings (#193)<\/li>\n<li>Translate admin menu labels (#192)<\/li>\n<\/ul>\n\n<h4>2.1.38<\/h4>\n\n<ul>\n<li>Fix(request-pickup): preserve auto-open payment trigger attributes (#180)<\/li>\n<li>Fix(request-pickup): auto-open payment via matching button (#179)<\/li>\n<\/ul>\n\n<h4>2.1.37<\/h4>\n\n<ul>\n<li>Fix(request-pickup): render payment QR reliably (#177)<\/li>\n<\/ul>\n\n<h4>2.1.36<\/h4>\n\n<ul>\n<li>Fix(request-pickup): keep payment modal open without detail handler (#176)<\/li>\n<\/ul>\n\n<h4>2.1.35<\/h4>\n\n<ul>\n<li>Fix(request-pickup): stabilize payment modal auto-open from query params<\/li>\n<\/ul>\n\n<h4>2.1.34<\/h4>\n\n<ul>\n<li>Fix(request-pickup): auto-open payment modal only with open_payment flag<\/li>\n<\/ul>\n\n<h4>2.1.33<\/h4>\n\n<ul>\n<li>Fix(request-pickup): disable auto-open payment modal via pickup_number<\/li>\n<li>Fix(request-pickup): redirect success flow to pickup list page<\/li>\n<\/ul>\n\n<h4>2.1.32<\/h4>\n\n<ul>\n<li>Fix(resi-print): preserve oids sanitization for non-numeric order ids<\/li>\n<li>Fix(request-pickup): restore scan-to-pay flow after pickup redirect<\/li>\n<li>Cache profile response during throttling<\/li>\n<\/ul>\n\n<h4>2.1.31<\/h4>\n\n<ul>\n<li>Enhance volumetric configuration checks for product variations<\/li>\n<\/ul>\n\n<h4>2.1.30<\/h4>\n\n<ul>\n<li>Remove inline styles from \"Complete Setup\" button<\/li>\n<li>Count private variations in volumetric setup<\/li>\n<\/ul>\n\n<h4>2.1.29<\/h4>\n\n<ul>\n<li>Enhance checkout process with force insurance handling and cache validation<\/li>\n<li>Persist chosen shipping methods in session during checkout updates and AJAX requests<\/li>\n<li>Update cancel shipment button text for clarity in transaction summary<\/li>\n<li>Enhance Store API checkout process with destination area handling and metadata persistence<\/li>\n<li>Implement volumetric calculations for cart items and update related services<\/li>\n<li>Implement product volumetric configuration tracking and UI updates<\/li>\n<li>Add WooCommerce Shipping Locations step to setup checklist and update related UI elements<\/li>\n<li>Exclude variable parents from volumetric readiness<\/li>\n<li>Make volumetric box calculation packable<\/li>\n<li>Update money formatting in OngkirPricingService and adjust script initialization in form-billing-address<\/li>\n<li>Set current gateway in custom checkout payment row<\/li>\n<li>Show shipping rates before payment selection<\/li>\n<li>Refresh block checkout shipping rates<\/li>\n<li>Show block checkout transactions correctly<\/li>\n<li>Refresh checkout fee context<\/li>\n<li>Enhance block checkout compatibility and styling<\/li>\n<li>Prevent classic checkout fee refresh loop<\/li>\n<li>Use native fees on classic checkout<\/li>\n<li>Restore classic checkout order total<\/li>\n<li>Support COD fees in block checkout<\/li>\n<li>Initialize block checkout compatibility on cart flows<\/li>\n<li>Harden block checkout COD fee detection<\/li>\n<li>Remove unnecessary paragraph tags around submit buttons in address and webhooks sections<\/li>\n<li>Normalize block checkout payment method<\/li>\n<li>Persist block checkout transaction context<\/li>\n<li>Match block district select markup<\/li>\n<li>Persist block checkout transactions after cart reset<\/li>\n<li>Isolate ShopVerse district select wrapper<\/li>\n<li>Fix block checkout order fee persistence<\/li>\n<li>Fix block checkout COD payment detection<\/li>\n<li>Fix block checkout district session bridge<\/li>\n<li>Add block checkout native fee path<\/li>\n<li>Find block district field after react render<\/li>\n<\/ul>\n\n<h4>2.1.28<\/h4>\n\n<ul>\n<li>Update description for shipping insurance feature<\/li>\n<li>Enhance SQL query in SetupMigration and improve variable naming in section-account<\/li>\n<li>Change district field type from select to text and update handling in JS<\/li>\n<li>Try to resolve district selector<\/li>\n<li>Implement insurance and COD fee calculations for checkout process<\/li>\n<li>Add insurance configurations options<\/li>\n<li>Guided setup information<\/li>\n<li>Add guide to setup tracking page<\/li>\n<li>Refactor design of settings<\/li>\n<li>Add Cash on Delivery configuration and management<\/li>\n<li>Keep block district select outside react field<\/li>\n<li>Trigger block district lookup from postcode input<\/li>\n<li>Avoid duplicate classic checkout fee rows<\/li>\n<li>Avoid duplicate district field on classic checkout<\/li>\n<li>Restore classic checkout fee display<\/li>\n<li>Allow dynamic district values in block checkout<\/li>\n<li>Support block checkout district and fees<\/li>\n<li>Update district field ID and enhance postcode change handling<\/li>\n<li>District wont rendered on custom woocommerce themes<\/li>\n<li>Cod fee, insurance, and district wont show on some custom themes<\/li>\n<li>Issues on shopverse like theme approach (react)<\/li>\n<li>Complete the force insurance configurations<\/li>\n<li>Cod fee calculations<\/li>\n<li>Miss-calculation on all package tabs<\/li>\n<li>Update icon URL for settings page in Admin class<\/li>\n<li>Update variable names for Cash on Delivery settings in origin setup<\/li>\n<li>Request not sanitized<\/li>\n<\/ul>\n\n<h4>2.1.27<\/h4>\n\n<ul>\n<li>Improve request handling after the hotfix on print awb<\/li>\n<\/ul>\n\n<h4>2.1.26<\/h4>\n\n<ul>\n<li>Handling on print resi still wont load<\/li>\n<\/ul>\n\n<h4>2.1.25<\/h4>\n\n<ul>\n<li>Persistent district from \/cart and \/checkout<\/li>\n<li>Add options to filter the transactions by \"All\"<\/li>\n<li>Add detail button to list table<\/li>\n<li>Remove unused templates<\/li>\n<li>Select2 registrations failed<\/li>\n<li>Select2 rendering issue glitch<\/li>\n<\/ul>\n\n<h4>2.1.24<\/h4>\n\n<ul>\n<li>Feat(modal): overlay and experience improvement<\/li>\n<li>Update footer content<\/li>\n<li>Native look admin plugins design<\/li>\n<li>Improve handling on 404 when printing awb<\/li>\n<li>Move request pickup detail to another page to prevent glitchy dialog pop-up<\/li>\n<li>Comply testing compliance<\/li>\n<li>Media modal issues<\/li>\n<li>Resolve PR review comments for URL construction<\/li>\n<li>Possibility direct callable via admin-post.php<\/li>\n<li>Html escape on print label name<\/li>\n<li>Dialog modal design glitch<\/li>\n<li>Single print button issues<\/li>\n<li>Admin permission access denied<\/li>\n<li>Typo on variable name<\/li>\n<\/ul>\n\n<h4>2.1.23<\/h4>\n\n<ul>\n<li>Retrigger code<\/li>\n<\/ul>\n\n<h4>2.1.22<\/h4>\n\n<ul>\n<li>Add premium styling for carrier list<\/li>\n<li>Add cancel shipment logic<\/li>\n<li>Cart input not rendered properly<\/li>\n<li>Handle race conditions on cancel by webhooks<\/li>\n<li>Navigation issues on redirecting<\/li>\n<\/ul>\n\n<h4>2.1.21<\/h4>\n\n<ul>\n<li>District area not loaded on checkout page<\/li>\n<li>Fix(transaction): transaction list not using HPOS format<\/li>\n<\/ul>\n\n<h4>2.1.20<\/h4>\n\n<ul>\n<li>Button styling to native<\/li>\n<\/ul>\n\n<h4>2.1.19<\/h4>\n\n<ul>\n<li>Button styling on 6.9.4<\/li>\n<li>Unable to search whitelist expeditions<\/li>\n<\/ul>\n\n<h4>2.1.18<\/h4>\n\n<ul>\n<li>Update transaction queries to include payments for processed order count<\/li>\n<li>Add processed order count and filter to transaction process view<\/li>\n<li>Add KiriminAja Shipping metabox to WooCommerce order edit screen<\/li>\n<li>Update permission checks to require only manage_woocommerce capability across controllers and templates<\/li>\n<li>Update permission checks to require both manage_options and manage_woocommerce capabilities across controllers and templates<\/li>\n<\/ul>\n\n<h4>2.1.17<\/h4>\n\n<ul>\n<li>Update plugin row meta links and modify plugin URI in header<\/li>\n<li>Add meta links for View Details, Support, and Developer in plugin row<\/li>\n<li>Takeout legacy plugins but with backward plugin update compatibility<\/li>\n<\/ul>\n\n<h4>2.1.16<\/h4>\n\n<ul>\n<li>Feat(readme): Update readme and content<\/li>\n<\/ul>\n\n<h4>2.1.15<\/h4>\n\n<ul>\n<li>First official release on WordPress.org<\/li>\n<li>Interactive map picker with geolocation for store address setup<\/li>\n<li>Nonce auto-refresh to keep long-open admin pages working<\/li>\n<li>Status filter counts for request pickup and transaction views<\/li>\n<li>Unpaid shipment count badge in admin menu<\/li>\n<li>Legacy shortcode alias and dedicated tracking stylesheet<\/li>\n<li>Improved order status handling to prevent pickup of non-processable orders<\/li>\n<li>Improved date formatting with time display for orders and transactions<\/li>\n<li>Full security audit and WordPress.org Plugin Directory compliance<\/li>\n<li>Bundled Select2 library locally (no CDN dependency)<\/li>\n<\/ul>","raw_excerpt":"Easily integrate with multiple couriers across Indonesia","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/261263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=261263"}],"author":[{"embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kiriminaja"}],"wp:attachment":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=261263"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=261263"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=261263"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=261263"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=261263"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=261263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}