{"id":155,"date":"2024-06-16T08:45:43","date_gmt":"2024-06-16T16:45:43","guid":{"rendered":"https:\/\/www.tonybhimani.com\/programming-blog\/?p=155"},"modified":"2024-06-16T08:58:03","modified_gmt":"2024-06-16T16:58:03","slug":"custom-promotional-shipping-rates-with-shopify-script-editor","status":"publish","type":"post","link":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/","title":{"rendered":"Custom Promotional Shipping Rates with Shopify Script Editor"},"content":{"rendered":"\r\n<p>For those of you on the <a href=\"https:\/\/www.shopify.com\/plus\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Shopify Plus<\/a> plan, you have the option to use the Shopify Script Editor to perform custom programming with the Ruby language. Scripts you write can modify line items, payment methods, and shipping options during checkout. While the Script Editor is being deprecated on August 25, 2025, in favor of <a href=\"https:\/\/shopify.dev\/api\/functions\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Shopify Functions<\/a>, it remains a valuable tool for enhancing the checkout experience if you already have it installed.<\/p>\r\n\r\n\r\n\r\n<p>Recently, I needed to create a custom shipping option for work. The requirement was to offer a flat rate for the first item, with a fixed amount added for each additional item. If any item exceeded a certain weight, the promotional shipping would not apply. After defining these rules, I proceeded to code the solution using the <a href=\"https:\/\/help.shopify.com\/en\/manual\/checkout-settings\/script-editor\/shopify-scripts\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">API reference<\/a>.<\/p>\r\n\r\n\r\n\r\n<p>Since Ruby isn&#8217;t a language I use frequently, I had to look up various aspects like array handling and string manipulation functions. Although these tasks were manageable, I encountered some limitations set by Shopify. For instance, you can only offer discounts and cannot exceed a carrier-calculated rate. Additionally, you cannot inject a new option; you can only edit an existing one by renaming it or lowering its value. This meant I had to make compromises, such as editing a ground shipping option and ensuring that if the promo rate was higher than the carrier rate, the carrier rate would prevail.<\/p>\r\n\r\n\r\n\r\n<p>While I can&#8217;t share the exact script I wrote for work, below is a similar version that follows the same rules. It should be useful until the Script Editor is phased out.<\/p>\r\n\r\n\r\n\r\n<p>Please note, you can only have one type of script active at a time. I had to merge my existing shipping script with the new one to meet this requirement.<\/p>\r\n\r\n\r\n<pre><pre class=\"brush: ruby; title: ; notranslate\" title=\"\">\r\n# Vars we need\r\nstandard_quantity = 0\r\noverweight_quantity = 0\r\noverweight_value = 4535.92\r\nhas_ground_option = false\r\nhas_home_option = false\r\nuse_code = &quot;&quot;\r\nnew_rate = 0.00\r\n\r\n# Sum up all the line item quantities\r\nInput.cart.line_items.each do |line_item|\r\n  if line_item.grams &lt; overweight_value\r\n    standard_quantity += line_item.quantity\r\n  else\r\n    overweight_quantity += line_item.quantity\r\n  end\r\nend\r\n\r\n# View output for debugging\r\nputs &quot;standard_quantity =&gt; &quot; + standard_quantity.to_s\r\nputs &quot;overweight_quantity =&gt; &quot; + overweight_quantity.to_s\r\n\r\n# Search for ground and home delivery\r\nInput.shipping_rates.each do |shipping_rate|\r\n  if shipping_rate.code == &quot;FEDEX_GROUND&quot;\r\n    has_ground_option = true\r\n  end\r\n  if shipping_rate.code == &quot;GROUND_HOME_DELIVERY&quot;\r\n    has_home_option = true\r\n  end\r\nend\r\n\r\n# View output for debugging\r\nputs &quot;has_ground_option =&gt; &quot; + has_ground_option.to_s\r\nputs &quot;has_home_option =&gt; &quot; + has_home_option.to_s\r\n\r\n# Which code will we use and remove\r\nuse_code = has_ground_option ? &quot;FEDEX_GROUND&quot; : &quot;GROUND_HOME_DELIVERY&quot;\r\n\r\n# View output for debugging\r\nputs &quot;use_code =&gt; &quot; + use_code.to_s\r\n\r\n# Sometimes both ground and home delivery are returned for the same address. Shopify bug?\r\n# Remove the one we won&#039;t be using for the promotion modification\r\nInput.shipping_rates.delete_if do |sr|\r\n  sr.code == ((use_code == &quot;FEDEX_GROUND&quot;) ? \r\n              &quot;GROUND_HOME_DELIVERY&quot; : &quot;FEDEX_GROUND&quot;)\r\nend\r\n\r\n# Iterate through shipping rates\r\nInput.shipping_rates.each do |shipping_rate|\r\n  if shipping_rate.code == use_code \r\n    if overweight_quantity == 0\r\n      # Note: values are in cents\r\n      # Base rate is $5.00, each additional is $1.00\r\n      new_rate = 500 + ((standard_quantity - 1) * 100)\r\n      \r\n      # View output for debugging\r\n      puts &quot;new_rate =&gt; &quot; + new_rate.to_s\r\n      puts &quot;shipping_rate.price.cents =&gt; &quot; + shipping_rate.price.cents.to_s\r\n      \r\n      # Only make the change if the promo rate is below carrier-calculated\r\n      if new_rate &lt; shipping_rate.price.cents.to_s.to_i\r\n        shipping_rate.change_name(&quot;Shipping Promotion&quot;)\r\n        shipping_rate.change_price(Money.new(cents: new_rate), message: &quot;discounted price&quot;)\r\n      end\r\n    end\r\n  end\r\nend\r\n\r\n# Sort by price in ascending order\r\nOutput.shipping_rates = Input.shipping_rates.sort_by(&amp;:price)\r\n<\/pre><\/pre>","protected":false},"excerpt":{"rendered":"<p>For those of you on the Shopify Plus plan, you have the option to use the Shopify Script Editor to perform custom programming with the Ruby language. Scripts you write can modify line items, payment methods, and shipping options during checkout. While the Script Editor is being deprecated on August 25, 2025, in favor of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[22,21,20],"class_list":["post-155","post","type-post","status-publish","format-standard","hentry","category-scripts","tag-create-custom-shipping-script","tag-enhance-checkout-experience","tag-shopify-script-editor"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Custom Promotional Shipping Rates with Shopify Script Editor - Tony&#039;s Programming Blog and Development Journal<\/title>\n<meta name=\"description\" content=\"Learn how to create custom promotional shipping rates using Shopify Script Editor and enhance your checkout experience.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Custom Promotional Shipping Rates with Shopify Script Editor - Tony&#039;s Programming Blog and Development Journal\" \/>\n<meta property=\"og:description\" content=\"Learn how to create custom promotional shipping rates using Shopify Script Editor and enhance your checkout experience.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/\" \/>\n<meta property=\"og:site_name\" content=\"Tony&#039;s Programming Blog and Development Journal\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-16T16:45:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-16T16:58:03+00:00\" \/>\n<meta name=\"author\" content=\"Tony\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TonyBhimani\" \/>\n<meta name=\"twitter:site\" content=\"@TonyBhimani\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tony\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/\"},\"author\":{\"name\":\"Tony\",\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/#\/schema\/person\/036db10e4bc2069453a60f580f91ab88\"},\"headline\":\"Custom Promotional Shipping Rates with Shopify Script Editor\",\"datePublished\":\"2024-06-16T16:45:43+00:00\",\"dateModified\":\"2024-06-16T16:58:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/\"},\"wordCount\":302,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/#\/schema\/person\/036db10e4bc2069453a60f580f91ab88\"},\"keywords\":[\"create custom shipping script\",\"enhance checkout experience\",\"shopify script editor\"],\"articleSection\":[\"Scripts\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/\",\"url\":\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/\",\"name\":\"Custom Promotional Shipping Rates with Shopify Script Editor - Tony&#039;s Programming Blog and Development Journal\",\"isPartOf\":{\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/#website\"},\"datePublished\":\"2024-06-16T16:45:43+00:00\",\"dateModified\":\"2024-06-16T16:58:03+00:00\",\"description\":\"Learn how to create custom promotional shipping rates using Shopify Script Editor and enhance your checkout experience.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.tonybhimani.com\/programming-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Custom Promotional Shipping Rates with Shopify Script Editor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/#website\",\"url\":\"https:\/\/www.tonybhimani.com\/programming-blog\/\",\"name\":\"Tony's Programming Blog and Development Journal\",\"description\":\"Sharing is caring... Especially with code\",\"publisher\":{\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/#\/schema\/person\/036db10e4bc2069453a60f580f91ab88\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.tonybhimani.com\/programming-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.tonybhimani.com\/programming-blog\/#\/schema\/person\/036db10e4bc2069453a60f580f91ab88\",\"name\":\"Tony\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/ed5a2a00dc5d9679e1fd2f29f60ca885a8e0f9d2c1aa2b5dabf05af02663b46c?s=96&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed5a2a00dc5d9679e1fd2f29f60ca885a8e0f9d2c1aa2b5dabf05af02663b46c?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed5a2a00dc5d9679e1fd2f29f60ca885a8e0f9d2c1aa2b5dabf05af02663b46c?s=96&r=g\",\"caption\":\"Tony\"},\"logo\":{\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/ed5a2a00dc5d9679e1fd2f29f60ca885a8e0f9d2c1aa2b5dabf05af02663b46c?s=96&r=g\"},\"sameAs\":[\"https:\/\/tonybhimani.com\/programming-blog\",\"https:\/\/x.com\/TonyBhimani\",\"https:\/\/www.youtube.com\/tonybhimani\"],\"url\":\"https:\/\/www.tonybhimani.com\/programming-blog\/author\/coding_magik\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Custom Promotional Shipping Rates with Shopify Script Editor - Tony&#039;s Programming Blog and Development Journal","description":"Learn how to create custom promotional shipping rates using Shopify Script Editor and enhance your checkout experience.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/","og_locale":"en_US","og_type":"article","og_title":"Custom Promotional Shipping Rates with Shopify Script Editor - Tony&#039;s Programming Blog and Development Journal","og_description":"Learn how to create custom promotional shipping rates using Shopify Script Editor and enhance your checkout experience.","og_url":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/","og_site_name":"Tony&#039;s Programming Blog and Development Journal","article_published_time":"2024-06-16T16:45:43+00:00","article_modified_time":"2024-06-16T16:58:03+00:00","author":"Tony","twitter_card":"summary_large_image","twitter_creator":"@TonyBhimani","twitter_site":"@TonyBhimani","twitter_misc":{"Written by":"Tony","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/#article","isPartOf":{"@id":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/"},"author":{"name":"Tony","@id":"https:\/\/www.tonybhimani.com\/programming-blog\/#\/schema\/person\/036db10e4bc2069453a60f580f91ab88"},"headline":"Custom Promotional Shipping Rates with Shopify Script Editor","datePublished":"2024-06-16T16:45:43+00:00","dateModified":"2024-06-16T16:58:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/"},"wordCount":302,"commentCount":0,"publisher":{"@id":"https:\/\/www.tonybhimani.com\/programming-blog\/#\/schema\/person\/036db10e4bc2069453a60f580f91ab88"},"keywords":["create custom shipping script","enhance checkout experience","shopify script editor"],"articleSection":["Scripts"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/","url":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/","name":"Custom Promotional Shipping Rates with Shopify Script Editor - Tony&#039;s Programming Blog and Development Journal","isPartOf":{"@id":"https:\/\/www.tonybhimani.com\/programming-blog\/#website"},"datePublished":"2024-06-16T16:45:43+00:00","dateModified":"2024-06-16T16:58:03+00:00","description":"Learn how to create custom promotional shipping rates using Shopify Script Editor and enhance your checkout experience.","breadcrumb":{"@id":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.tonybhimani.com\/programming-blog\/custom-promotional-shipping-rates-with-shopify-script-editor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.tonybhimani.com\/programming-blog\/"},{"@type":"ListItem","position":2,"name":"Custom Promotional Shipping Rates with Shopify Script Editor"}]},{"@type":"WebSite","@id":"https:\/\/www.tonybhimani.com\/programming-blog\/#website","url":"https:\/\/www.tonybhimani.com\/programming-blog\/","name":"Tony's Programming Blog and Development Journal","description":"Sharing is caring... Especially with code","publisher":{"@id":"https:\/\/www.tonybhimani.com\/programming-blog\/#\/schema\/person\/036db10e4bc2069453a60f580f91ab88"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tonybhimani.com\/programming-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.tonybhimani.com\/programming-blog\/#\/schema\/person\/036db10e4bc2069453a60f580f91ab88","name":"Tony","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ed5a2a00dc5d9679e1fd2f29f60ca885a8e0f9d2c1aa2b5dabf05af02663b46c?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ed5a2a00dc5d9679e1fd2f29f60ca885a8e0f9d2c1aa2b5dabf05af02663b46c?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed5a2a00dc5d9679e1fd2f29f60ca885a8e0f9d2c1aa2b5dabf05af02663b46c?s=96&r=g","caption":"Tony"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/ed5a2a00dc5d9679e1fd2f29f60ca885a8e0f9d2c1aa2b5dabf05af02663b46c?s=96&r=g"},"sameAs":["https:\/\/tonybhimani.com\/programming-blog","https:\/\/x.com\/TonyBhimani","https:\/\/www.youtube.com\/tonybhimani"],"url":"https:\/\/www.tonybhimani.com\/programming-blog\/author\/coding_magik\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/posts\/155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/comments?post=155"}],"version-history":[{"count":12,"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/posts\/155\/revisions"}],"predecessor-version":[{"id":167,"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/posts\/155\/revisions\/167"}],"wp:attachment":[{"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/media?parent=155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/categories?post=155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tonybhimani.com\/programming-blog\/wp-json\/wp\/v2\/tags?post=155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}