{"id":335397,"date":"2026-07-23T07:28:17","date_gmt":"2026-07-23T07:28:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/riders-delivery-for-woocommerce\/"},"modified":"2026-07-23T07:27:51","modified_gmt":"2026-07-23T07:27:51","slug":"riders-delivery-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/riders-delivery-for-woocommerce\/","author":23534512,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.0.2","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"Riders Delivery for WooCommerce","header_author":"Riders","header_description":"Sync WooCommerce orders to Riders Kuwait delivery service.","assets_banners_color":"fbfafb","last_updated":"2026-07-23 07:27:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/tryriders.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":41,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"ridersdevelopers","date":"2026-07-23 07:27:51"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3619575,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3619575,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3619575,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3619575,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3619575,"resolution":"1","location":"assets","locale":"","width":722,"height":562},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3619575,"resolution":"2","location":"assets","locale":"","width":1917,"height":955},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3619575,"resolution":"3","location":"assets","locale":"","width":196,"height":832},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3619575,"resolution":"4","location":"assets","locale":"","width":1915,"height":952}},"screenshots":{"1":"Kuwait address widget at checkout with cascading dropdowns","2":"Riders Orders admin list page with sync status","3":"Per-order meta box with address editor and cascading dropdowns","4":"Riders Settings page"}},"plugin_section":[],"plugin_tags":[13827,130590,272926,3546,286],"plugin_category":[45],"plugin_contributors":[272927],"plugin_business_model":[],"class_list":["post-335397","plugin","type-plugin","status-publish","hentry","plugin_tags-delivery","plugin_tags-kuwait","plugin_tags-riders","plugin_tags-shipping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-alkady22","plugin_committers-ridersdevelopers"],"banners":{"banner":"https:\/\/ps.w.org\/riders-delivery-for-woocommerce\/assets\/banner-772x250.png?rev=3619575","banner_2x":"https:\/\/ps.w.org\/riders-delivery-for-woocommerce\/assets\/banner-1544x500.png?rev=3619575","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/riders-delivery-for-woocommerce\/assets\/icon-128x128.png?rev=3619575","icon_2x":"https:\/\/ps.w.org\/riders-delivery-for-woocommerce\/assets\/icon-256x256.png?rev=3619575","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/riders-delivery-for-woocommerce\/assets\/screenshot-1.png?rev=3619575","caption":"Kuwait address widget at checkout with cascading dropdowns"},{"src":"https:\/\/ps.w.org\/riders-delivery-for-woocommerce\/assets\/screenshot-2.png?rev=3619575","caption":"Riders Orders admin list page with sync status"},{"src":"https:\/\/ps.w.org\/riders-delivery-for-woocommerce\/assets\/screenshot-3.png?rev=3619575","caption":"Per-order meta box with address editor and cascading dropdowns"},{"src":"https:\/\/ps.w.org\/riders-delivery-for-woocommerce\/assets\/screenshot-4.png?rev=3619575","caption":"Riders Settings page"}],"raw_content":"<!--section=description-->\n<p><strong>Riders Delivery for WooCommerce<\/strong> connects your WooCommerce store to the <a href=\"https:\/\/tryriders.com\">Riders<\/a> Kuwait delivery platform. It handles the entire flow \u2014 from address capture at checkout all the way to order delivery and tracking.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Kuwait address widget<\/strong> at both classic and Blocks (Gutenberg) checkout: Governorate \u2192 Area \u2192 Block \u2192 Street \u2192 House cascading dropdowns<\/li>\n<li><strong>Civil ID \/ PACI lookup<\/strong> \u2014 customers can auto-fill their address from their Kuwaiti civil ID number<\/li>\n<li><strong>Automatic or manual order sync<\/strong> to Riders via Action Scheduler background jobs<\/li>\n<li><strong>Delivery status polling<\/strong> \u2014 order status updated every 5 minutes; or instantly via webhook push<\/li>\n<li><strong>Webhook support<\/strong> \u2014 receive real-time status updates from Riders (HMAC-verified)<\/li>\n<li><strong>Admin orders list<\/strong> \u2014 filter by sync status, retry failed orders individually or in bulk<\/li>\n<li><strong>Per-order meta box<\/strong> \u2014 view sync status, delivery fee, fleet number, and edit the Kuwait address with cascading dropdowns directly in the WooCommerce order<\/li>\n<li><strong>Tracking links<\/strong> \u2014 fleet tracking link appended to WooCommerce order completion emails<\/li>\n<li><strong>Proper WC_Shipping_Method<\/strong> \u2014 add Riders Delivery to any shipping zone with configurable flat rate and free-shipping threshold<\/li>\n<li><strong>WooCommerce REST API extension<\/strong> \u2014 <code>\/wc\/v3\/orders<\/code> responses include <code>ridedefo_sync_status<\/code>, <code>ridedefo_uid<\/code>, and <code>ridedefo_fleet_number<\/code><\/li>\n<li><strong>English and Arabic (RTL)<\/strong> support<\/li>\n<li><strong>HPOS compatible<\/strong> \u2014 High-Performance Order Storage declared and tested<\/li>\n<li><strong>Idempotent sync<\/strong> \u2014 duplicate delivery prevention with syncing-status guard<\/li>\n<li><strong>Transient-cached geo data<\/strong> \u2014 governorates\/areas\/blocks\/streets cached for 1 hour to reduce API calls<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WooCommerce 7.5 or higher<\/li>\n<li>PHP 8.0 or higher<\/li>\n<li>A <a href=\"https:\/\/tryriders.com\">Riders vendor account<\/a> with an API key<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the Riders delivery platform (https:\/\/tryriders.com) to sync WooCommerce orders and retrieve Kuwait address data.<\/p>\n\n<p>API endpoint: https:\/\/app-order.tryriders.com\/api\nAPI documentation: https:\/\/app-order.tryriders.com\/docs\/vendor\nVendor portal: https:\/\/vendor.tryriders.com<\/p>\n\n<p>Data sent to Riders:<\/p>\n\n<ul>\n<li>Order details (items, total, billing\/shipping address, customer phone) \u2014 when an order is synced<\/li>\n<li>Kuwait Civil ID number \u2014 only when a customer voluntarily uses the PACI lookup to auto-fill their address<\/li>\n<\/ul>\n\n<p>All requests are made over HTTPS. A Riders vendor account and API key are required.\nPlease review the Riders website (https:\/\/tryriders.com) for terms and privacy information before using this plugin.<\/p>\n\n<h3>Development<\/h3>\n\n<p>Source code: https:\/\/github.com\/Phoenix-H22\/riders-woocommerce-plugin<\/p>\n\n<p>The Blocks checkout script is built with @wordpress\/scripts.<\/p>\n\n<p>Source: assets\/checkout\/blocks\/src\/index.js\nCompiled output: assets\/checkout\/blocks\/build\/index.js<\/p>\n\n<p>The same source is also included in this plugin package under assets\/checkout\/blocks\/src\/.<\/p>\n\n<p>To rebuild from source:<\/p>\n\n<ol>\n<li>npm install<\/li>\n<li>npm run build<\/li>\n<\/ol>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Ensure WooCommerce is installed and active.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Riders<\/strong> and enter your Riders API key.<\/li>\n<li>Click <strong>Verify API Key<\/strong>, select your default branch, and configure sync options.<\/li>\n<li>(Optional) Enable <strong>Auto-configure Kuwait shipping zone<\/strong> under <strong>WooCommerce \u2192 Riders \u2192 Sync<\/strong> if you want Riders to create a starter Kuwait zone for you.<\/li>\n<li>(Optional) Add <strong>Riders Delivery<\/strong> as a shipping method in <strong>WooCommerce \u2192 Settings \u2192 Shipping \u2192 Zones<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20the%20woocommerce%20blocks%20checkout%3F\"><h3>Does this work with the WooCommerce Blocks checkout?<\/h3><\/dt>\n<dd><p>Yes. Both the classic shortcode-based checkout and the new Blocks (Gutenberg) checkout are fully supported.<\/p><\/dd>\n<dt id=\"is%20high-performance%20order%20storage%20%28hpos%29%20supported%3F\"><h3>Is High-Performance Order Storage (HPOS) supported?<\/h3><\/dt>\n<dd><p>Yes. The plugin declares compatibility and all order data access uses HPOS-safe WooCommerce APIs.<\/p><\/dd>\n<dt id=\"what%20phone%20number%20format%20does%20riders%20require%3F\"><h3>What phone number format does Riders require?<\/h3><\/dt>\n<dd><p>Kuwait mobile numbers in E.164 format, e.g. <code>+96550123456<\/code>. The plugin automatically normalises 8-digit local numbers, international prefix variants, and the 9-digit format with a leading zero (e.g. <code>050123456<\/code>).<\/p><\/dd>\n<dt id=\"how%20does%20the%20webhook%20work%3F\"><h3>How does the webhook work?<\/h3><\/dt>\n<dd><p>Register <code>https:\/\/your-store.com\/wp-json\/ridedefo\/v1\/webhook<\/code> as a webhook endpoint in your Riders vendor portal. The plugin verifies the HMAC-SHA256 signature on every request and updates the WooCommerce order status in real time.<\/p><\/dd>\n<dt id=\"can%20i%20use%20delivery%20notes%20templates%3F\"><h3>Can I use delivery notes templates?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>WooCommerce \u2192 Riders \u2192 Settings<\/strong> and set a default delivery notes template. You can use <code>{order_id}<\/code>, <code>{customer_name}<\/code>, and <code>{items}<\/code> as placeholders.<\/p><\/dd>\n<dt id=\"how%20do%20i%20retry%20failed%20syncs%3F\"><h3>How do I retry failed syncs?<\/h3><\/dt>\n<dd><p>Open <strong>WooCommerce \u2192 Riders Orders<\/strong>, click <strong>Retry All Failed<\/strong> to requeue all failed\/review-needed orders at once, or use the per-order <strong>Sync<\/strong> button.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Included Blocks checkout source (<code>assets\/checkout\/blocks\/src<\/code>) and build tooling in the plugin package.<\/li>\n<li>Documented public source repository and npm build steps in the readme.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed internal WordPress prefixes from <code>riders_*<\/code> to unique <code>ridedefo_*<\/code> (options, meta, hooks, REST, AJAX, table, shipping method).<\/li>\n<li>Added upgrade migration for options, custom table, order meta, Action Scheduler hooks, and shipping method instances.<\/li>\n<li>REST namespace is now <code>ridedefo\/v1<\/code> (webhook URL: <code>\/wp-json\/ridedefo\/v1\/webhook<\/code>).<\/li>\n<li>Civil ID \/ PACI lookup now requires a dedicated action nonce, same-origin check, checkout session, and a stricter rate limit.<\/li>\n<li>Removed bundled <code>.po<\/code>\/<code>.mo<\/code> translation files (translations via translate.wordpress.org after approval).<\/li>\n<li>Plugin slug and text domain <code>riders-delivery-for-woocommerce<\/code> are unchanged.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Moved settings page CSS\/JS to enqueued admin assets.<\/li>\n<li>Geo REST endpoints now require a valid wp_rest nonce (PACI lookup included).<\/li>\n<li>WooCommerce log directory resolved via wc_get_log_directory() \/ wp_upload_dir().<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with full Kuwait address widget, classic + Blocks checkout support, auto\/manual sync, PACI lookup, admin orders page, and per-order address editor.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added idempotency guard to prevent duplicate Riders deliveries on concurrent sync jobs.<\/li>\n<li>Fixed sync status overwrite on already-synced orders.<\/li>\n<li>Added country guard to classic checkout save \u2014 non-Kuwait orders no longer get Kuwait address meta.<\/li>\n<li>Fixed shipping-address formatter to respect \"ship to different address\" with non-KW shipping country.<\/li>\n<li>Fixed COD unpaid order logic in <code>onOrderProcessing<\/code>.<\/li>\n<li>Added DB migration on plugin update (no longer requires deactivate\/reactivate).<\/li>\n<li>Fixed Blocks checkout silent pass when extension data is null for Kuwait orders.<\/li>\n<li>Fixed <code>RiderOrder::updateOrCreate()<\/code> race condition on concurrent inserts.<\/li>\n<li>Added WooCommerce Subscriptions renewal guard \u2014 renewal orders skipped from auto-sync.<\/li>\n<li>Hooked <code>woocommerce_delete_order<\/code> \/ <code>woocommerce_trash_order<\/code> to clean up <code>ridedefo_orders<\/code> row.<\/li>\n<li>Deactivation now unschedules all pending sync jobs, not just polling.<\/li>\n<li><code>uninstall.php<\/code> now deletes all <code>_ridedefo_*<\/code> order meta from both classic and HPOS tables.<\/li>\n<li>Fixed <code>riders_is_cancellable<\/code> bool coercion bug (<code>\"0\"<\/code> was casting to <code>true<\/code>).<\/li>\n<li>Added <code>050xxxxxxx<\/code> (9-digit with leading zero) to Kuwait phone normalizer.<\/li>\n<li>Sanitized geo REST endpoint 502 error responses \u2014 raw API errors no longer exposed publicly.<\/li>\n<li><code>RidersApiClient<\/code> now throws on HTTP 2xx + non-JSON body instead of silently returning empty array.<\/li>\n<li>After saving address in the admin, sync is now auto-dispatched (no separate Retry Sync click needed).<\/li>\n<li>Added 1-hour transient caching to all geo endpoints; cache cleared on API key change.<\/li>\n<li><code>wc-shipped<\/code> custom status registered as <code>public =&gt; false<\/code> (not visible in front-end order queries).<\/li>\n<li>HTTP timeout now filterable via <code>ridedefo_api_timeout<\/code> filter.<\/li>\n<li>Added proper <code>WC_Shipping_Method<\/code> subclass (<code>ridedefo_delivery<\/code>) for use in WooCommerce Shipping Zones.<\/li>\n<li>Added Riders tracking link to WooCommerce order completion emails.<\/li>\n<li>Added real-time webhook endpoint (<code>POST \/ridedefo\/v1\/webhook<\/code>) with HMAC-SHA256 verification.<\/li>\n<li>Added delivery notes template variable substitution (<code>{order_id}<\/code>, <code>{customer_name}<\/code>, <code>{items}<\/code>).<\/li>\n<li>Extended <code>\/wc\/v3\/orders<\/code> REST API with <code>ridedefo_sync_status<\/code>, <code>ridedefo_uid<\/code>, <code>ridedefo_fleet_number<\/code>, <code>ridedefo_error<\/code>.<\/li>\n<li>Added <strong>Retry All Failed<\/strong> one-click button on the Riders Orders admin page.<\/li>\n<li><code>AddressValidator<\/code> now used as single validation entry point for both classic and Blocks checkout.<\/li>\n<li>Added checkout notice (not hard block) when block or house is missing from Kuwait address.<\/li>\n<\/ul>","raw_excerpt":"Sync WooCommerce orders to the Riders Kuwait same-day delivery platform with a full Kuwait address widget at checkout.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/335397","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=335397"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ridersdevelopers"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=335397"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=335397"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=335397"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=335397"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=335397"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=335397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}