Category: staffingResources

  • How to Prioritize Products in WordPress Search Results

    What Was Happening

    Search queries like “virus” or “case study” didn’t return any product results, even though matching products were published and indexed inside the default WordPress search engine. Meanwhile, unrelated static pages showed up instead. Custom search behavior that once prioritized products had stopped working after some plugin or theme updates, affecting the search results page and overall search experience.

    What We Found

    No Priority for CPTs

    The theme’s search.php and functions.php didn’t include any logic to elevate custom post types like “product” over standard posts and pages inside default WordPress search results.

    WP_Query Was Basic

    The query wasn’t configured to weight or include custom fields, taxonomies, product categories, or keyword relevance, leading to inconsistent search results in WordPress. The search functionality wasn’t optimized for ecommerce or on-site product search.

    How We Fixed It

    1:Adjusted the Search Query

    We added a pre_get_posts filter in functions.php to explicitly prioritize the product post type, helping WordPress search results highlight important products and improving the order of search results for users looking for specific products:

    php

    CopyEdit

    function prioritize_products_in_search($query) {
    if (!is_admin() && $query->is_main_query() && $query->is_search) {
    $query->set(‘post_type’, [‘product’, ‘page’, ‘post’]);
    }
    }
    add_action(‘pre_get_posts’, ‘prioritize_products_in_search’);

    2:Tweaked Search Ranking

    Where relevant, we added meta_query conditions to help highlight results with product-related fields or keywords, improving custom search accuracy and making custom fields searchable through the WordPress core search process.

    3: Cleaned Up the Layout

    We also updated the styling to clearly differentiate product search results from regular posts or pages on the search results page in WordPress, improving the overall user experience and helping visitors easily find what they’re looking for.

    4: Excluded Unwanted Results

    Certain pages were excluded altogether based on the client’s request — helping keep the results more relevant and conversion-focused and preventing page not found-type issues or irrelevant results from cluttering the search page.

    The Result

    Now, when users search, product pages are displayed first, followed by any relevant blog posts or static pages. No more dead ends or confusing results. This simple customization makes the default WordPress search engine behave more like an advanced search tool, ensuring customers can easily find what they want, especially on an online store or WooCommerce setup.

    Let Integriti Studio optimize your search experience.

    Frequently Asked Questions (How to Prioritize Products in WordPress Search Results)

    How do I change the order of products in WordPress?

    To change the order of products in WordPress, go to WooCommerce → Products, enable Sorting, and drag and drop products into the desired order. You can also edit a product and set a custom Menu Order value for precise control.

    How to do product prioritization?

    Product prioritization is done by ranking features or products based on business goals, customer impact, revenue potential, and effort. Use frameworks like MoSCoW, RICE, or value vs effort analysis to focus on high-impact, low-effort items first and align with strategy.

    How do you sort search results in WordPress?

    In WordPress, you can sort search results by modifying the query using WP_Query or the pre_get_posts hook. Results can be ordered by date, title, relevance, or custom fields. Plugins like SearchWP also allow advanced sorting without coding.

    How to customize search results page in WordPress?

    You can customize the WordPress search results page by editing the search.php file in your theme or child theme. Use custom WP_Query, change the layout with template tags, add filters, or use plugins to modify design, sorting, and displayed content.

  • 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 in the WordPress form system 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 found in many contact form plugin setups and form solutions.

    What We Found:

    • Default templates get replaced: The Everest Forms plugin for WordPress overwrites its core form email template during updates.
    • Inline styling was lost: Custom CSS and layout settings were tied to the default template, similar to how other WordPress plugins like WPForms, Fluent Forms, Contact Form 7, and Formidable Forms handle styling options.
    • Live vs. staging mismatch: A minor cosmetic difference appeared post-update but didn’t affect core functionality or email notifications triggered when a user submits a form.

    What We Did:

    • Created a custom email template: Replicated the design of the default email and saved it as a standalone, update-safe version for long-term customization of the contact form styling.
    • Used inline CSS: All styles were embedded directly into the HTML for email compatibility and stability, avoiding the need for heavy add-on configuration found in some premium or pro form builders.
    • Tested thoroughly on staging: Updates to all related Everest Forms plugins were tested for compatibility, similar to testing form plugin integrations or database-driven form entry behavior.
    • Verified design match post-deployment: Ensured the client-approved styling stayed consistent across environments regardless of plugin upgrade or installation differences.

    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, even when multiple plugins, fields, or settings are involved in a WordPress dashboard workflow.

    Struggling with plugin updates breaking your custom styles?

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

    Frequently Asked Questions (How to Protect Everest Forms Email Styling from Plugin Updates)

    Is it safe to update plugins in WordPress?

    Yes, updating plugins in WordPress is generally safe and recommended for security, performance, and compatibility. However, always take a full site backup first, update plugins one by one, and test your website after updates to avoid conflicts or functionality issues.

    How to update a WordPress plugin without losing customization?

    To update a WordPress plugin without losing customization, never edit plugin core files directly. Use child themes, custom plugins, hooks, filters, or CSS overrides instead. Always back up your site, test updates on staging, and review the plugin changelog before updating.

    How to connect contact form to email in WordPress?

    To connect a contact form to email in WordPress, install a form plugin like Contact Form 7, WPForms, or Gravity Forms. Configure the form’s notification settings with a valid email address. For reliable delivery, use an SMTP plugin to prevent emails going to spam.

    How to manually update a WordPress plugin?

    To manually update a WordPress plugin, download the latest plugin ZIP file from a trusted source. Go to Plugins → Add New → Upload Plugin, upload the ZIP, and replace the existing version. Alternatively, update via FTP by replacing the plugin folder. Always back up first.

  • 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. This was affecting the WordPress site structure because the taxonomy term order didn’t respect the custom date field. A legacy fix required a plugin toggle every quarter to manually input dates—leading to conflicts, inconsistent sorting, and issues when using custom taxonomies for content display.

    What We Did:

    • Created a permanent ‘Issue Date’ field:
      Added a custom date field to the mag_edition taxonomy using Advanced Custom Fields (ACF) and ACF taxonomy field configuration, 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. The backend now stores the field value properly using an ACF date structure that works smoothly with WordPress custom functionality.
    • Rebuilt the front-end dropdown logic:
      The dropdown now queries taxonomy terms using a dynamic array and sorts them in reverse chronological order using the new field. Instead of alphabetical display, it fetches the correct values via meta query parameters and processes them through custom query loops so WordPress taxonomies like mag_edition sort by actual dates.
    • Populated live dates:
      Historical magazine issues were updated with proper dates, so the dropdown reflects accurate ordering from oldest to newest. This ensures the taxonomy fields and custom date field values remain consistent with the custom post type relationships and prevent outdated default sorting behavior.
    Need help organizing your content better?

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

    Frequently Asked Questions (How to Sort WordPress Taxonomy Dropdowns by Date Using ACF)

    Can ACF taxonomy fields be sorted by date?

    Yes, ACF taxonomy dropdowns can be sorted by date using custom PHP filters. By modifying the get_terms query with arguments like orderby and meta_value, you can control term order based on creation date or custom term meta.

    Does WordPress support taxonomy sorting by default?

    By default, WordPress sorts taxonomy terms alphabetically. Sorting by date or custom fields requires custom code using get_terms, acf/load_field, or acf/fields/taxonomy/query filters.

    How do I sort taxonomy terms by custom date field in ACF?

    You can store a date as term meta using ACF, then hook into acf/fields/taxonomy/query and set meta_key, orderby => meta_value, and order => DESC to sort terms by that date field.

    Will this affect frontend taxonomy display?

    No, this customization only affects the ACF dropdown field in the admin or frontend form. It does not change how taxonomy terms are displayed on the website unless you apply similar sorting to frontend queries.

  • 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 Add Optimized Content Blocks Below WooCommerce Category Grids

    Issue Background:

    By default, WooCommerce category pages focus solely on product listings. While clean and visual, this structure limits on-page SEO and content area optimization:

    • Pages lack crawlable content for search engines.
    • Default category descriptions appear above products, not ideal for user flow or optimization.
    • Plugins like Yoast SEO help with meta data—but not with visible content display on category templates.

    An SEO team requested a block to add content beneath the product grid on the WooCommerce category page to improve indexing and keyword targeting.

    Diagnosis:

    • Yoast SEO couldn’t handle content injection below product listings.
    • The default description field was limited in placement and styling on WooCommerce product category pages or single product pages.
    • No existing WYSIWYG or user-editable field supported rich content per category, product block, or WooCommerce store template.

    Resolution Steps:

    1. Created a new ACF field:
      A WYSIWYG editor was added to WooCommerce product categories using Advanced Custom Fields PRO to customize WooCommerce settings, add blocks, or create a custom shop page template.
    1. Wrote a custom shortcode:
      A custom shortcode rendered the ACF field below product grids on archive templates, block displays, or product search block results.
    1. Tested and styled the content block:
      We verified compatibility with existing product category pages, store pages, and WooCommerce blocks, ensuring formatting held across grid or list layouts, mobile, and desktop.
    1. Flagged pagination concerns for future:
      Minor quirks with sidebar, number of products, and product grid blocks were observed during testing and documented for future template refinement in block settings panel.

    Final Outcome:

    Each product category page now includes an editable, SEO-optimized content area under the product listings. This gives content managers space to:

    • Add keyword-focused copy.
    • Link to related categories or landing pages.
    • Include images or helpful context for shoppers.

    It’s a clean, scalable solution to boost crawlability without compromising the shopping experience.

    Looking to improve ecommerce SEO without cluttering your layout?

    Integriti Studio builds flexible, editable content blocks that balance performance and design.

    ‍

  • 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 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 — wasting valuable time and resources.

    They wanted a simple, automatic way to stop this and only allow form submissions from within the defined service area using zip-code or address fields.

    What We Found

    • Gravity Forms doesn’t support this natively. Gravity forms’ default settings do not include zip validation or address-field checks. There’s no built-in ZIP code validation.
    • A custom solution was required using a predefined ZIP list, validation hook, and programming logic.
    • Initially, the client wanted this for one form, but later expanded it to cover all forms on the site, ensuring proper form validation, field validation, and form submission control.

    Implementation Steps

    Step 1: Create a ZIP Code List

    We converted the client’s list of 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 tied to the ZIP validation logic. Once confirmed, we pushed the code live using the developer snippet without risk. Conditional logic, email addresses, payment checks, WP_redirect, and Google Places API integration were tested to ensure full functionality per form.

    Step 4: Make It Global

    Later, we upgraded the logic to work across all contact forms by checking dynamically for any field labeled “ZIP Code,” so no need to edit each form individually. Gravity Forms comes with hooks and validation filters allowing per form customization, field IDs, string or digit entries, and array-based ZIP validation.

    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.

    ‍

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

    Issue Background

    A client needed to update a PDF stored in their Media Library. The problem? Changing the filename would break every instance where that file had been shared, including old URLs and direct links on their website or other web pages.

    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 and FTP servers would not process redirects for static files like PDFs. Redirects usually work for pages, posts, or attachment pages, but not media assets directly.

    Diagnosis

    ‍
    Standard redirect plugins, server settings, or regular expression rules couldn’t handle this scenario. The fix required a creative solution at the server and WordPress level—one that works with WordPress, handles PDF file URLs, preserves SEO, and allows visitors to access the new PDF automatically.

    Solution

    ✔️ Step 1: Rename the Old File

    ‍
    Using SFTP, FTP, or your hosting file manager, locate the original PDF in the upload folder 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.

    ‍

  • 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. Assigning multiple categories to each question enabled dynamic quizzes and quizzes using a question bank for localized access.

    Randomized Quiz Logic

    ‍
    Used learndash_get_quiz_questions() to fetch different set of questions each time for each student, even within the same region. This allowed creating quizzes with LearnDash that offer single choice questions, multiple correct answers, fill in the blank questions, drag and drop, matrix sorting choice, and other choice questions. The quiz builder and quiz creation process ensured each quiz is taken with a set of questions each time.

    Scheduling + Gated Access

    ‍
    LearnDash’s drip-feed features made it easy to control when each test appears, ensuring that quizzes using multiple categories and dynamic quizzes also maintain proper quiz settings, points for each question, and backend control over the entire quiz.

    Code-Based Access

    ‍
    We proposed a small add-on to generate unique test links + QR codes to simplify access per student. This custom code helped admins manage student performance and ensure that quizzes are taken in a controlled manner.

    Language Support

    ‍
    Set up multilingual quizzes with WPML and LearnDash’s translation tools, allowing quizzes also to support English and Spanish content while maintaining the selection of questions, correct answer tracking, and answer correct feedback.

    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.

    ‍

  • 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 plugins and settings caused backend errors—even for products now powered by Printify, affecting WooCommerce checkout reliability.

    Shipping Class Gaps

    Some Printify items didn’t have the right “shippable” shipping class, breaking fulfillment flows and ecommerce checkout process.

    Limited Pickup Clarity

    Local pickup was Florida-only, but the checkout page and product page didn’t clearly communicate pickup location or local pickup options to the shopper.

    Cart Feedback Missing

    Add-to-cart action just refreshed the page—no cart toggle, no confirmation, no prompt to continue, affecting smooth shopping experience and increasing cart abandonment risk.

    Fixes & Testing

    • Ran real test orders: one shipped via Printify, one marked for local 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, local pickup in WooCommerce, and conversion optimization, including checkout improvements, customization, and offering local pickup options for many store owners.

    ‍