{"id":389528,"date":"2026-10-25T15:04:22","date_gmt":"2026-10-25T15:04:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dgtl-labs-gls-shipping-for-woocommerce\/"},"modified":"2026-10-25T15:04:04","modified_gmt":"2026-10-25T15:04:04","slug":"dgtl-labs-shipping-with-gls-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/dgtl-labs-shipping-with-gls-for-woocommerce\/","author":23576901,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.9.0","stable_tag":"0.9.0","tested":"7.1.4","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"dgtl-labs Shipping with GLS for WooCommerce","header_author":"Daniel Persdorf","header_description":"GLS Shipping integration for WooCommerce with ParcelShop selection and tracking","assets_banners_color":"214989","last_updated":"2026-10-25 15:04:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/github.com\/danielpersdorf","rating":0,"author_block_rating":0,"active_installs":0,"downloads":74,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.9.0":{"tag":"0.9.0","author":"danielpersdorf","date":"2026-10-25 15:04:04","revision":3764793}},"upgrade_notice":{"0.7.3":"<p>Adds a Sandbox\/Live mode setting for the API endpoints. Existing sandbox settings keep working; no action needed unless you&#039;re switching to production.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3764792,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3764792,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3764792,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3764792,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.9.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3764792,"resolution":"1","location":"assets","locale":"","width":1300,"height":1000},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3764792,"resolution":"10","location":"assets","locale":"","width":1128,"height":1817},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3764792,"resolution":"11","location":"assets","locale":"","width":786,"height":371},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3764792,"resolution":"12","location":"assets","locale":"","width":280,"height":547},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3764792,"resolution":"13","location":"assets","locale":"","width":1100,"height":340},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3764792,"resolution":"2","location":"assets","locale":"","width":718,"height":281},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3764792,"resolution":"3","location":"assets","locale":"","width":718,"height":1094},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3764792,"resolution":"4","location":"assets","locale":"","width":718,"height":1136},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3764792,"resolution":"5","location":"assets","locale":"","width":1300,"height":1000},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3764792,"resolution":"6","location":"assets","locale":"","width":1300,"height":1000},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3764792,"resolution":"7","location":"assets","locale":"","width":718,"height":1136},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3764792,"resolution":"8","location":"assets","locale":"","width":400,"height":800},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3764792,"resolution":"9","location":"assets","locale":"","width":1300,"height":1000}},"screenshots":{"1":"Checkout with GLS shipping selected.","2":"Default: home delivery, with a button to choose a ParcelShop instead.","3":"ParcelShop search: map and the nearest shops.","4":"Placing an order in ParcelShop mode without a chosen shop.","5":"Full-screen ParcelShop picker.","6":"A shop chosen in the full-screen picker.","7":"Checkout with the chosen ParcelShop.","8":"Full-screen picker on a phone.","9":"Order confirmation naming the chosen ParcelShop.","10":"Settings: WooCommerce \u2192 Settings \u2192 GLS Shipping.","11":"Order screen with tracking number and label download.","12":"Order notes after creating a label.","13":"Order list with the GLS tracking column."}},"plugin_section":[],"plugin_tags":[3148,9084,47696,288479,3546],"plugin_category":[45],"plugin_contributors":[288480],"plugin_business_model":[],"class_list":["post-389528","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-germany","plugin_tags-gls","plugin_tags-parcelshop","plugin_tags-shipping","plugin_category-ecommerce","plugin_contributors-danielpersdorf","plugin_committers-danielpersdorf"],"banners":{"banner":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/banner-772x250.png?rev=3764792","banner_2x":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/banner-1544x500.png?rev=3764792","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/icon-128x128.png?rev=3764792","icon_2x":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/icon-256x256.png?rev=3764792","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-1.png?rev=3764792","caption":"Checkout with GLS shipping selected."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-2.png?rev=3764792","caption":"Default: home delivery, with a button to choose a ParcelShop instead."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-3.png?rev=3764792","caption":"ParcelShop search: map and the nearest shops."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-4.png?rev=3764792","caption":"Placing an order in ParcelShop mode without a chosen shop."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-5.png?rev=3764792","caption":"Full-screen ParcelShop picker."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-6.png?rev=3764792","caption":"A shop chosen in the full-screen picker."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-7.png?rev=3764792","caption":"Checkout with the chosen ParcelShop."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-8.png?rev=3764792","caption":"Full-screen picker on a phone."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-9.png?rev=3764792","caption":"Order confirmation naming the chosen ParcelShop."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-10.png?rev=3764792","caption":"Settings: WooCommerce \u2192 Settings \u2192 GLS Shipping."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-11.png?rev=3764792","caption":"Order screen with tracking number and label download."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-12.png?rev=3764792","caption":"Order notes after creating a label."},{"src":"https:\/\/ps.w.org\/dgtl-labs-shipping-with-gls-for-woocommerce\/assets\/screenshot-13.png?rev=3764792","caption":"Order list with the GLS tracking column."}],"raw_content":"<!--section=description-->\n<p>dgtl-labs Shipping with GLS for WooCommerce connects a WooCommerce store to shipping with GLS: customers choose at checkout between delivery to their address and delivery to a GLS ParcelShop, and the store creates GLS shipping labels directly from the order and checks shipment status.<\/p>\n\n<p><strong>Supported country: Germany.<\/strong> Built against GLS Germany's ShipIT-Farm API (not MyGLS, the API used by GLS' other national subsidiaries) \u2014 addresses, ParcelShop search, and translations are all for the German market.<\/p>\n\n<h4>At checkout<\/h4>\n\n<ul>\n<li>Works with the <strong>WooCommerce Cart and Checkout blocks<\/strong> (the default checkout since WooCommerce 8.3) \u2014 not the older shortcode checkout.<\/li>\n<li><strong>Home delivery is the default.<\/strong> A customer who wants a ParcelShop instead clicks a button to search; the search starts from the shipping address ZIP code and shows the nearest shops on a map (OpenStreetMap) and in a list, with a full-screen picker (works on phones too) for the complete result.<\/li>\n<li>Once a ParcelShop is chosen, the choice is required to place the order \u2014 a missing shop is rejected in the browser and again on the server.<\/li>\n<li>Changing the delivery ZIP code after choosing a shop drops the choice if it's no longer nearby, with a clear notice.<\/li>\n<li>The chosen ParcelShop (name and address) appears on the order confirmation, in the customer's account, and in order e-mails.<\/li>\n<\/ul>\n\n<h4>In the WordPress admin<\/h4>\n\n<ul>\n<li><strong>Create a GLS shipping label<\/strong> as an order action; the PDF is available for download from the order and from the order list.<\/li>\n<li><strong>Tracking number<\/strong> on the order, in the order list, and in customer order e-mails, linked to GLS tracking.<\/li>\n<li><strong>Check shipment status<\/strong> as an order action.<\/li>\n<li><strong>Package weight<\/strong> is calculated from the order's line items; if an item has no weight, a configurable default package weight is used, or label creation stops with a clear message listing the items that need a weight \u2014 the plugin never reports a lower weight than the shipment actually has.<\/li>\n<li><strong>FlexDeliveryService<\/strong> (GLS notifies the customer by e-mail before home delivery, with the option to reschedule or redirect) as an opt-in setting for home deliveries \u2014 only enable it if the service is booked in your GLS contract.<\/li>\n<li><strong>Sandbox and live mode<\/strong>, switched with one setting; both sets of API endpoints stay saved so switching back and forth never means re-entering credentials.<\/li>\n<li><strong>Test connection<\/strong> button that checks login and reachability against your saved settings and shows a clear result, instead of a silent failure.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.4+ and WooCommerce 8.3+ with the block checkout (the WooCommerce default since 8.3). High-Performance Order Storage (HPOS) is supported.<\/li>\n<li>A GLS business shipping contract with access to the GLS ShipIT-Farm API. The FAQ explains how to request API credentials.<\/li>\n<li>Compatible with WooCommerce Germanized.<\/li>\n<\/ul>\n\n<h4>Known limitations (current version)<\/h4>\n\n<ul>\n<li>Only the WooCommerce block checkout is supported, not the older shortcode checkout.<\/li>\n<li>Cancelling a shipment from the admin isn't available yet.<\/li>\n<li>Built and tested for the German market (addresses, ParcelShops, translation).<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to two external services to work:<\/p>\n\n<p><strong>GLS ShipIT-Farm API<\/strong> \u2014 used to search ParcelShops during checkout (the delivery ZIP code and country), and, when you use an order action, to create a shipping label (delivery address, e-mail address and phone number) or check shipment status (the tracking number). Both the checkout search and the order actions are actions you or your customer explicitly take; nothing is sent in the background. Requests go to the GLS sandbox by default, or to GLS' live API once you switch to live mode and enter your production endpoints (see Installation).\nTerms of service: https:\/\/www.gls-pakete.de\/agb-standard \u2014 Privacy policy: https:\/\/www.gls-pakete.de\/datenschutzerklaerung (GLS Group's own privacy page redirects here too, so it's the same document; both confirmed correct by GLS, 2026-10-02)<\/p>\n\n<p><strong>OpenStreetMap tiles<\/strong> \u2014 the ParcelShop map on the checkout page loads its map tiles directly in the customer's browser from OpenStreetMap (<code>tile.openstreetmap.org<\/code>), which sees the customer's IP address. This only happens while a customer has the ParcelShop search open.\n<a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap Copyright and License<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New<\/strong> and search for \"dgtl-labs Shipping with GLS for WooCommerce\", or upload the plugin ZIP under <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin. WooCommerce must be active \u2014 the plugin shows a notice and stays inactive otherwise.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Settings \u2192 GLS Shipping<\/strong> and enter your GLS API credentials (see the FAQ for how to request them). The settings are pre-filled with the GLS sandbox endpoints so you can try the plugin before you have production credentials.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Settings \u2192 Shipping<\/strong>, open a shipping zone, and add the \"GLS Shipping\" shipping method with a title and cost.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20get%20gls%20api%20credentials%3F\"><h3>How do I get GLS API credentials?<\/h3><\/dt>\n<dd><p>You need a GLS business shipping contract with access to the ShipIT-Farm API:<\/p>\n\n<ol>\n<li>Register at the <a href=\"https:\/\/dev-portal.gls-group.eu\/\">GLS Developer Portal<\/a> with a team e-mail address.<\/li>\n<li>Create a new app there.<\/li>\n<li>Activate the <strong>Authentication API v2<\/strong> and <strong>ShipIT-Farm API v1<\/strong> APIs for that app.<\/li>\n<li>Contact GLS IT support (it-kundensupport@gls-germany.com) with your team e-mail address, app ID, GLS Contact ID, shipping system (\"WooCommerce with this plugin\"), and the APIs you activated.<\/li>\n<li>Once approved, GLS provides your Client ID and Client Secret for production, your Contact ID, and both live API endpoints.<\/li>\n<\/ol><\/dd>\n<dt id=\"can%20i%20try%20the%20plugin%20without%20a%20gls%20contract%20yet%3F\"><h3>Can I try the plugin without a GLS contract yet?<\/h3><\/dt>\n<dd><p>Partially. The settings page defaults to sandbox mode and comes pre-filled with GLS's sandbox endpoint URLs, so you don't need to look those up yourself \u2014 but a Client ID and Client Secret from GLS are still required before ParcelShop search, label creation or the connection test will work; there's no credential-free test mode. GLS has granted sandbox access to developers without an existing shipping contract on request before \u2014 contact GLS (see \"How do I get GLS API credentials?\" above) and ask specifically about sandbox\/technology-partner access.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20the%20classic%20%28shortcode%29%20checkout%3F\"><h3>Does this work with the classic (shortcode) checkout?<\/h3><\/dt>\n<dd><p>No, only the WooCommerce Cart and Checkout blocks are supported.<\/p><\/dd>\n<dt id=\"why%20wasn%27t%20a%20label%20created%20for%20my%20order%3F\"><h3>Why wasn't a label created for my order?<\/h3><\/dt>\n<dd><p>The order notes and the \"Create GLS shipping label\" action show the reason \u2014 usually a missing item weight (set a product weight or a default package weight in the settings), missing API credentials, or GLS rejecting the shipment (the exact message from GLS is shown; check the address and, for optional services like FlexDelivery, whether it's booked in your GLS contract).<\/p><\/dd>\n<dt id=\"what%20data%20is%20shared%20with%20third%20parties%3F\"><h3>What data is shared with third parties?<\/h3><\/dt>\n<dd><p>The checkout map tiles are loaded from OpenStreetMap in the customer's browser, which sees the customer's IP address \u2014 this belongs in your store's privacy policy. The ParcelShop search itself runs through your server; only the ZIP code and country are sent to GLS. Creating a label sends the customer's delivery address, e-mail address and phone number to GLS, as with any shipping carrier.<\/p><\/dd>\n<dt id=\"why%20does%20%2Fbuild%20contain%20both%20index.js%20and%20index.unminified.js%3F\"><h3>Why does \/build contain both index.js and index.unminified.js?<\/h3><\/dt>\n<dd><p>index.js is the minified file actually loaded in the browser. <code>index.unminified.js<\/code> is the same code, readable, included alongside it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Renamed the plugin to \"dgtl-labs Shipping with GLS for WooCommerce\" (was \"dgtl-labs GLS Shipping for WooCommerce\") following a WordPress.org review note about name similarity to an existing plugin.<\/li>\n<\/ul>\n\n<h4>0.7.3<\/h4>\n\n<ul>\n<li>Added an explicit Sandbox\/Live mode setting. Both sets of endpoints (API and OAuth token, sandbox and live) stay saved regardless of the active mode, so switching no longer means re-entering values.<\/li>\n<li>Selecting live mode before the live endpoints are filled in now shows a clear configuration message instead of failing silently.<\/li>\n<\/ul>\n\n<h4>0.7.2<\/h4>\n\n<ul>\n<li>Added a \"Test connection\" button on the settings page that checks login and reachability against the saved settings.<\/li>\n<li>Fixed a cached-token bug where rotating only the client secret could keep using a token fetched under the old secret for up to 4 hours.<\/li>\n<\/ul>\n\n<h4>0.7.1<\/h4>\n\n<ul>\n<li>The sender address on labels is now always resolved from your GLS Contact ID, GLS' recommended production path, instead of being overridden per shipment.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Internal refactor for the WordPress.org release; no functional or user-facing change.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Renamed the plugin to \"dgtl-labs GLS Shipping for WooCommerce\".<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Fixed: the sender address from the settings was never actually sent to GLS.<\/li>\n<li>Declared compatibility with High-Performance Order Storage (HPOS) and the Cart\/Checkout blocks.<\/li>\n<li>Renamed the \"Shipper ID\" setting to \"Contact ID\", GLS' own name for the value.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Added a full German translation.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Added a full-screen ParcelShop picker with a large map, and a \"Show all\" option beyond the five nearest results.<\/li>\n<li>The checkout now keeps the chosen delivery mode and ParcelShop in the session as the single source of truth.<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>Added a configurable default package weight, used when an order item has no weight.<\/li>\n<li>Fixed: shipments never carried a parcel weight, so GLS rejected every real shipment.<\/li>\n<li>The chosen ParcelShop is now shown on the order confirmation, in My Account, and in order e-mails.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Fixed several checkout display issues found in the first browser test of the ParcelShop map (broken marker icons, no visible selection feedback).<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added a label PDF download link on the order screen and order list.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Fixed label creation, which failed against the live GLS sandbox due to a missing required field.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Fixed: the customer e-mail field name didn't match what GLS actually expects, so every label request failed.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added GLS FlexDeliveryService as an opt-in setting.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fixed: the chosen ParcelShop wasn't actually sent to GLS, so parcel-shop orders went to the customer's home address instead.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial development version: GLS API client, label generation, tracking, ParcelShop selector, Germanized integration.<\/li>\n<\/ul>","raw_excerpt":"GLS shipping for WooCommerce: ParcelShop selection in the block checkout, label creation from the order, and shipment tracking.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/389528","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=389528"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/danielpersdorf"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=389528"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=389528"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=389528"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=389528"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=389528"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=389528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}