Skip to main content
WP HealthKit

Protecting Customer Data in WooCommerce: PII Guide

May 7, 202619 min readWooCommerceBy Jamie

E-commerce stores handle sensitive customer information daily: names, addresses, payment data, and personal preferences. WooCommerce customer data protection PII isn't just a compliance requirement—it's a fundamental responsibility to your customers. When this data is mishandled or exposed, the consequences are severe: legal liability, reputation damage, and lost customer trust. This guide covers the complete landscape of protecting personally identifiable information in WooCommerce, from order data encryption and access controls to GDPR compliance and data minimization strategies.

Table of Contents

  1. Understanding PII in WooCommerce
  2. Data Classification and Inventory
  3. Encryption Strategies for Customer Data
  4. Implementing Access Controls
  5. GDPR Compliance for WooCommerce Stores
  6. Data Minimization Best Practices
  7. Audit Logging and Monitoring
  8. Frequently Asked Questions

Understanding PII in WooCommerce

Personally identifiable information (PII) is any data that can identify an individual. In a WooCommerce store, PII includes obvious elements like names and email addresses, but also less obvious data like IP addresses, order history, and behavioral tracking. WooCommerce customer data protection PII requires understanding what data you collect, why you collect it, and how it flows through your systems.

WooCommerce stores contain several categories of sensitive data:

Direct identifiers include customer names, email addresses, phone numbers, and physical addresses. These are the most obviously sensitive data points.

Quasi-identifiers like purchase history, product preferences, and browsing patterns can identify individuals when combined with other data sources. A customer's specific sequence of purchases might be unique enough to identify them even without their name.

Payment information including credit card numbers and payment method details is highly sensitive. WooCommerce handles this through tokenized payment processors, which is correct—you shouldn't store raw credit card data.

Derived data like customer lifetime value, geographical location, and behavioral segments created through analytics. This data might seem depersonalized but can re-identify individuals.

Metadata including user agent strings, IP addresses, device identifiers, and session tokens. While individually less sensitive, this metadata can collectively identify individuals.

Many WooCommerce store owners treat all this data equally when they should apply different protection levels. A customer email address needs protection, but it's less sensitive than a full name and shipping address combined with purchase history. Understanding this hierarchy helps you allocate security resources effectively.

The sensitivity classification of PII is crucial for building appropriate security controls. High-sensitivity data like customer names, addresses, and payment information requires encryption, strict access controls, and careful handling. Medium-sensitivity data like order history and product preferences requires access controls and audit logging but might not need encryption everywhere. Low-sensitivity data like page view counts or aggregate statistics can be less strictly controlled. By classifying your data appropriately, you can build a proportionate security approach that doesn't over-protect low-sensitivity data while ensuring high-sensitivity data receives maximum protection.

The interconnectedness of data is often overlooked in PII protection discussions. A single data point like an email address isn't very sensitive in isolation. But combine an email address with a customer's full name, address, phone number, and purchase history, and you have a detailed profile of an individual. WooCommerce stores naturally collect these data points together during the checkout process, creating comprehensive customer profiles. Understanding that these profile combinations are more sensitive than individual data points is essential for designing appropriate protection strategies.

Data Classification and Inventory

Before implementing WooCommerce customer data protection PII measures, you must know what data you have. Many stores collect information without intentionally storing it, then later discover it's been accumulating in logs, caches, or backups.

Create a data inventory by auditing your entire WooCommerce installation:

// Inventory script - identifies PII storage locations
<?php

// 1. Core WooCommerce customer meta
$customer = new WC_Customer( get_current_user_id() );
echo "First Name: " . $customer->get_first_name();
echo "Last Name: " . $customer->get_last_name();
echo "Email: " . $customer->get_email();
echo "Billing Address: " . $customer->get_billing_address_1();

// 2. Order data
$orders = wc_get_orders( array( 'customer' => get_current_user_id() ) );
foreach ( $orders as $order ) {
    // Order contains full billing/shipping addresses, email, phone
    $billing_address = $order->get_formatted_billing_address();
    
    // Order items may contain custom PII in meta
    foreach ( $order->get_items() as $item ) {
        $item_meta = $item->get_meta_data();
        // Check if custom fields contain PII
    }
}

