{"id":306949,"date":"2026-05-12T11:25:32","date_gmt":"2026-05-12T11:25:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/orderkrab-for-woocommerce\/"},"modified":"2026-05-13T11:59:23","modified_gmt":"2026-05-13T11:59:23","slug":"orderkrab-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/am.wordpress.org\/plugins\/orderkrab-for-woocommerce\/","author":23409503,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.6","stable_tag":"1.2.6","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"OrderKrab for WooCommerce","header_author":"OrderKrab","header_description":"Thin integration between WooCommerce and OrderKrab for rates, fulfillment, and tracking sync.","assets_banners_color":"e4e4e4","last_updated":"2026-05-13 11:59:23","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/orderkrab.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":59,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.2":{"tag":"1.2.2","author":"orderkrab","date":"2026-05-12 11:26:15"},"1.2.3":{"tag":"1.2.3","author":"orderkrab","date":"2026-05-13 11:22:46"},"1.2.4":{"tag":"1.2.4","author":"orderkrab","date":"2026-05-13 11:32:53"},"1.2.6":{"tag":"1.2.6","author":"orderkrab","date":"2026-05-13 11:59:23"}},"upgrade_notice":{"1.2.4":"<p>Fixes a persistent &quot;Connect to OrderKrab&quot; failure that affected 1.2.2 and 1.2.3. Recommended for all users.<\/p>","1.2.3":"<p>Fixes a regression in 1.2.2 that caused &quot;Connect to OrderKrab&quot; to fail with &quot;WooCommerce REST helper unavailable&quot;. Recommended for all 1.2.2 users.<\/p>","1.2.2":"<p>Adds an uninstall handler that fully removes plugin data on deletion, plus a per-IP rate limit on the public locker-search endpoint and several escape-on-output security hardenings. No configuration changes required.<\/p>","1.2.1":"<p>WooCommerce is now declared as a required plugin via the <code>Requires Plugins<\/code> header; WordPress will block activation if WooCommerce is missing.<\/p>","1.2.0":"<p>First release on WordPress.org. Updates will be delivered through the WordPress plugin directory going forward; no separate updater is needed.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3529731,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3529731,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":501}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.2","1.2.3","1.2.4","1.2.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3529731,"resolution":"1","location":"assets","locale":"","width":1748,"height":1550},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3529731,"resolution":"2","location":"assets","locale":"","width":2900,"height":2480},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3529731,"resolution":"3","location":"assets","locale":"","width":1250,"height":1116},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3529731,"resolution":"4","location":"assets","locale":"","width":2320,"height":1282}},"screenshots":{"1":"The Connection tab \u2014 paste your OrderKrab access token and connect the store to the OrderKrab API.","2":"The Display tab \u2014 choose between the Native and Shopify-style shipping blocks and customize the styling. Includes a live preview.","3":"The Shopify-style shipping block at checkout \u2014 distance-based parcel locker options with carrier logos and selectable lockers.","4":"The Native shipping block at checkout \u2014 WooCommerce shipping methods with an inline parcel locker search field."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[13906,65950,262650,3546,286],"plugin_category":[45],"plugin_contributors":[262651],"plugin_business_model":[],"class_list":["post-306949","plugin","type-plugin","status-publish","hentry","plugin_tags-fulfillment","plugin_tags-order-sync","plugin_tags-parcel-locker","plugin_tags-shipping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-orderkrab","plugin_committers-orderkrab"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/orderkrab-for-woocommerce\/assets\/icon-256x256.png?rev=3529731","icon_2x":"https:\/\/ps.w.org\/orderkrab-for-woocommerce\/assets\/icon-256x256.png?rev=3529731","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/orderkrab-for-woocommerce\/assets\/screenshot-1.png?rev=3529731","caption":"The Connection tab \u2014 paste your OrderKrab access token and connect the store to the OrderKrab API."},{"src":"https:\/\/ps.w.org\/orderkrab-for-woocommerce\/assets\/screenshot-2.png?rev=3529731","caption":"The Display tab \u2014 choose between the Native and Shopify-style shipping blocks and customize the styling. Includes a live preview."},{"src":"https:\/\/ps.w.org\/orderkrab-for-woocommerce\/assets\/screenshot-3.png?rev=3529731","caption":"The Shopify-style shipping block at checkout \u2014 distance-based parcel locker options with carrier logos and selectable lockers."},{"src":"https:\/\/ps.w.org\/orderkrab-for-woocommerce\/assets\/screenshot-4.png?rev=3529731","caption":"The Native shipping block at checkout \u2014 WooCommerce shipping methods with an inline parcel locker search field."}],"raw_content":"<!--section=description-->\n<p>OrderKrab for WooCommerce is a thin integration between WooCommerce and the OrderKrab fulfillment platform. It lets a WooCommerce store offer carrier-driven shipping rates and parcel locker selection at checkout, then keeps order state in sync with OrderKrab as the order moves through fulfillment.<\/p>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Adds a shipping method that returns rates from the OrderKrab API, including parcel locker pricing per carrier.<\/li>\n<li>Renders a parcel locker search field at checkout (native or Shopify-style block).<\/li>\n<li>Syncs newly created and updated WooCommerce orders to OrderKrab.<\/li>\n<li>Provides an hourly batch reconciliation for any orders that didn't sync in real time.<\/li>\n<li>Receives webhooks from OrderKrab for order, product, and connection status updates.<\/li>\n<\/ul>\n\n<p><strong>Who it's for<\/strong><\/p>\n\n<p>Stores that already use (or plan to use) the OrderKrab fulfillment platform to manage shipping with carriers like DPD, LP Express, Omniva, InPost, FedEx, DHL, and others.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the OrderKrab API (<code>https:\/\/api.orderkrab.com<\/code>) \u2014 the configured base URL is shown in the plugin's Connection settings and can be overridden by store administrators.<\/p>\n\n<p><strong>What is sent and when:<\/strong><\/p>\n\n<ul>\n<li>When a customer reaches checkout, the plugin sends the shipping destination (country, postcode, city) and cart contents to OrderKrab to retrieve available shipping methods and prices.<\/li>\n<li>When a customer searches for a parcel locker, the plugin sends the search query plus destination country\/city to OrderKrab to retrieve matching locker locations.<\/li>\n<li>When an order is created or updated in WooCommerce, the plugin sends the order details (line items, shipping address, totals, selected shipping method) to OrderKrab so fulfillment can be coordinated.<\/li>\n<li>The plugin authenticates each request using an access token that the store administrator pastes into the plugin's Connection tab.<\/li>\n<\/ul>\n\n<p><strong>Why an external service is required:<\/strong> carrier rate calculation, parcel locker availability lookups, and label\/tracking generation depend on real-time data from carriers, which is aggregated by OrderKrab and cannot be performed locally by the plugin.<\/p>\n\n<p><strong>Provider links:<\/strong><\/p>\n\n<ul>\n<li>OrderKrab website: https:\/\/orderkrab.com<\/li>\n<li>Terms of Service: https:\/\/orderkrab.com\/terms<\/li>\n<li>Privacy Policy: https:\/\/orderkrab.com\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, or extract the folder into <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Make sure WooCommerce is installed and active (the plugin requires it).<\/li>\n<li>Go to <strong>OrderKrab \u2192 Connection<\/strong> in the WordPress admin, paste your OrderKrab access token, and click <strong>Connect to OrderKrab<\/strong>.<\/li>\n<li>Configure shipping methods and display options under <strong>OrderKrab \u2192 Display<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20orderkrab%20account%3F\"><h3>Do I need an OrderKrab account?<\/h3><\/dt>\n<dd><p>Yes. The plugin is a client for the OrderKrab fulfillment service; you'll need an account and an access token to use it.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20without%20woocommerce%3F\"><h3>Does the plugin work without WooCommerce?<\/h3><\/dt>\n<dd><p>No. WooCommerce is a hard requirement; the plugin will not bootstrap if WooCommerce isn't active.<\/p><\/dd>\n<dt id=\"what%20wordpress%20and%20php%20versions%20are%20supported%3F\"><h3>What WordPress and PHP versions are supported?<\/h3><\/dt>\n<dd><p>WordPress 6.0 or higher and PHP 7.4 or higher.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20help%3F\"><h3>Where can I get help?<\/h3><\/dt>\n<dd><p>Reach the OrderKrab team via https:\/\/orderkrab.com.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>The API Base URL field on the Connection tab is now read-only by default. The default production endpoint (https:\/\/api.orderkrab.com) is shown but cannot be edited through the normal UI, protecting store owners from accidentally pointing the plugin at a different host.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Added an orientation card and prominent \"Open OrderKrab admin\" button at the top of the Connection tab so store owners can reach the OrderKrab dashboard (admin.orderkrab.com) where fulfillment is actually managed.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Fixed: \"Connect to OrderKrab\" still failed in 1.2.3 because <code>wc_rest_generate_keys()<\/code> is not actually a public WooCommerce function in all installations. The plugin now falls back to inserting the WooCommerce REST API key row directly when WooCommerce's helper is unavailable, mirroring how WC's own admin UI generates keys internally.<\/li>\n<li>The fallback no longer introspects the WooCommerce API keys table with <code>SHOW COLUMNS<\/code> \u2014 it writes only the core columns and lets the database default any optional fields.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fixed: \"WooCommerce REST helper unavailable\" error when clicking <strong>Connect to OrderKrab<\/strong>. The plugin now loads <code>wc-rest-functions.php<\/code> on demand via WooCommerce's own <code>WC()-&gt;plugin_path()<\/code> getter (or <code>WC_ABSPATH<\/code> as a fallback). WooCommerce only auto-includes this file during REST API requests, not on every admin request, so a manual <code>require_once<\/code> is needed before calling <code>wc_rest_generate_keys()<\/code> from an admin context.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Removed code that filtered another plugin's admin notices, per WordPress.org Guideline 11.<\/li>\n<li>Added an <code>uninstall.php<\/code> handler that removes the integration user, the WooCommerce REST API key row, and all plugin options when the plugin is deleted.<\/li>\n<li>Added a per-IP transient rate limit to the public <code>\/orderkrab\/v1\/shipping-points<\/code> REST endpoint to protect against abuse of the merchant's upstream API.<\/li>\n<li>Replaced inline <code>file_get_contents()<\/code> SVG output in the parcel locker search with <code>&lt;img&gt;<\/code> tags pointing at the bundled asset URLs, in line with WordPress's escape-on-output rule.<\/li>\n<li>Wrapper, style, and method-id attributes in the parcel locker search are now built and escaped at the point of output rather than passed through pre-baked attribute strings.<\/li>\n<li>Removed the manual WooCommerce REST API key fallback (and its <code>SHOW COLUMNS<\/code> introspection queries). With WooCommerce now declared as a hard dependency, <code>wc_rest_generate_keys()<\/code> is always available.<\/li>\n<li>Removed the diagnostic <code>error_log()<\/code> call that ran when WooCommerce REST helpers were unavailable.<\/li>\n<li>Excluded screenshots from the production ZIP; they live in the WordPress.org <code>\/assets\/<\/code> SVN folder instead.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Declared WooCommerce as a formal plugin dependency via the <code>Requires Plugins<\/code> header.<\/li>\n<li>Removed an unreliable hardcoded fallback to <code>WP_PLUGIN_DIR . 'woocommerce\/'<\/code> when locating WooCommerce REST helper files; the plugin now relies on WooCommerce's own getters and <code>WC_ABSPATH<\/code> constant.<\/li>\n<li>Renamed the main plugin file to match the plugin slug (<code>orderkrab-for-woocommerce.php<\/code>).<\/li>\n<li>Excluded the development-only <code>wp-stubs.php<\/code> shim from the published build.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Activated the batch order sync (hourly reconciliation of pending\/on-hold\/processing orders).<\/li>\n<li>Refactored admin assets to use <code>wp_enqueue_style<\/code> \/ <code>wp_enqueue_script<\/code> \/ <code>wp_add_inline_style<\/code> \/ <code>wp_localize_script<\/code> instead of inline <code>&lt;style&gt;<\/code> and <code>&lt;script&gt;<\/code> blocks.<\/li>\n<li>Fixed: API access tokens are now preserved verbatim instead of being passed through <code>sanitize_text_field()<\/code>, which could silently corrupt valid tokens.<\/li>\n<li>Modernized <code>register_setting()<\/code> registration with explicit <code>type<\/code> and <code>sanitize_callback<\/code> keys.<\/li>\n<li>Removed the call to <code>load_plugin_textdomain()<\/code>. WordPress automatically loads translations for plugins hosted in the directory since WordPress 4.6.<\/li>\n<li>Added <code>defined( 'ABSPATH' )<\/code> guard to template files that execute code on inclusion.<\/li>\n<li>Removed the self-hosted plugin updater. Updates are now delivered through the WordPress.org plugin directory.<\/li>\n<li>Removed the <code>test-weight-logic.php<\/code> development test harness from the published plugin.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Previous internally distributed release.<\/li>\n<\/ul>","raw_excerpt":"Connect WooCommerce to the OrderKrab fulfillment platform: dynamic shipping rates, parcel locker selection, and two-way order sync.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/306949","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=306949"}],"author":[{"embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/orderkrab"}],"wp:attachment":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=306949"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=306949"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=306949"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=306949"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=306949"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=306949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}