In a prior post, I presented an example where it was desired to Exclude Shipping Options from Carrier Plugins
Here’s a similar recent scenario I helped a client configure. The client uses USPS and wanted to offer First Class Parcel, but not First Class Letter or First Class Postcards. Out of the box, the USPS shipping plugin only has a checkbox for “First Class”. USPS will return all applicable first class methods/rates that match the input dimensions (weight, height, etc.). If you’re not using dimensions, or you have really small/light items (like physical gift cards), you could see the Letter & Postcards methods. For example, if in the USPS plugin configuration page you check off First Class, Priority Mail Express, and Priority Mail, then you could get back all these options (if your cart is “light”):
USPS Priority Mail Express 1-Day™ ($25.25)
USPS Priority Mail 2-Day™ ($6.00)
USPS First-Class Mail® Parcel ($2.07)
USPS First-Class Mail® Letter ($0.66)
USPS First-Class Mail® Postcards ($0.33)
So, if you’re not using dimensions, or you have really small/light items and you don’t want to offer Letter & Postcards methods, then they can be excluded by Shipping Director using the [$Name] variable in the Option record’s Name Expression.
The client also wanted to exclude First Class Parcel if the cart contained certain items. As per previous blogs, the recommendation is to create an unpublished Category for those products. (Products can be in more than one category.)
And, to make this more interesting, let’s say that there are two stores. The first store offers in-store pick up and the methods as described above. The second store will only offer the “Priority Mail” methods.
First, on lines 10 & 20, it has the requisite checks for Address (because Estimate Shipping does not), and also includes on line 30 a check to reject PO Boxes. On line 100 is the check if there are any items in the cart that should cause the Parcel method to be suppressed. Line 110 is the in-store option, but the Expression is set to only allow it for store 1 ([$CurrentStoreId]=1). Line 130 is the USPS option for store 1 (includes the Name filtering using the ternary if-then-else operator “ ? : “ ). Finally, on line 150, is the USPS option for store 2 also using “ ? : “. When an external shipping plugin (e.g. “Shipping.USPS”) is in the Rate Expression field, the Name Expression checks each method from the carrier, and if the expression evaluates to blank (“”) the method is suppressed.
Order | Type | Name | Expression | Rate Expression | Name Expression | Description Expression |
10 | ErrorExit | No State Entered | ShippingAddress.StateProvince = null | | | "Please enter Country, State, and Zip" |
20 | ErrorExit | No Zip Entered | ShippingAddress.ZipPostalCode = null | | | "Please enter Country, State, and Zip" |
30 | ErrorExit | No PO Boxes | ShippingAddress.Address1 != null and Regex.IsMatch(ShippingAddress.Address1, "(?i)\b(?:Post\ (?:Office\ )?|P[.\ ]?O\.?\ )?Box\b") | | | "Sorry, we can't ship to PO Boxes." |
100 | Boolean | SuppressParcel | Items.Any(Product.HasCategory("Suppress Parcel")) | | | |
110 | Option | In-Store Pickup | [$CurrentStoreId]=1 | 0 | | "Customer will pick-up at our store in YourTown, NY" |
130 | Option | US Mail Store 1 | [$CurrentStoreId]=1 | Shipping.USPS | [$Name].Contains("Letter") or [$Name].Contains("Postcards") or ([$Name].Contains("Parcel") and [SuppressParcel]) ? "" : [$Name] | |
150 | Option | US Mail Store 2 | [$CurrentStoreId]=2 | Shipping.USPS | [$Name].Contains("Priority Mail") ? [$Name] : "" | |
You can download the configuration import file by clicking on this link ShippingDirector (Exclude Letter and Postcards from USPS First Class).txt