Showing Product Option Blocks Based on Customer Tags with the Hidden Input Block

In this tutorial, we will demonstrate how to conditionally show/hide an upsell block based on a customer’s tag using the Hidden Input Block. This method works for both Giftship’s product options, cart options, and drawer cart.

Please note: This is an advanced tutorial and should be completed by a qualified Shopify developer familiar with HTML and Liquid. If you are not working with a developer and would like us to handle this for you, we can do so for a flat fee of $100 USD. Payment can be made by navigating to the following URL: https://shop.gist-apps.com

Step 1: Duplicate Your Live Theme

It is good practice to work on a development theme.

Step 2: Upload Snippet

Create a Liquid file named “giftship-customer-tags” in the “snippets” folder and copy and paste the following code:

{% if customer %}

  <script>

    (() => {

        var MODULE = {

            customerTags: [], // Placeholder for customer tags
            initialized: false, // Flag to track initialization

            init: function () {
                this.registerEventHandlers();
                this.registerCustomerTags();
            },

            registerEventHandlers: function () {
                document.addEventListener('giftship.loaded', this.onGiftshipLoaded.bind(this));
                document.addEventListener('giftship.drawer-cart.opened', this.onDrawerOpened.bind(this));
            },

            registerCustomerTags: function () {

                this.customerTags = {{ customer.tags | json }};

                //console.log('Customer tags registered:', this.customerTags); // Log customer tags for testing

                // Check if initialization conditions are met
                if (!this.initialized) {
                    this.initialized = true;
                    this.registerElements();
                }
            },

            registerElements: function () {
                this.hiddenInputProduct = document.querySelector('#gsAppContainer input[name="properties[_customer_tags]"]');
                this.hiddenInputDrawer = document.querySelector('#gsDrawer input[name="attributes[_customer_tags]"]');
            },

            populateHiddenInput: function (hiddenInput, tags) {
                if (hiddenInput) {
                    // Convert customerTags to a comma-separated string (if it's an array)
                    var tagsString = Array.isArray(tags) ? tags.join(', ') : tags;
                    hiddenInput.value = tagsString; // Set the value of the hidden input field

                    // Trigger change event on the hidden input
                    var event = new Event('change');
                    hiddenInput.dispatchEvent(event);

                    // Log the value of the hidden input field after it's populated
                    //console.log('Hidden input value:', hiddenInput.value);
                } else {
                    console.warn('Hidden input not found.');
                }
            },

            onGiftshipLoaded: function () {
                //console.log('giftship.loaded triggered');
                if (this.initialized) {
                    this.registerElements();
                    this.populateHiddenInput(this.hiddenInputProduct, this.customerTags);
                }
            },

            onDrawerOpened: function () {
                //console.log('giftship.drawer-cart.opened triggered');
                if (this.initialized) {
                    this.registerElements();
                    this.populateHiddenInput(this.hiddenInputDrawer, this.customerTags);
                }
            }
        };

        // Initialize the MODULE

        MODULE.init();

    })();

  </script>

{% endif %}

Step 3: Edit theme.liquid and Include Snippet

At the bottom of this document, directly above the closing </body> tag, paste the following code:

{% include 'giftship-customer-tags' %}

Step 4: Set Up Product Option Set

Create a product option set and navigate to Display Settings. Make sure the product set is set for display.

Step 5: Add a Hidden Input Block

Create a hidden input block. You can name the input anything, but for this tutorial, use “_customer_tags” and remember to uncheck “Ignore value.”

Step 6: Set Up the Upsell Block

Create an upsell block and move to the display rules tab.

  • Display Option: Select “When all conditions are met.”
  • Block Conditions: Label it “_customer_tags” or the name you used for the hidden input + coded in the liquid file.
  • Comparison: Set it to “contains” + Customer’s Tag or “does not contain” + Customer’s Tag.
    Important: do not use equal to, because if a customer has more then one tag, the rule will not fire3

Step 7: Test, Test and Test!

Preview the development theme, log in as a customer, and add/remove customer tags to trigger Giftship’s display rules.


Can't find the answer in our documentation?
Contact Support