{"id":334561,"date":"2026-08-03T11:40:18","date_gmt":"2026-08-03T11:40:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/onlinefotka-gls-shipping-for-woocommerce\/"},"modified":"2026-08-10T10:08:41","modified_gmt":"2026-08-10T10:08:41","slug":"onlinefotka-parcel-shipping-gls","status":"publish","type":"plugin","link":"https:\/\/ca.wordpress.org\/plugins\/onlinefotka-parcel-shipping-gls\/","author":23503486,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.3","stable_tag":"1.1.3","tested":"7.0.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Onlinefotka Parcel Shipping with GLS for WooCommerce","header_author":"Onlinefotka","header_description":"Parcel shipping integration with GLS for WooCommerce \u2014 generate labels, track parcels, and offer Parcel Shop & Parcel Locker delivery at checkout.","assets_banners_color":"003781","last_updated":"2026-08-10 10:08:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/onlinefotka.sk","rating":0,"author_block_rating":0,"active_installs":0,"downloads":243,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.5":{"tag":"1.0.5","author":"onlinefotka","date":"2026-08-03 11:39:43"},"1.0.6":{"tag":"1.0.6","author":"onlinefotka","date":"2026-08-04 18:15:36"},"1.0.7":{"tag":"1.0.7","author":"onlinefotka","date":"2026-08-05 08:10:40"},"1.0.8":{"tag":"1.0.8","author":"onlinefotka","date":"2026-08-05 22:33:39"},"1.1.1":{"tag":"1.1.1","author":"onlinefotka","date":"2026-08-06 06:46:05"},"1.1.2":{"tag":"1.1.2","author":"onlinefotka","date":"2026-08-06 08:57:40"},"1.1.3":{"tag":"1.1.3","author":"onlinefotka","date":"2026-08-10 10:08:41"}},"upgrade_notice":{"1.1.3":"<p>Fixes empty &quot;Resend Tracking Email&quot; dropdown and adds new <code>[gls_tracking_link]<\/code> shortcode for email templates. Use <code>[gls_tracking_link]<\/code> in YayMail or WooCommerce email &quot;Additional content&quot; instead of <code>[gls_tracking]<\/code>. No breaking changes.<\/p>","1.1.2":"<p>Translation fixes for Automation tab (SK\/CS\/DE\/HU\/PL). Estimated delivery times are now editable per country in Other settings. No breaking changes.<\/p>","1.1.1":"<p>Bug fixes: corrected GLS status code map (codes 13 and 20 are problem codes, not delivery); split automation into two independent crons with separate configurable intervals. <strong>Action required:<\/strong> if you previously had a status mapping rule for code 20 \u2192 Completed, change it to code 5 \u2192 Completed in WooCommerce \u2192 GLS Shipping \u2192 Automation.<\/p>","1.1.0":"<p>New features: return label generation + email, resend tracking email, orders list GLS status filter, estimated delivery at checkout, admin dashboard stats widget, label file auto-cleanup, and WP-CLI commands. No breaking changes \u2014 safe to update.<\/p>","1.0.1":"<p>Code compliance update for WordPress.org directory requirements.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3632811,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3632811,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3632811,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3632811,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.5","1.0.6","1.0.7","1.0.8","1.1.1","1.1.2","1.1.3"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"GLS Shipping Settings \u2014 API &amp; Account tab with mode selector, country, client number and API credentials","2":"Label tab \u2014 printer type, default print position, client reference format and parcel content","3":"Services tab \u2014 advanced GLS services including CS1, FDS, FSS, SM1, AOS, and Insurance","4":"Automation tab \u2014 auto-label generation on status change, live tracking sync, and status mapping rules","5":"Order admin panel \u2014 GLS meta box with tracking numbers, label buttons, and pickup location","6":"Checkout \u2014 Parcel Shop location picker with interactive map"}},"plugin_section":[262246],"plugin_tags":[47696,3807,12855,3546,286],"plugin_category":[45],"plugin_contributors":[263926],"plugin_business_model":[],"class_list":["post-334561","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-gls","plugin_tags-label","plugin_tags-parcel","plugin_tags-shipping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-onlinefotka","plugin_committers-onlinefotka"],"banners":{"banner":"https:\/\/ps.w.org\/onlinefotka-parcel-shipping-gls\/assets\/banner-772x250.png?rev=3632811","banner_2x":"https:\/\/ps.w.org\/onlinefotka-parcel-shipping-gls\/assets\/banner-1544x500.png?rev=3632811","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/onlinefotka-parcel-shipping-gls\/assets\/icon-128x128.png?rev=3632811","icon_2x":"https:\/\/ps.w.org\/onlinefotka-parcel-shipping-gls\/assets\/icon-256x256.png?rev=3632811","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Onlinefotka Parcel Shipping with GLS<\/strong> is a full-featured GLS carrier integration for WooCommerce. Connect your GLS account, generate shipping labels directly from the order screen, send return labels to customers, and give customers the option to pick up their parcels at a GLS Parcel Shop or Parcel Locker.<\/p>\n\n<p>Built with full HPOS (High Performance Order Storage) and WooCommerce Checkout Blocks compatibility, plus a clean modern settings interface.<\/p>\n\n<h3>Shipping Methods<\/h3>\n\n<ul>\n<li><strong>GLS Standard<\/strong> \u2014 home delivery, weight-based pricing, free shipping threshold<\/li>\n<li><strong>GLS Parcel Shop<\/strong> \u2014 customer selects a pickup point from an interactive map at checkout<\/li>\n<li><strong>GLS Parcel Locker<\/strong> \u2014 customer selects a 24\/7 automated locker at checkout<\/li>\n<li>Per-method: enable\/disable, custom title, default price, weight-based rates, free shipping above, supported countries<\/li>\n<li><strong>Estimated delivery time<\/strong> \u2014 optional display of business-day ranges per destination country shown at checkout below the shipping rate (SK\/CZ 1\u20132 days, HU\/HR\/SI 2\u20133 days, etc.)<\/li>\n<\/ul>\n\n<h3>Label Management<\/h3>\n\n<ul>\n<li>Generate GLS shipping labels directly from the WooCommerce order screen<\/li>\n<li><strong>Return labels<\/strong> \u2014 generate a GLS return label (customer \u2192 store) with one click; the label PDF is automatically emailed to the customer<\/li>\n<li>Print individual or bulk labels (PDF)<\/li>\n<li>A4 and thermal printer support with configurable print position<\/li>\n<li>Customizable client reference and parcel content fields<\/li>\n<li>Delete labels (also cancels the parcel in GLS system when possible)<\/li>\n<li><strong>Automatic label file cleanup<\/strong> \u2014 daily WP-Cron job deletes PDF files older than a configurable number of days (default 90) to free up server space<\/li>\n<\/ul>\n\n<h3>Advanced GLS Services<\/h3>\n\n<ul>\n<li><strong>Contact Service (CS1)<\/strong> \u2014 sends customer phone number to the courier<\/li>\n<li><strong>Flexible Delivery Email (FDS)<\/strong> \u2014 customer can reschedule via email link<\/li>\n<li><strong>Flexible Delivery SMS (FSS)<\/strong> \u2014 reschedule via SMS<\/li>\n<li><strong>SMS Service (SM1)<\/strong> \u2014 tracking number sent by SMS with custom text<\/li>\n<li><strong>SMS Pre-advice (SM2)<\/strong> \u2014 pre-delivery SMS notification<\/li>\n<li><strong>Addressee Only (AOS)<\/strong> \u2014 parcel delivered only to the named recipient<\/li>\n<li><strong>Insurance (INS)<\/strong> \u2014 insures parcel for the full order value<\/li>\n<li><strong>24H Guaranteed \/ Express<\/strong> \u2014 expedited delivery options<\/li>\n<\/ul>\n\n<h3>Automation<\/h3>\n\n<ul>\n<li><strong>Auto-generate GLS label<\/strong> when order moves to selected WooCommerce status<\/li>\n<li><strong>Live Tracking Sync<\/strong> via WP-Cron \u2014 periodically fetches GLS parcel status from the API and saves it to each order (status badge, order notes, customer delivery email); runs only for orders with an existing GLS label; configurable interval (every 30 min, 1 h, 2 h, 4 h, twice daily, or daily)<\/li>\n<li><strong>Auto WC Status Change<\/strong> \u2014 a separate, independent WP-Cron job that reads the last saved GLS status and automatically changes the WooCommerce order status according to configurable mapping rules (by GLS code or keyword); runs on its own schedule without making any GLS API calls<\/li>\n<li><strong>Status mapping rules<\/strong> \u2014 define which GLS status code or text keyword triggers a WooCommerce order status change (e.g. GLS code 5 \u2192 Completed); rules are applied by the Auto WC Status Change cron<\/li>\n<li><strong>Complete GLS status code map<\/strong> \u2014 all 90 status codes from the official MyGLS API documentation (Appendix G, ver. 25.12.11) with accurate labels for all supported countries (SK, CZ, HU, HR, RO, SI, PL, DE)<\/li>\n<\/ul>\n\n<h3>Tracking<\/h3>\n\n<ul>\n<li>Tracking numbers injected automatically into all WooCommerce order emails<\/li>\n<li><strong>Resend tracking email<\/strong> \u2014 button in the order admin panel to resend a configurable WooCommerce email to the customer; the email type is selected in plugin settings (Automation tab) and can be any registered WooCommerce email<\/li>\n<li>Self-service tracking page via <code>[gls_tracking]<\/code> shortcode \u2014 customers look up their parcel using order number + billing email<\/li>\n<li><code>[gls_tracking_link]<\/code> shortcode for use in email templates (e.g. YayMail text blocks) \u2014 outputs a clickable GLS tracking link for the order being emailed; use this in email bodies instead of <code>[gls_tracking]<\/code><\/li>\n<li>GLS tracking status visible in <strong>My Account \u2192 Orders<\/strong> \u2014 tracking numbers shown in the orders list and on the order detail page<\/li>\n<li>Manual <strong>Refresh Tracking<\/strong> button in the order admin panel \u2014 shows the full event history (date, city, status) for all parcels<\/li>\n<li><strong>Tracking status filter<\/strong> in the admin orders list \u2014 filter orders by GLS status: In Transit, Delivered, Problem, or No GLS Label<\/li>\n<li><strong>Customer delivery email<\/strong> \u2014 optional WooCommerce email sent when GLS tracking confirms delivery; customizable in WooCommerce \u2192 Settings \u2192 Emails<\/li>\n<li>GLS status badge in admin orders list \u2014 latest status displayed as a colored badge (green = delivered, blue = in transit, red = problem)<\/li>\n<li>Bulk action <strong>Refresh GLS Tracking<\/strong> \u2014 sync tracking for multiple orders at once from the orders list<\/li>\n<\/ul>\n\n<h3>Emails<\/h3>\n\n<p>Two additional WooCommerce emails are registered by the plugin (configurable in <strong>WooCommerce \u2192 Settings \u2192 Emails<\/strong>):<\/p>\n\n<ul>\n<li><strong>GLS Delivered<\/strong> \u2014 sent to the customer when GLS tracking confirms delivery (status codes 5, 54, 55, 58, 92, 93)<\/li>\n<li><strong>GLS Return Label<\/strong> \u2014 sent to the customer when a return label is generated; the PDF is attached automatically<\/li>\n<\/ul>\n\n<h3>Admin Dashboard Widget<\/h3>\n\n<p>A dashboard widget on the WordPress admin home screen shows monthly GLS shipping statistics at a glance:<\/p>\n\n<ul>\n<li>Total labels generated this month<\/li>\n<li>Delivered parcels<\/li>\n<li>In-transit parcels<\/li>\n<li>Problem parcels (delivery failed, returned, etc.)<\/li>\n<\/ul>\n\n<h3>WP-CLI Support<\/h3>\n\n<p>Manage GLS labels and tracking directly from the command line:<\/p>\n\n<ul>\n<li><code>wp gls generate --order=&lt;id&gt;<\/code> \u2014 generate a label for an order<\/li>\n<li><code>wp gls sync [--order=&lt;id&gt;]<\/code> \u2014 sync GLS tracking status (all active orders or a specific one)<\/li>\n<li><code>wp gls status --order=&lt;id&gt;<\/code> \u2014 display full tracking event history for an order<\/li>\n<li><code>wp gls cleanup [--days=&lt;n&gt;]<\/code> \u2014 manually delete old label PDF files<\/li>\n<\/ul>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 6.0 or higher<\/li>\n<li>WooCommerce 7.0 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>Active GLS account with MyGLS REST API access<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to two external services provided by GLS:<\/p>\n\n<p><strong>1. MyGLS REST API<\/strong> (<code>api.mygls.*<\/code>)<\/p>\n\n<p>Used for generating shipping labels, retrieving delivery-point (Parcel Shop \/ Parcel Locker) data, and tracking parcel status. The plugin sends data to this service when:<\/p>\n\n<ul>\n<li>You generate a GLS label from an order \u2014 sends sender address, recipient address, parcel weight, and selected GLS services to the API.<\/li>\n<li>You request the list of Parcel Shop or Parcel Locker locations \u2014 sends the country code and optional search coordinates.<\/li>\n<li>The automatic tracking sync (WP-Cron) fetches parcel status \u2014 sends parcel numbers.<\/li>\n<\/ul>\n\n<p>The exact API endpoint depends on the GLS subsidiary country configured in the plugin settings (e.g. <code>api.mygls.sk<\/code>, <code>api.mygls.cz<\/code>, <code>api.mygls.hu<\/code>).<\/p>\n\n<ul>\n<li>GLS Group website: https:\/\/gls-group.eu\/<\/li>\n<li>MyGLS portal: https:\/\/mygls.sk\/ (country-specific variants available)<\/li>\n<li>GLS Privacy Notice: https:\/\/gls-group.com\/GROUP\/en\/data-protection\/<\/li>\n<li>GLS Terms of Use: https:\/\/mygls.sk\/podmienky-pouzivania\/ (varies by country subsidiary)<\/li>\n<\/ul>\n\n<p><strong>2. GLS Delivery Point Map widget<\/strong> (<code>map.gls-{country}.com<\/code>)<\/p>\n\n<p>When the GLS Parcel Shop or Parcel Locker shipping method is active, the plugin loads a JavaScript widget from the GLS country-specific domain (e.g. <code>map.gls-slovakia.com<\/code>, <code>map.gls-czech.com<\/code>, <code>map.gls-hungary.com<\/code>, etc.) at checkout to display an interactive map for selecting a pickup point. The exact domain is determined by the GLS country configured in the plugin settings. This widget is provided by GLS and may set its own cookies or collect usage data per GLS's privacy policy linked above.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the plugin via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, or upload the folder to <code>\/wp-content\/plugins\/<\/code> manually.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>WooCommerce \u2192 GLS Shipping<\/strong> and open the <strong>API &amp; Account<\/strong> tab.<\/li>\n<li>Enter your GLS <strong>Client Number<\/strong>, <strong>API Username<\/strong>, and <strong>API Password<\/strong>. Select your <strong>GLS Country<\/strong> (SK, CZ, HU, etc.) and switch Mode to <strong>Production<\/strong> when ready to ship. Click <strong>Save Settings<\/strong>, then <strong>Test API Connection<\/strong> to verify.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Settings \u2192 Shipping<\/strong>, create a shipping zone, and add the GLS shipping method(s) you want to offer.<\/li>\n<li>In <strong>WooCommerce \u2192 GLS Shipping \u2192 Sender Address<\/strong>, fill in your company name, street, house number, city, postcode, country, and phone. This address is printed on every GLS label as the pickup address.<\/li>\n<li>In the <strong>Label<\/strong> tab, choose your printer type (A4 or thermal) and default print position. Optionally customize the client reference format and parcel content text.<\/li>\n<li><em>(Optional)<\/em> Add the <strong>GLS Parcel Shop<\/strong> and\/or <strong>GLS Parcel Locker<\/strong> shipping methods to your shipping zone. Customers will see an interactive map at checkout to select their preferred pickup point. Works with both classic and block-based checkout.<\/li>\n<li><em>(Optional)<\/em> In the <strong>Automation<\/strong> tab, enable <strong>Auto-generate GLS Label<\/strong> and select the order status(es) that should trigger label creation (e.g. Processing). Enable <strong>Live Tracking Sync<\/strong> to have WP-Cron periodically fetch GLS parcel status from the API and save it to each order \u2014 choose an interval (every 30 min, 1 h, 2 h, 4 h, twice daily, or daily). Enable <strong>Auto WC Status Change<\/strong> to automatically update the WooCommerce order status based on the last saved GLS status \u2014 configure its own interval and define mapping rules (e.g. GLS code 5 \u2192 Completed). The two crons run independently on their own schedules.<\/li>\n<li><em>(Optional)<\/em> In the <strong>Automation<\/strong> tab, enable <strong>Send delivery email<\/strong> to notify customers automatically when GLS confirms delivery.<\/li>\n<li><em>(Optional)<\/em> To send return labels: click <strong>Generate Return Label<\/strong> in any order's GLS meta box. The PDF is generated via GLS API and emailed to the customer automatically. Customize the email in <strong>WooCommerce \u2192 Settings \u2192 Emails \u2192 GLS Return Label<\/strong>.<\/li>\n<li><em>(Optional)<\/em> Create a new WordPress page, add the shortcode <code>[gls_tracking]<\/code>, and publish it. Customers can enter their order number and billing email to look up their parcel status. To embed a clickable tracking link inside a WooCommerce email template (e.g. YayMail), use <code>[gls_tracking_link]<\/code> in the email's text block instead \u2014 it renders a direct tracking link, not a form.<\/li>\n<li><em>(Optional)<\/em> In the <strong>Other<\/strong> tab, enable <strong>Estimated Delivery at Checkout<\/strong> to display business-day delivery ranges below the GLS shipping rate at checkout.<\/li>\n<li><em>(Optional)<\/em> In the <strong>Other<\/strong> tab, enable <strong>Label File Cleanup<\/strong> and set the number of days after which PDF files are deleted (default: 90 days).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20gls%20countries%20are%20supported%3F\"><h3>Which GLS countries are supported?<\/h3><\/dt>\n<dd><p>The plugin supports GLS subsidiaries in Slovakia (SK), Czech Republic (CZ), Hungary (HU), Romania (RO), Serbia (RS), Croatia (HR), and Slovenia (SI) \u2014 wherever GLS offers MyGLS REST API v2 access. Label generation, tracking, and Parcel Shop\/Locker selection all depend on API access from your GLS subsidiary.<\/p><\/dd>\n<dt id=\"is%20this%20compatible%20with%20hpos%3F\"><h3>Is this compatible with HPOS?<\/h3><\/dt>\n<dd><p>Yes. The plugin is fully compatible with WooCommerce High Performance Order Storage (HPOS \/ custom_order_tables). The tracking status filter, order meta box, and all queries work correctly in both classic and HPOS mode.<\/p><\/dd>\n<dt id=\"is%20this%20compatible%20with%20the%20woocommerce%20checkout%20block%3F\"><h3>Is this compatible with the WooCommerce Checkout Block?<\/h3><\/dt>\n<dd><p>Yes. The Parcel Shop and Parcel Locker location picker works in both classic and block-based checkout. The plugin uses the <code>ExperimentalOrderShippingPackages<\/code> slot to inject the pickup selector directly below the shipping rates in the checkout block.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20gls%20api%20credentials%3F\"><h3>How do I get GLS API credentials?<\/h3><\/dt>\n<dd><p>Contact your local GLS subsidiary and request MyGLS REST API v2 access. You will receive a client number, username, and password. Use the Sandbox mode first to test without affecting live shipments.<\/p><\/dd>\n<dt id=\"can%20customers%20choose%20a%20parcel%20shop%20at%20checkout%3F\"><h3>Can customers choose a Parcel Shop at checkout?<\/h3><\/dt>\n<dd><p>Yes. When the GLS Parcel Shop shipping method is enabled and added to a shipping zone, a location picker appears at checkout. Customers select their preferred pickup point from an interactive GLS map.<\/p><\/dd>\n<dt id=\"how%20do%20return%20labels%20work%3F\"><h3>How do return labels work?<\/h3><\/dt>\n<dd><p>Open any order with an existing GLS label in the admin. Click <strong>Generate Return Label<\/strong> in the GLS meta box. The plugin calls the GLS API with the customer's address as the pickup point and your store address as the delivery address, downloads the PDF label, and emails it to the customer automatically. You can customize the return label email in WooCommerce \u2192 Settings \u2192 Emails \u2192 GLS Return Label.<\/p><\/dd>\n<dt id=\"how%20do%20i%20resend%20the%20tracking%20email%3F\"><h3>How do I resend the tracking email?<\/h3><\/dt>\n<dd><p>Open the order in admin. In the GLS meta box, click <strong>Resend Tracking Email<\/strong>. The email type that is sent is configurable in <strong>WooCommerce \u2192 GLS Shipping \u2192 Automation \u2192 Resend Tracking Email<\/strong>; you can choose any registered WooCommerce email (default: GLS Parcel Delivered).<\/p><\/dd>\n<dt id=\"how%20does%20the%20estimated%20delivery%20date%20work%3F\"><h3>How does the estimated delivery date work?<\/h3><\/dt>\n<dd><p>When enabled in the Other settings tab, a line like \"Estimated delivery: 1\u20132 business days\" appears below the GLS shipping method at checkout. The range is based on a static map: SK\/CZ = 1\u20132 days, HU\/HR\/SI = 2\u20133 days, RO\/RS = 3\u20135 days, DE\/PL\/AT = 2\u20133 days, all other countries = 3\u20137 days. It is a general guideline \u2014 not a GLS guarantee.<\/p><\/dd>\n<dt id=\"does%20the%20tracking%20shortcode%20require%20login%3F\"><h3>Does the tracking shortcode require login?<\/h3><\/dt>\n<dd><p>No. Customers enter their order number and order key (from the confirmation email). The order key ensures only the rightful customer can view their order's tracking status.<\/p><\/dd>\n<dt id=\"how%20do%20i%20filter%20orders%20by%20gls%20delivery%20status%3F\"><h3>How do I filter orders by GLS delivery status?<\/h3><\/dt>\n<dd><p>In WooCommerce \u2192 Orders, use the GLS status filter dropdown (next to the existing status filter). Options: All GLS Statuses, In Transit, Delivered, Problem, No GLS Label. Works in both classic CPT and HPOS order screens.<\/p><\/dd>\n<dt id=\"are%20labels%20stored%20securely%3F\"><h3>Are labels stored securely?<\/h3><\/dt>\n<dd><p>Yes. PDF label files are stored in the WordPress uploads directory under a protected subfolder with an <code>.htaccess<\/code> that blocks direct access. Labels are served only through an authenticated, nonce-protected download URL. The optional cleanup job removes old files automatically.<\/p><\/dd>\n<dt id=\"can%20i%20use%20wp-cli%20to%20generate%20labels%3F\"><h3>Can I use WP-CLI to generate labels?<\/h3><\/dt>\n<dd><p>Yes. Use <code>wp gls generate --order=&lt;id&gt;<\/code> to generate a label, <code>wp gls sync<\/code> to sync tracking for all active orders, <code>wp gls status --order=&lt;id&gt;<\/code> to view tracking history, and <code>wp gls cleanup [--days=&lt;n&gt;]<\/code> to manually run the label file cleanup.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fixed \"Resend Tracking Email\" \u2014 was always sending the order processing email regardless of configuration; it now sends whichever email is selected in Automation settings<\/li>\n<li>Fixed \"Resend Tracking Email\" dropdown in Automation settings was empty \u2014 now shows all registered WooCommerce emails (previously filtered by customer_email flag which was unreliable in settings context)<\/li>\n<li>New setting in Automation tab \u2014 \"Resend Tracking Email\" section lets admin select which WooCommerce email is sent when the resend button is clicked; any registered email (including custom and third-party) can be selected<\/li>\n<li>New shortcode <code>[gls_tracking_link]<\/code> \u2014 for use in email templates (YayMail, email builders); outputs clickable GLS tracking links for the order being emailed; use this instead of <code>[gls_tracking]<\/code> inside email bodies<\/li>\n<li>Fixed <code>[gls_tracking]<\/code> shortcode appearing as a literal string in WooCommerce email bodies \u2014 the shortcode is now replaced with clickable tracking links via woocommerce_mail_callback_params filter (as fallback) and directly when the email context is set<\/li>\n<li>Fixed tracking page \"Track parcel\" button not working \u2014 billing email in the tracking URL was double-encoded (rawurlencode inside add_query_arg caused %40 to become %2540); removed the redundant rawurlencode call<\/li>\n<li>Added info box for <code>[gls_tracking_link]<\/code> shortcode in the Other settings tab, with copy button and usage instructions<\/li>\n<li>Added 47 missing translation strings with translations in sk_SK, hu_HU, cs_CZ, pl_PL, de_DE (status labels, automation descriptions, return label messages, resend email strings, estimated delivery strings, stats widget strings)<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Fixed translations in Automation tab \u2014 section descriptions for \"Live Tracking Sync\" and \"Auto WC Status Change\" were showing in English due to a double-UTF-8 encoded em-dash in the msgid strings; fixed in all 5 language files (sk_SK, cs_CZ, de_DE, hu_HU, pl_PL)<\/li>\n<li>Added missing translations for \"Customer Delivery Email\" section title and its description in all 5 languages<\/li>\n<li>Estimated delivery times at checkout are now configurable per destination country group (SK\/CZ, HU\/HR\/SI, RO\/RS, DE\/PL\/AT, other) in WooCommerce \u2192 GLS Shipping \u2192 Other; previously they were hardcoded<\/li>\n<li>Fixed WP.org Installation tab not appearing \u2014 removed sub-headings (=== ===) from the Installation section in readme.txt<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed GLS status code map \u2014 all 90 codes from official MyGLS API documentation (Appendix G, ver. 25.12.11) are now accurate; codes 13 (sorting error) and 20 (wrong address) were previously mislabeled as \"Delivered\" and are now correctly treated as problem codes<\/li>\n<li>Fixed status badge color in the admin orders list \u2014 badge now uses the explicit delivery code set [5, 54, 55, 58, 92, 93] and problem code set instead of a numeric range, so all GLS SK \/ international codes display the correct color<\/li>\n<li>Fixed \"Status\" button in order admin \u2014 now uses the code-based label from the internal map instead of the raw GLS StatusText (which contains internal operational data such as parcel refs and time windows)<\/li>\n<li>Fixed \"Refresh Tracking\" table \u2014 Status column now shows human-readable labels from the internal code map; events are sorted newest-first<\/li>\n<li>Fixed GLS API language code \u2014 LanguageIsoCode is now always sent lowercase (e.g. \"sk\" instead of \"SK\") to prevent empty StatusText responses<\/li>\n<li>Split automation into two independent WP-Cron jobs: <strong>Live Tracking Sync<\/strong> fetches GLS API and saves status to order meta \/ badge \/ notes; <strong>Auto WC Status Change<\/strong> reads saved meta and applies mapping rules \u2014 no API calls in the second cron<\/li>\n<li>Added configurable interval for each cron independently: every 30 min, 1 h, 2 h, 4 h, twice daily, or daily (three new custom intervals: ofgls_30min, ofgls_2hours, ofgls_4hours)<\/li>\n<li>Fixed default status mapping rule \u2014 was incorrectly pre-filled as \"code 20 \u2192 Completed\"; now defaults to \"code 5 \u2192 Completed\"<\/li>\n<li>Fixed settings helper text \u2014 was showing \"20 = Delivered\"; now shows accurate examples including code 5 = Delivered<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Label file cleanup \u2014 new daily WP-Cron job that automatically deletes GLS label PDFs older than a configurable number of days (default 90); toggle and day count in Other settings tab<\/li>\n<li>Resend tracking email \u2014 new \"Resend Tracking Email\" button in the order meta box; resends the processing email with tracking number to the customer<\/li>\n<li>Return label \u2014 new \"Generate Return Label\" button in the order meta box; generates a GLS return label (customer \u2192 store) via the API and emails it to the customer as a PDF attachment<\/li>\n<li>Tracking status filter in admin orders list \u2014 new filter dropdown (In Transit \/ Delivered \/ Problem \/ No GLS Label) for both classic CPT and HPOS order screens<\/li>\n<li>Estimated delivery date at checkout \u2014 optional feature (toggle in Other settings); displays business-day ranges per destination country below the GLS shipping rate at checkout<\/li>\n<li>WP-CLI support \u2014 new <code>wp gls generate<\/code>, <code>wp gls sync<\/code>, <code>wp gls status<\/code>, and <code>wp gls cleanup<\/code> commands for label generation, tracking sync, status inspection, and manual cleanup<\/li>\n<li>New WooCommerce email class OFGLS_Email_Return_Label \u2014 sends return label PDF as an attachment; configurable in WooCommerce \u2192 Settings \u2192 Emails<\/li>\n<li>Admin dashboard widget \u2014 monthly GLS stats: labels generated, delivered, in transit, and problem parcels; cached for one hour<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Tracking history panel in order admin \u2014 the \"Refresh Tracking\" button now shows the full event history (date, city, status) for all parcels, not just the latest event<\/li>\n<li>GLS status badge in admin orders list \u2014 latest GLS status shown as a colored badge next to the tracking number (green = delivered, blue = in transit, red = problem)<\/li>\n<li>Customer delivery email \u2014 optional WooCommerce email sent to the customer when GLS tracking confirms delivery (status codes 5, 54, 55, 58, 92); enabled in Automation settings; customizable in WooCommerce \u2192 Settings \u2192 Emails<\/li>\n<li>Bulk action \"Refresh GLS Tracking\" \u2014 refresh tracking for multiple orders at once from the orders list<\/li>\n<li>Fixed auto-label generation when order status changes via REST API or frontend checkout (not only admin) \u2014 the automation class is now loaded on demand in those contexts<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>GLS tracking numbers now visible to customers in My Account \u2014 shown as clickable links in the orders list and on the order detail page<\/li>\n<li>Added \"Refresh Tracking\" button in the order admin panel \u2014 manually fetch the latest GLS parcel status without waiting for the next WP-Cron run<\/li>\n<li>Fixed order admin panel label generation, delete, and status buttons \u2014 they were silently non-functional due to a JavaScript variable name mismatch introduced in 1.0.6<\/li>\n<li>Fixed WP-Cron tracking sync for multi-parcel orders \u2014 previously only the first parcel number was synced; now all parcel numbers are synced and each gets its own note<\/li>\n<li>Shortcode <code>[gls_tracking]<\/code> now works alongside <code>[ofgls_tracking]<\/code> \u2014 both are registered; readme and settings page already referenced the shorter form<\/li>\n<li>Added missing translation string \"Invalid request.\" for bulk label download validation<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed \"Extended services\" toggle in the order meta box \u2014 clicking the link no longer scrolls the page to the top<\/li>\n<li>Fixed WP-Cron tracking sync \u2014 the automation class is now correctly loaded during cron execution (was only loaded in admin context, so the scheduled hook never fired)<\/li>\n<li>GLS Delivery Point Map widget now loads the correct country-specific URL based on the GLS country configured in settings (SK, CZ, HU, HR, SI, RO, RS each have their own map domain)<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed bulk label download failing on servers with object cache (Redis\/Memcached) \u2014 transient key is now always stored in lowercase to match sanitize_key() used during retrieval<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Removed bundled translation files \u2014 translations are now managed through translate.wordpress.org<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>GLS map widget is now loaded on demand \u2014 only when the customer selects a GLS Parcel Shop or Parcel Locker shipping method, not for every checkout visitor<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added WooCommerce Checkout Blocks compatibility \u2014 GLS Parcel Shop and Parcel Locker location picker now works in the block-based checkout<\/li>\n<li>Declared cart_checkout_blocks feature compatibility<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Updated text domain to match plugin slug (onlinefotka-parcel-shipping-gls)<\/li>\n<li>Renamed internal prefixes from OGS_ to OFGLS_ for WP.org compliance<\/li>\n<li>Improved transient key validation in bulk label download<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"GLS shipping for WooCommerce \u2014 generate labels, track parcels, automate workflows, and offer Parcel Shop &amp; Parcel Locker at checkout.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/334561","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=334561"}],"author":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/onlinefotka"}],"wp:attachment":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=334561"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=334561"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=334561"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=334561"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=334561"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=334561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}