// 3. WordPress user meta
$user_meta = get_user_meta( get_current_user_id() );
// Often contains phone numbers, company names, etc.

// 4. WooCommerce subscriptions (if using plugin)
if ( function_exists( 'wcs_get_subscriptions_for_customer' ) ) {
    $subscriptions = wcs_get_subscriptions_for_customer( get_current_user_id() );
    // Subscriptions contain recurring address data
}

// 5. Plugin-specific data
// Email subscription lists, loyalty programs, etc.

// 6. Log files and backups
// These often contain PII in error messages and data dumps
?>

Document each data source, its sensitivity level, retention period, and who has access. Here's a classification template:

Data TypeSensitivityRetentionAccess
Email addressMediumUntil deletionStore staff, admin
Full name + addressHighOrder period + 90 daysStore staff, admin
Phone numberMediumUntil deletionStore staff only
IP addressMedium90 daysAnalytics team
Payment method IDHighUntil deletionPayment processor
Order historyMedium7 years (tax)Admin, customer
Behavioral dataLow2 yearsAnalytics team

This inventory becomes your baseline for implementing appropriate protections. You can't protect what you don't know you have.

Encryption Strategies for Customer Data

Not all WooCommerce data needs encryption, but sensitive PII should be encrypted at rest and in transit. WooCommerce customer data protection PII through encryption adds a critical layer that protects against database breaches.

In-transit encryption is handled by HTTPS, which you should enforce on your entire WooCommerce store. Configure it properly:

// Force HTTPS in wp-config.php
define( 'FORCE_SSL_ADMIN', true );
define( 'FORCE_SSL_LOGIN', true );

