Category: Studio Resources

  • How to Protect Everest Forms Email Styling from Plugin Updates

    Issue Overview:

    During a security-related plugin update on a staging site, the default Everest Forms email template was overwritten, wiping out previously approved visual styling. Though functionality remained intact, cosmetic differences (like a message saying “You can upload up to 1 files”) highlighted the risk of default template reliance.

    What We Found:

    • Default templates get replaced: The Everest Forms plugin overwrites its core email template during updates.
    • Inline styling was lost: Custom CSS and layout settings were tied to the default template.
    • Live vs. staging mismatch: A minor cosmetic difference appeared post-update but didn’t affect core functionality.

    What We Did:

    • Created a custom email template: Replicated the design of the default email and saved it as a standalone, update-safe version.
    • Used inline CSS: All styles were embedded directly into the HTML for email compatibility and stability.
    • Tested thoroughly on staging: Updates to all related Everest Forms plugins were tested for compatibility.
    • Verified design match post-deployment: Ensured the client-approved styling stayed consistent across environments.

    Final Outcome:

    Thanks to a custom template and inline styling, future plugin updates won’t disrupt the visual integrity of email templates. Integriti Studio’s approach ensures lasting design consistency and saves time on manual fixes after updates.

    Struggling with plugin updates breaking your custom styles?

    Integriti Studio builds update-proof solutions that preserve your brand’s look and feel.

  • How to Sort WordPress Taxonomy Dropdowns by Date Using ACF

    Issue Background:

    The “Browse by Magazine Issue” dropdown under Book Reviews displayed items alphabetically by title (e.g., “HNR Issue 102”), not by actual publication date. A legacy fix required a plugin toggle every quarter to manually input dates—leading to conflicts and inconsistent sorting.

    What We Did:

    • Created a permanent ‘Issue Date’ field:
      Added a custom date field to the mag_edition taxonomy using Advanced Custom Fields (ACF), replacing the old plugin workaround.
    • Updated the admin experience:
      Admins can now add or edit the publication date directly within the taxonomy term editor—no plugin toggles required.
    • Rebuilt the front-end dropdown logic:
      The dropdown now queries taxonomy terms and sorts them in reverse chronological order using the new field.
    • Populated live dates:
      Historical magazine issues were updated with proper dates, so the dropdown reflects accurate ordering from oldest to newest.

    Final Outcome:

    The new date-based sorting system is dynamic, reliable, and requires no quarterly intervention. Visitors can now easily browse magazine issues by actual release date, and editors enjoy a cleaner workflow.

    Need help organizing your content better?

    Integriti Studio builds smart, scalable WordPress solutions that make content easy to manage and even easier to navigate.

  • How to Troubleshoot Missing UTM Tracking in GA4 & Google Tag Manager

    The Problem: UTM Parameters Missing in GA4

    A client reached out when they noticed that their UTM-tagged campaign URLs were no longer showing up in their Google Analytics reports. Both old and new UTM links failed to populate traffic source fields like Source, Medium, or Campaign.

    Initial concerns pointed toward possible misconfigurations in their GTM setup or broken integration between GTM and GA4.

    What We Found

    After digging into the tracking setup, here’s what we discovered:

    • GTM was installed—but inactive
      The GTM container was embedded on the site, but had no active tags or triggers configured. In short, GTM wasn’t being used for any analytics functions.
    • GA4 was running independently
      Google Analytics was tracking events, sessions, and conversions—but it wasn’t doing so through GTM.
    • UTM parameters were never routed through GTM
      The client had assumed GTM was handling tracking. In reality, UTM tags are captured natively by GA4 and don’t require GTM at all.

    Need help reviewing your GA4 or GTM setup? Book a free audit call.

    How We Fixed It

    With a clearer picture in place, we walked the client through a few simple but important checks:

    ✅ Confirmed GA4 was tracking UTM data

    We tested UTM-tagged links using Google’s Realtime Reports. The UTM parameters (source, medium, campaign) showed up immediately.

    ✅ Reviewed historical campaign traffic

    Looking back four months, we found limited use of UTM-tagged URLs—confirming it wasn’t a tracking failure but a lack of consistent campaign tagging.

    ✅ Verified new campaigns

    The client shared a fresh UTM URL. We tested it live and confirmed that Session Source, Session Medium, and Campaign Name all showed up correctly in GA4.

    Want to be 100% sure your UTM tracking is working? Let’s test it together.

    What You Should Know

    UTM tracking confusion is common, especially when multiple tools (like GA4, GTM, and CRM systems) are in play. Here’s what matters:

    • UTM tags are read directly by GA4
      You don’t need Google Tag Manager to track campaign parameters like source, medium, or campaign name.
    • Use GA4’s Realtime Report for testing
      It’s the fastest way to confirm whether UTM-tagged links are being tracked properly.
    • Keep GTM clean and purposeful
      If you’re not actively using GTM for event tracking, don’t assume it’s capturing campaign data.
    • Be consistent with UTM usage
      Inconsistent tagging often looks like “missing data” when it’s actually just incomplete link building.

    Need a UTM strategy that works across platforms? Let’s build it →

    Final Outcome

    No broken tools. No bugs. Just a bit of miscommunication. After clarifying how their setup worked, the client was relieved to see their campaign data flowing correctly—and now has a direct report to track UTM-tagged traffic in real time.

    Struggling with Google Analytics or Tag Manager?


    Integriti Studio can help you streamline campaign tracking, build custom dashboards, and troubleshoot analytics confusion—whether you’re using Shopify, WordPress, or Webflow.

  • How to pre-fill wordpress forms using QR codes & URL parameters

    Issue Background


    Imagine this: Your team is out in the field distributing flyers with QR codes. Each QR code should lead to a contact form, pre-filled with the name of the rep who gave it to the lead. That way, no manual data entry—and every lead is attributed to the right person or campaign.

    Example link behind the QR code:
    https://yoursite.com/offer/?salesperson=Alex%20Smith

    When the prospect scans the code, the salesperson’s name appears in a hidden field. Neat, right?

    How It Works


    URL parameters carry hidden data from the QR code directly into the form.
    ✅ That data pre-fills a field on the form—visible or hidden.
    ✅ When the form is submitted, the lead is automatically assigned to the correct sales rep or campaign.

    Resolution Steps

    Step 1: Create a Hidden Form Field


    ➡ Choose your form plugin (Gravity Forms, WPForms, Ninja Forms).
    ➡ Add a Hidden field and name it Sales Rep or Campaign Source.

    Step 2: Turn On Dynamic Population


    ➡ In the form settings, turn on Dynamic Population.
    ➡ Set the parameter name as salesperson.

    Step 3: Generate QR Codes with URLs


    ➡ Create one link per rep:
    https://yoursite.com/offer/?salesperson=Alex%20Smith
    ➡ Use any free QR code generator to turn these URLs into scannable QR codes.

    Step 4 (Optional): Hide or Lock the Field


    ➡ If you don’t want users to change the value, use a Hidden Field or set it to read-only.

    Pro Tip: You can even use this dynamic value in confirmation emails or thank-you pages, like:
    “Thanks! Your request has been sent to Alex Smith.”

    Final Outcome

    • ✅ Sales rep names filled in automatically.
    • ✅ No missed leads or manual errors.
    • ✅ Marketing attribution made easy and fully trackable.

    Why This Works

    • Works across campaigns, QR codes, emails, social links.
    • Makes lead collection easier, faster, cleaner.
    • No need for custom dev or expensive plugins.

  • How to redirect PDF files in WordPress without breaking old links

    Issue Background

    A client needed to update a PDF stored in their WordPress Media Library. The problem? Changing the filename would break every instance where that file had been shared.

    For example:
    Old PDF URL: /wp-content/uploads/2024/02/old-document.pdf
    New PDF URL: /wp-content/uploads/2025/03/updated-document-v2.pdf

    Most WordPress hosts would not process redirects for static files like PDFs. Redirects usually work for pages. Not media assets.

    Diagnosis


    Standard redirect plugins and server redirects couldn’t handle this scenario. The fix required a creative solution at the file structure level—one that works with WordPress and preserves SEO.

    Solution

    ✔️ Step 1: Rename the Old File


    Using SFTP or your hosting file manager, locate the original PDF and rename it, like this:
    old-document-old.pdf

    ✔️ Step 2: Create a “Fake” Directory


    Inside the same folder, create a directory using the exact same name as the old file (yes—with the .pdf extension):
    /wp-content/uploads/2024/02/old-document.pdf/

    ✔️ Step 3: Add a Redirect File


    In that new folder, create an index.php file containing this redirect code:

    php

    CopyEdit

    <?php
    header(“HTTP/1.1 301 Moved Permanently”);
    header(“Location: /wp-content/uploads/2025/03/updated-document-v2.pdf”);
    exit();
    ?>

    Now, whenever someone clicks the old PDF link, they’ll land on your new, updated version automatically.

    Why It Works


    ➡️ Browsers try to load /old-document.pdf but find a folder instead.
    ➡️ That folder serves the index.php, which executes a 301 redirect to your new file.
    ➡️ No broken links. No SEO losses. Just clean user experience.

    Final Outcome


    ✔ No need to manually update old links on your website—or anywhere else.
    ✔ Users go directly to your new document.
    ✔ Search engines respect the 301 redirect, maintaining SEO continuity.

  • Improving Checkout UX for Printify + Local Pickup in WooCommerce

    Issue Overview

    The store owner requested a full review after reports of:

    • Printful-related backend errors (despite now using Printify)
    • Confusing shipping settings
    • Poor cart feedback after item addition
    • Inconsistent user guidance for shipping vs. pickup

    What We Found

    ⚠️ Legacy Plugin Conflicts

    Old Printful settings caused backend errors—even for products now powered by Printify.

    Shipping Class Gaps

    Some Printify items didn’t have the right “shippable” class, breaking fulfillment flows.

    Limited Pickup Clarity

    Local pickup was Florida-only, but the UI didn’t clearly communicate that to users.

    Cart Feedback Missing

    Add-to-cart action just refreshed the page—no cart toggle, no confirmation, no prompt to continue.

    Fixes & Testing

    • Ran real test orders: one shipped via Printify, one marked for pickup
    • Applied a one-time coupon to simulate checkout without disrupting analytics
    • Flagged products missing correct shipping classes
    • Recommended design tweaks for:
    • Address change visibility
    • Cart behavior (toggle or redirect after adding)
    • Clear shipping/pickup messages during checkout

    Outcome

    With real-world testing and strategic UX fixes, the store now:

    • Handles Printify orders reliably
    • Guides users smoothly between shipping and pickup
    • Prevents backend errors from outdated configurations
    • Improves cart flow and encourages checkout

    Need Checkout Help?

    Integriti Studio can streamline your WooCommerce store for better shipping, dropshipping, and conversion.

  • How to Fix Header Layout Issues in Custom WordPress Themes

    Issue Overview

    A development site built with a custom theme (no Avada or Elementor) had a persistent layout issue:

    • The navigation “jumped down” below the logo around 1539px screen width.
    • Menu items overlapped or misaligned in tablet view.
    • A grey background appeared in the header when it should have been white.
    • A custom search integration (Ajax Search Pro) may have contributed to the header complexity.

    How We Fixed It

    CSS Realignment
    • Removed float styles on the logo causing layout shifts.
    • Repositioned elements to prevent navigation from dropping below the logo.
    Breakpoint Optimization
    • Adjusted the breakpoint for the mobile menu to trigger earlier—before the layout could break.
    • Ensured clean transitions across desktop, tablet, and mobile views.
    Header Cleanup
    • Removed leftover styles (like grey backgrounds) and extra spacing.
    • Standardized spacing for logos, buttons, and secondary branding elements.
    ⚙️ No Code Edits Needed
    • All changes were made using the WordPress Customizer’s Additional CSS field—no direct theme file edits required.

    Final Result

    The header is now clean, responsive, and consistent across all devices—solving layout breaks, improving user experience, and preserving the custom theme setup.

    Need Help With Header Layout Fixes?

    At Integriti Studio, we specialize in solving tough CSS and theme conflicts—without forcing a full redesign.

  • How to Fix Course Access Issues in WooCommerce Caused by User Role Timing

    Issue Background:

    A WordPress site selling courses through WooCommerce disabled guest checkout, requiring users to create an account during purchase. However, after checkout:

    • Courses were marked as expired for new users.
    • This only occurred on the live site, not staging.
    • The client used a custom plugin (“SuperTest SP”) and the User Switching plugin for testing.

    Diagnosis:

    • Timing conflict: The custom plugin evaluated course access before WooCommerce had fully processed the order and assigned user metadata.
    • Role-based logic flaw: The function that determined whether access was “active” or “expired” relied on incomplete user data.
    • Environment difference: Staging didn’t exhibit the problem due to faster or more lenient processing behavior.

    Resolution Steps:

    1. Tested with new accounts using User Switching to simulate the customer journey.
    1. Audited the custom plugin code to locate and update the logic determining course access.
    1. Added a delay or condition to ensure evaluation occurred after order completion and role assignment.
    1. Validated changes on staging, then deployed to production.

    Final Outcome:

    Course access now updates correctly as “active” upon purchase completion. Customers no longer face confusion or support issues related to “expired” content immediately after buying.

    Selling digital courses with WooCommerce?

    Avoid frustrating access bugs. Integriti Studio helps you build and maintain flawless digital delivery experiences.

  • How to Create Region-Based Random Quizzes in LearnDash

    The Challenge

    The client needed quizzes that could:

    • Randomly pull questions from a larger bank
    • Filter based on a student’s region (e.g., Colorado vs. California)
    • Allow access via codes or QR
    • Support both English and Spanish
    • Import questions via CSV
    • Schedule tests by date

    What We Did

    Region-Specific Pools


    We grouped questions by state and topic using the LearnDash Multi Question Categories plugin, allowing quizzes to dynamically pull the right mix.

    Randomized Quiz Logic


    Used learndash_get_quiz_questions() to fetch different questions for each student, even within the same region.

    Scheduling + Gated Access


    LearnDash’s drip-feed features made it easy to control when each test appears.

    Code-Based Access


    We proposed a small add-on to generate unique test links + QR codes to simplify access per student.

    Language Support


    Set up multilingual quizzes with WPML and LearnDash’s translation tools.

    Bulk Question Upload

    Enabled quiz bank uploads via spreadsheet with the Quiz Import Export plugin—saving tons of admin time.

    The Result

    ✅ Random quizzes tailored by location
    ✅ English + Spanish support
    ✅ Admins can upload 100s of questions in seconds
    ✅ Students access tests through personalized codes or QR links

    Want to deliver smarter, localized quizzes without custom development?
    Talk to Integriti Studio — we’ll help make LearnDash work your way.

  • How to Add ZIP Code Restrictions in Gravity Forms

    The Problem: Unwanted Submissions from Outside Service Areas

    The client’s WooCommerce site was getting flooded with form entries from users outside their target ZIP code list—wasting valuable time and resources.

    They wanted a simple, automatic way to stop this and only allow form submissions from approved ZIP codes.

    What We Found

    • Gravity Forms doesn’t support this natively. There’s no built-in ZIP validation.
    • A custom solution was required using a predefined ZIP list and a validation hook.
    • Initially, the client wanted this for one form, but later expanded it to cover all forms site-wide.

    Implementation Steps

    Step 1: Create a ZIP Code List

    We converted the client’s list of 209 valid ZIP codes into a PHP array:

    php

    CopyEdit

    $allowed_zips = [‘20105’, ‘20109’, ‘20110’, ‘20111’, ‘20112’, …];

    Step 2: Add Custom Validation Hook

    We used a Gravity Forms filter to check the ZIP code field before submission:

    php

    CopyEdit

    add_filter(‘gform_field_validation_4_9’, ‘custom_zip_validation’, 10, 4);

    function custom_zip_validation($result, $value, $form, $field) {
       $allowed_zips = […]; // your ZIP list
       if (!in_array($value, $allowed_zips)) {
           $result[‘is_valid’] = false;
           $result[‘message’] = ‘Sorry, we do not service your area.’;
       }
       return $result;
    }

    (4 = Form ID, 9 = ZIP Code Field ID)

    Step 3: Resolve Other Errors

    While testing, we encountered unrelated JavaScript issues that were not tied to the ZIP logic. Once confirmed, we pushed the code live without risk.

    Step 4: Make It Global

    Later, we upgraded the logic to work across all forms by checking for any field labeled “ZIP Code” dynamically—so no need to edit each form individually.

    Results That Matter

    • The site now automatically blocks ZIP codes outside the service area.
    • Lead quality and team productivity have both improved.
    • The setup is easy to update or expand as needed.

    Want to Build Smarter Forms?

    Need advanced validations, field controls, or multi-form logic? We’ll help you get the most out of Gravity Forms and your WordPress stack.