How can I require customers to select a delivery rate before checkout?

Topic summary

Main issue: A merchant delivering party props to hotels wants customers to select a specific hotel delivery rate (per area/difficulty) before checkout. Existing delivery apps don’t fit because they don’t present a clear list of hotels to pick from. The merchant asks if a “mandatory product” could enforce selecting a delivery rate.

Key constraints: Listing hotels as selectable items can cause ambiguity if customers add multiple hotels to the cart—unclear which delivery rate should apply.

Proposed approach: Implement delivery rates at the hotel level via custom theme code. This would present a hotel selector tied to a single delivery rate, avoiding app limitations.

Actionable considerations:

  • Enforce one-hotel-per-order in the cart, or define logic for which rate applies if multiple are selected.
  • Build a custom selector (in theme) that maps the chosen hotel to the correct delivery rate before checkout.

Status: No final resolution; a custom-coded theme solution is suggested, not a mandatory product workaround.

Summarized with AI on January 7. AI used: gpt-5.

I deliver party props to hotels (customers are guests at these hotels), the whole area is mostly in the same zip code, but I have delivery rates to the different areas (depending on how far/complicated it is to get there). None of the delivery apps seem to work because I want to make it easy for the customer to see the whole list of Hotels to choose and select their specific delivery price.

Is there a way I can make a product mandatory before checkout? So that customers HAVE TO select a delivery rate from that list before they checkout?
Is there another way to approach this?
Thank you in advance!

Hi @Partylogue ,

There is some issue in implementing the delivery rates as users can select multiple hotels in the cart in that case which delivery rates will be applicable.

The best approach would be to implement delivery rates at the hotel level and yes this can be done using custom code in the theme.