// Or use this filter if you can't modify wp-config.php
add_action( 'init', function() {
    if ( ! is_ssl() ) {
        wp_safe_remote_post( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
        die();
    }
} );

Also configure HSTS headers to prevent protocol downgrade attacks:

// Add to wp-config.php or theme functions.php
add_action( 'send_headers', function() {
    header( 'Strict-Transport-Security: max-age=31536000; includeSubDomains; preload' );
    header( 'X-Content-Type-Options: nosniff' );
} );

At-rest encryption protects data stored in your database. WordPress doesn't provide built-in encryption, so you have options:

Option 1: Database-level encryption provided by managed hosting (AWS RDS, WP Engine, Kinsta). This encrypts the entire database transparently.

Option 2: Field-level encryption for specific sensitive fields using WordPress plugins or custom code:

// Simple encryption helper
class PII_Encrypption {
    private static $key = null;

    public static function init() {
        // Generate key from wp-config constants
        self::$key = defined( 'PII_ENCRYPTION_KEY' ) 
            ? PII_ENCRYPTION_KEY 
            : null;
    }

    public static function encrypt( $data ) {
        if ( ! self::$key ) return $data; // Fallback: don't encrypt
        
        $cipher = 'aes-256-gcm';
        $iv = openssl_random_pseudo_bytes( openssl_cipher_iv_length( $cipher ) );
        $tag = '';
        
        $encrypted = openssl_encrypt( 
            $data, 
            $cipher, 
            self::$key, 
            OPENSSL_RAW_DATA, 
            $iv, 
            $tag 
        );
        
        // Return base64-encoded: iv + tag + encrypted data
        return base64_encode( $iv . $tag . $encrypted );
    }

    public static function decrypt( $encoded_data ) {
        if ( ! self::$key ) return $encoded_data;
        
        $cipher = 'aes-256-gcm';
        $data = base64_decode( $encoded_data );
        $iv_length = openssl_cipher_iv_length( $cipher );
        
        $iv = substr( $data, 0, $iv_length );
        $tag = substr( $data, $iv_length, 16 );
        $encrypted = substr( $data, $iv_length + 16 );
        
        return openssl_decrypt(
            $encrypted,
            $cipher,
            self::$key,
            OPENSSL_RAW_DATA,
            $iv,
            $tag
        );
    }
}

PII_Encryption::init();

// Usage in WooCommerce
add_action( 'woocommerce_checkout_update_customer_data', function( $customer, $posted_data ) {
    // Encrypt sensitive customer meta
    $encrypted_phone = PII_Encryption::encrypt( $customer->get_billing_phone() );
    update_user_meta( $customer->get_id(), '_encrypted_phone', $encrypted_phone );
}, 10, 2 );

This approach requires careful key management. Store the encryption key outside your codebase:

// In wp-config.php or environment variables
define( 'PII_ENCRYPTION_KEY', getenv( 'PII_ENCRYPTION_KEY' ) );

For most WooCommerce stores, database-level encryption through managed hosting is preferable to field-level encryption because it's simpler and less error-prone.

Implementing Access Controls

Even with encryption, you must restrict who can access WooCommerce customer data protection PII. WordPress provides role-based access control, but it requires customization for proper data governance.

// Restrict customer data access by role
add_filter( 'woocommerce_admin_user_can_edit_order', function( $can_edit, $user_id, $order ) {
    $user = get_userdata( $user_id );
    
    // Only store managers and admins can edit customer data
    if ( ! in_array( 'manage_woocommerce', $user->get('capabilities'), true ) ) {
        return false;
    }
    
    return $can_edit;
}, 10, 3 );

// Log who accesses customer data
add_action( 'load-customer-edit.php', function() {
    $customer_id = isset( $_GET['user_id'] ) ? (int) $_GET['user_id'] : 0;
    if ( $customer_id ) {
        error_log( sprintf(
            'User #%d viewed customer #%d data at %s',
            get_current_user_id(),
            $customer_id,
            current_time( 'mysql' )
        ) );
    }
} );

// Restrict REST API access to customer data
add_filter( 'rest_customer_query', function( $args, $request ) {
    if ( ! current_user_can( 'manage_woocommerce' ) ) {
        return new WP_Error(
            'rest_forbidden',
            'Insufficient permissions to access customer data'
        );
    }
    return $args;
}, 10, 2 );

Create custom roles for different staff levels:

// Customer service role - can view orders but not modify
add_role( 'customer_service', 'Customer Service', array(
    'read'                    => true,
    'read_product'            => true,
    'read_shop_order'         => true,
    'read_shop_coupon'        => true,
    'manage_product_terms'    => false,
    'edit_product'            => false,
    'manage_options'          => false,
) );

// Accounting role - can view orders and financial reports
add_role( 'accounting', 'Accounting', array(
    'read'                    => true,
    'read_product'            => true,
    'read_shop_order'         => true,
    'manage_woocommerce'      => true, // For financial reports
    'edit_product'            => false,
    'manage_options'          => false,
) );

Implement data masking for non-admin views:

// Mask customer data for support staff
add_filter( 'woocommerce_order_get_billing_phone', function( $phone, $order ) {
    if ( ! current_user_can( 'manage_options' ) && ! is_admin() ) {
        // Show only last 4 digits
        return '***-***-' . substr( $phone, -4 );
    }
    return $phone;
}, 10, 2 );

add_filter( 'woocommerce_order_get_billing_email', function( $email, $order ) {
    if ( ! current_user_can( 'manage_options' ) ) {
        // Show only domain
        list( $local, $domain ) = explode( '@', $email );
        return str_repeat( '*', strlen( $local ) - 1 ) . substr( $local, -1 ) . '@' . $domain;
    }
    return $email;
}, 10, 2 );

GDPR Compliance for WooCommerce Stores

WooCommerce customer data protection PII and GDPR compliance are deeply connected. GDPR requires data minimization, purpose limitation, and consumer rights over their data.

Implement the right to be forgotten:

// Handle customer data deletion requests
add_action( 'wp_ajax_delete_customer_data', function() {
    check_ajax_referer( 'delete_customer_nonce' );
    
    $customer_id = (int) $_POST['customer_id'];
    
    // Verify current user is the customer or admin
    if ( get_current_user_id() !== $customer_id && ! current_user_can( 'manage_woocommerce' ) ) {
        wp_send_json_error( 'Insufficient permissions' );
    }
    
    // Archive orders instead of deleting
    $orders = wc_get_orders( array( 'customer' => $customer_id ) );
    foreach ( $orders as $order ) {
        // Remove sensitive data but keep order number for records
        $order->set_billing_first_name( '' );
        $order->set_billing_last_name( '' );
        $order->set_billing_email( '[email protected]' );
        $order->set_billing_phone( '' );
        $order->set_billing_address_1( '' );
        $order->set_billing_city( '' );
        $order->set_billing_postcode( '' );
        $order->set_billing_country( '' );
        $order->save();
        
        // Add meta note
        $order->add_meta_data( '_data_deletion_date', current_time( 'mysql' ) );
        $order->add_meta_data( '_deleted_by', get_current_user_id() );
        $order->save();
    }
    
    // Delete customer account
    wp_delete_user( $customer_id, 0 ); // 0 = don't reassign posts
    
    wp_send_json_success( 'Customer data deleted' );
} );

Implement data export functionality:

// Generate downloadable customer data export
add_action( 'wp_ajax_export_customer_data', function() {
    check_ajax_referer( 'export_data_nonce' );
    
    $customer_id = (int) $_POST['customer_id'];
    
    if ( get_current_user_id() !== $customer_id && ! current_user_can( 'manage_woocommerce' ) ) {
        wp_send_json_error( 'Insufficient permissions' );
    }
    
    $customer = new WC_Customer( $customer_id );
    
    $export_data = array(
        'customer' => array(
            'id' => $customer->get_id(),
            'email' => $customer->get_email(),
            'first_name' => $customer->get_first_name(),
            'last_name' => $customer->get_last_name(),
            'phone' => get_user_meta( $customer_id, 'billing_phone', true ),
        ),
        'addresses' => array(
            'billing' => array(
                'address_1' => $customer->get_billing_address_1(),
                'address_2' => $customer->get_billing_address_2(),
                'city' => $customer->get_billing_city(),
                'postcode' => $customer->get_billing_postcode(),
                'country' => $customer->get_billing_country(),
            ),
            'shipping' => array(
                'address_1' => $customer->get_shipping_address_1(),
                'address_2' => $customer->get_shipping_address_2(),
                'city' => $customer->get_shipping_city(),
                'postcode' => $customer->get_shipping_postcode(),
                'country' => $customer->get_shipping_country(),
            )
        ),
        'orders' => array()
    );
    
    $orders = wc_get_orders( array( 'customer' => $customer_id ) );
    foreach ( $orders as $order ) {
        $export_data['orders'][] = array(
            'id' => $order->get_id(),
            'date' => $order->get_date_created()->format( 'Y-m-d' ),
            'total' => $order->get_total(),
            'status' => $order->get_status(),
            'items' => array_map( function( $item ) {
                return array(
                    'name' => $item->get_name(),
                    'quantity' => $item->get_quantity(),
                    'total' => $item->get_total(),
                );
            }, $order->get_items() ),
        );
    }
    
    // Generate JSON file
    header( 'Content-Type: application/json' );
    header( 'Content-Disposition: attachment; filename="customer-data-' . $customer_id . '.json"' );
    echo json_encode( $export_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES );
    die();
} );

Configure cookie consent properly:

// Only load tracking scripts after consent
add_action( 'wp_head', function() {
    if ( ! isset( $_COOKIE['analytics_consent'] ) ) {
        // Don't load Google Analytics, Facebook Pixel, etc.
        return;
    }
    
    // Load analytics scripts only when user consents
    ?>
    <!-- Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=GA_ID"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        gtag('config', 'GA_ID', { 'anonymize_ip': true });
    </script>
    <?php
} );

Data Minimization Best Practices

Collecting less data is the most effective WooCommerce customer data protection PII strategy. Every field you request is a potential liability.

Review your checkout form:

// Disable unnecessary fields
add_filter( 'woocommerce_checkout_fields', function( $fields ) {
    // Remove company field if not needed
    unset( $fields['billing']['billing_company'] );
    
    // Remove second address line if not needed
    unset( $fields['billing']['billing_address_2'] );
    
    // Make phone optional
    $fields['billing']['billing_phone']['required'] = false;
    
    return $fields;
} );

Limit data retention:

// Automatically delete old guest checkout data
add_action( 'wp_scheduled_event_delete_old_orders', function() {
    global $wpdb;
    
    // Delete guest orders older than 90 days
    $ninety_days_ago = date( 'Y-m-d H:i:s', strtotime( '-90 days' ) );
    
    $guest_orders = $wpdb->get_col( $wpdb->prepare( "
        SELECT ID FROM {$wpdb->posts}
        WHERE post_type = 'shop_order'
        AND post_date < %s
        AND post_author = 0
    ", $ninety_days_ago ) );
    
    foreach ( $guest_orders as $order_id ) {
        wp_delete_post( $order_id, true );
    }
} );

// Schedule the cleanup
if ( ! wp_next_scheduled( 'wp_scheduled_event_delete_old_orders' ) ) {
    wp_schedule_event( time(), 'daily', 'wp_scheduled_event_delete_old_orders' );
}

Disable customer accounts if not needed:

// For stores that don't require accounts, disable registration
add_filter( 'woocommerce_checkout_registration_enabled', function() {
    return false;
} );

add_filter( 'woocommerce_checkout_login_required', function() {
    return false;
} );

Audit Logging and Monitoring

Comprehensive logging enables you to detect and investigate WooCommerce customer data protection PII breaches.

// Implement audit logging for sensitive data access
class PII_Audit_Log {
    public static function log_access( $customer_id, $action = 'view' ) {
        global $wpdb;
        
        $wpdb->insert(
            'wp_pii_audit_log',
            array(
                'user_id'       => get_current_user_id(),
                'customer_id'   => $customer_id,
                'action'        => $action,
                'ip_address'    => sanitize_text_field( $_SERVER['REMOTE_ADDR'] ),
                'timestamp'     => current_time( 'mysql' ),
                'user_agent'    => sanitize_text_field( $_SERVER['HTTP_USER_AGENT'] ),
            ),
            array( '%d', '%d', '%s', '%s', '%s', '%s' )
        );
    }
    
    public static function get_suspicious_activity( $customer_id, $hours = 24 ) {
        global $wpdb;
        
        $time_ago = date( 'Y-m-d H:i:s', strtotime( "-{$hours} hours" ) );
        
        return $wpdb->get_results( $wpdb->prepare( "
            SELECT user_id, COUNT(*) as access_count
            FROM wp_pii_audit_log
            WHERE customer_id = %d
            AND timestamp > %s
            GROUP BY user_id
            HAVING access_count > 10
        ", $customer_id, $time_ago ) );
    }
}

// Log on customer data access
add_action( 'load-customer-edit.php', function() {
    $customer_id = isset( $_GET['user_id'] ) ? (int) $_GET['user_id'] : 0;
    if ( $customer_id ) {
        PII_Audit_Log::log_access( $customer_id, 'view' );
    }
} );

// Monitor suspicious patterns
add_action( 'admin_init', function() {
    $suspicious = PII_Audit_Log::get_suspicious_activity( get_current_user_id() );
    if ( ! empty( $suspicious ) ) {
        // Trigger alert to admin
        error_log( 'Suspicious customer data access detected: ' . json_encode( $suspicious ) );
    }
} );

Ready to strengthen your WooCommerce data security? WP HealthKit's plugin auditing system identifies gaps in customer data protection, access controls, and GDPR compliance. Upload your store's plugins to receive detailed security recommendations and ensure your customer data is properly protected.


Additional Resources

Broader Context and Best Practices

WooCommerce security carries heightened importance because of the financial and personal data flowing through every transaction. Unlike a blog plugin where a security breach might expose usernames and email addresses, a WooCommerce vulnerability can expose payment card data, order histories, shipping addresses, and purchase patterns. This sensitive data combination makes WooCommerce extensions particularly attractive targets for attackers and subjects them to additional regulatory requirements like PCI DSS. Plugin developers working in the WooCommerce ecosystem must understand these elevated security requirements and design their code accordingly.

The WooCommerce extension ecosystem's complexity creates unique security challenges that don't exist in standard WordPress plugin development. Extensions interact with the checkout flow, modify order processing, handle subscription renewals, and manage customer accounts. Each interaction point represents a potential security boundary where data validation and authorization must be carefully implemented. A single extension that improperly handles order totals, fails to validate coupon applications, or allows unauthorized access to customer data can compromise the entire store's integrity.

Payment data handling in WooCommerce extensions requires understanding the principle of minimal data exposure. Extensions should never store full payment card numbers, and they should minimize their interaction with sensitive payment data to only what is absolutely necessary for their functionality. This minimization reduces the extension's PCI DSS scope and limits the potential damage from a security breach. WP HealthKit's WooCommerce-specific audit checks verify that extensions follow these data minimization principles and flag any patterns that suggest unnecessary payment data retention or exposure.

WooCommerce's REST API and webhook system provide powerful integration capabilities but also expand the attack surface of any store. Extensions that register custom REST endpoints or process webhook payloads must implement proper authentication, input validation, and rate limiting. The combination of financial data accessibility through APIs and the automated nature of webhook processing makes these integration points prime targets for exploitation. Understanding how to secure WooCommerce API integrations is essential knowledge for any developer building extensions for the platform.

Broader Context and Best Practices

WooCommerce security carries heightened importance because of the financial and personal data flowing through every transaction. Unlike a blog plugin where a security breach might expose usernames and email addresses, a WooCommerce vulnerability can expose payment card data, order histories, shipping addresses, and purchase patterns. This sensitive data combination makes WooCommerce extensions particularly attractive targets for attackers and subjects them to additional regulatory requirements like PCI DSS. Plugin developers working in the WooCommerce ecosystem must understand these elevated security requirements and design their code accordingly.

The WooCommerce extension ecosystem's complexity creates unique security challenges that don't exist in standard WordPress plugin development. Extensions interact with the checkout flow, modify order processing, handle subscription renewals, and manage customer accounts. Each interaction point represents a potential security boundary where data validation and authorization must be carefully implemented. A single extension that improperly handles order totals, fails to validate coupon applications, or allows unauthorized access to customer data can compromise the entire store's integrity.

Frequently Asked Questions

Do I need to encrypt customer data if my hosting provider handles encryption?

Database-level encryption from your hosting provider protects against database theft, which covers most breach scenarios. However, field-level encryption adds a security layer that protects against internal threats and breaches of your entire infrastructure. For highly sensitive data like full names with addresses and payment details, both layers are worth considering.

What's the difference between anonymization and pseudonymization?

Anonymization removes all data that could identify an individual—it's irreversible and the data is no longer personal data under GDPR. Pseudonymization (using hashes or encryption with retained keys) still allows re-identification. For GDPR purposes, only true anonymization eliminates privacy obligations.

How long should I keep customer PII for tax purposes?

Tax retention requirements vary by jurisdiction but are typically 5-7 years. However, you don't need to keep personal details like phone numbers and addresses that long—you can archive the order number and amounts while deleting the identifiable information after a shorter period.

Can I use customer IP addresses for fraud detection?

Yes, but IP addresses are PII under GDPR, so you must have a legitimate interest in collecting them and provide notice. Many stores enable IP anonymization in their analytics tools to reduce this burden while maintaining fraud protection.

What should I do if I discover a data breach?

Immediately isolate affected systems, determine what data was accessed, and notify affected customers and authorities within the required timeframe (typically 72 hours in GDPR jurisdictions). Work with a security professional to understand how the breach occurred and implement corrective measures.

Is it safe to store payment card data myself?

No. You should never store complete credit card numbers in WooCommerce. Use payment processors that handle PCI compliance (Stripe, Square, etc.) and tokenize the data. Never implement your own credit card processing.

WP HealthKit automates this entire process across its 17 verification layers, catching issues that manual review would miss. Whether you're a solo developer or managing an agency portfolio, automated scanning saves hours of manual review time.

Conclusion

WooCommerce customer data protection PII is a multi-faceted responsibility combining technical controls, access governance, regulatory compliance, and responsible data practices. By implementing encryption, access controls, audit logging, and data minimization strategies, you create multiple layers of protection that guard against both external threats and internal misuse.

The most important principle is understanding that customer data is a liability, not an asset. Collect only what you need, keep it only as long as necessary, and protect it as if your business depends on it—because it does. Regular audits and monitoring ensure your protections remain effective as your store grows.

Make data protection a core part of your WooCommerce security strategy. Use WP HealthKit to regularly audit your plugins and infrastructure for data handling vulnerabilities. Start your comprehensive security audit today to ensure your customer data protection practices meet current standards and regulations.

For additional context, review our guides on GDPR compliance for plugins and GDPR data export implementation, and explore our plugin ecosystem audit capabilities for complete security visibility.

Ready to audit your plugin?

WP HealthKit checks for all the issues in this article and 40+ more across 49 verification layers.

Comments

Protecting Customer Data in WooCommerce: PII Guide | WP HealthKit