This guide is for developers who want to customize data feeds. Basic PHP and WordPress development knowledge is required. Always test customizations in a staging environment first.

Overview

The PureClarity WooCommerce plugin provides several hooks and filters that allow developers to customize the data that is sent to PureClarity. This enables advanced customizations for specific business requirements.
Feed modifications can affect recommendation quality. Test thoroughly and monitor results when implementing custom feed logic.

Available Hooks and Filters

Product Feed Customization

Product Data Filter
// Modify product data before sending to PureClarity
add_filter('pureclarity_product_data', 'custom_product_data', 10, 2);

function custom_product_data($product_data, $product_id) {
    // Add custom fields
    $product_data['custom_field'] = get_post_meta($product_id, 'custom_meta_key', true);
    
    // Modify existing fields
    $product_data['description'] = strip_tags($product_data['description']);
    
    // Add computed values
    $product_data['profit_margin'] = calculate_profit_margin($product_id);
    
    return $product_data;
}
Product Exclusion Filter
// Exclude specific products from feeds
add_filter('pureclarity_exclude_product', 'custom_product_exclusion', 10, 2);

function custom_product_exclusion($exclude, $product_id) {
    $product = wc_get_product($product_id);
    
    // Exclude products with specific attributes
    if ($product->get_attribute('exclude_from_recommendations')) {
        return true;
    }
    
    // Exclude based on custom business logic
    if (custom_business_logic($product)) {
        return true;
    }
    
    return $exclude;
}

Category Feed Customization

Category Data Filter
// Modify category data before sending
add_filter('pureclarity_category_data', 'custom_category_data', 10, 2);

function custom_category_data($category_data, $category_id) {
    // Add custom category metadata
    $category_data['custom_sort_order'] = get_term_meta($category_id, 'sort_order', true);
    
    // Add SEO information
    $category_data['seo_title'] = get_term_meta($category_id, 'seo_title', true);
    
    return $category_data;
}

User Feed Customization

User Data Filter
// Extend user data with custom information
add_filter('pureclarity_user_data', 'custom_user_data', 10, 2);

function custom_user_data($user_data, $user_id) {
    // Add customer segment information
    $user_data['customer_segment'] = get_user_meta($user_id, 'customer_segment', true);
    
    // Add loyalty program data
    $user_data['loyalty_points'] = get_user_meta($user_id, 'loyalty_points', true);
    
    // Add purchase history summary
    $user_data['total_orders'] = count_user_orders($user_id);
    $user_data['average_order_value'] = calculate_average_order_value($user_id);
    
    return $user_data;
}
Custom user data helps PureClarity create more accurate customer segments and personalized recommendations.

Advanced Customizations

Custom Product Attributes

Adding Third-Party Plugin Data
// Integrate with Advanced Custom Fields (ACF)
add_filter('pureclarity_product_data', 'add_acf_fields', 10, 2);

function add_acf_fields($product_data, $product_id) {
    if (function_exists('get_field')) {
        $product_data['brand'] = get_field('product_brand', $product_id);
        $product_data['material'] = get_field('product_material', $product_id);
        $product_data['size_guide'] = get_field('size_guide_url', $product_id);
    }
    
    return $product_data;
}
Dynamic Pricing Integration
// Include dynamic pricing information
add_filter('pureclarity_product_data', 'add_dynamic_pricing', 10, 2);

function add_dynamic_pricing($product_data, $product_id) {
    $product = wc_get_product($product_id);
    
    // Get role-based pricing
    $current_user = wp_get_current_user();
    $user_roles = $current_user->roles;
    
    if (in_array('wholesale', $user_roles)) {
        $product_data['wholesale_price'] = get_wholesale_price($product_id);
    }
    
    // Include bulk pricing tiers
    $product_data['bulk_pricing'] = get_bulk_pricing_tiers($product_id);
    
    return $product_data;
}

Custom Business Logic

Multi-Language Support
// Add WPML/Polylang language data
add_filter('pureclarity_product_data', 'add_language_data', 10, 2);

function add_language_data($product_data, $product_id) {
    // WPML integration
    if (function_exists('icl_get_languages')) {
        $product_data['language'] = ICL_LANGUAGE_CODE;
        $product_data['translations'] = get_product_translations($product_id);
    }
    
    return $product_data;
}
Inventory Management Integration
// Advanced inventory tracking
add_filter('pureclarity_product_data', 'add_inventory_data', 10, 2);

function add_inventory_data($product_data, $product_id) {
    $product = wc_get_product($product_id);
    
    // Add detailed stock information
    $product_data['stock_status'] = $product->get_stock_status();
    $product_data['stock_quantity'] = $product->get_stock_quantity();
    $product_data['backorders_allowed'] = $product->get_backorders();
    
    // Add restock date if available
    $restock_date = get_post_meta($product_id, 'restock_date', true);
    if ($restock_date) {
        $product_data['restock_date'] = $restock_date;
    }
    
    return $product_data;
}
Include inventory data to enable PureClarity to avoid recommending out-of-stock products or prioritize items with higher availability.

Feed Processing Hooks

Pre-Processing Hooks

Before Feed Generation
// Perform actions before feed processing starts
add_action('pureclarity_before_feed_generation', 'before_feed_processing');

function before_feed_processing($feed_type) {
    // Log feed start
    error_log("Starting {$feed_type} feed generation at " . current_time('mysql'));
    
    // Prepare data if needed
    if ($feed_type === 'product') {
        update_custom_product_cache();
    }
    
    // Send notification
    wp_mail('admin@example.com', 'Feed Started', "Starting {$feed_type} feed");
}

Post-Processing Hooks

After Feed Completion
// Actions after feed processing completes
add_action('pureclarity_after_feed_generation', 'after_feed_processing', 10, 2);

function after_feed_processing($feed_type, $result) {
    // Log completion
    $status = $result ? 'successful' : 'failed';
    error_log("Feed {$feed_type} completed with status: {$status}");
    
    // Update analytics
    update_feed_analytics($feed_type, $result);
    
    // Trigger related processes
    if ($feed_type === 'product' && $result) {
        trigger_search_index_update();
    }
}

Error Handling and Validation

Custom Validation

Product Data Validation
// Validate product data before sending
add_filter('pureclarity_validate_product_data', 'validate_product_data', 10, 2);

function validate_product_data($is_valid, $product_data) {
    // Required fields validation
    $required_fields = ['id', 'title', 'price', 'image'];
    
    foreach ($required_fields as $field) {
        if (empty($product_data[$field])) {
            error_log("Product {$product_data['id']} missing required field: {$field}");
            return false;
        }
    }
    
    // Custom business rules
    if ($product_data['price'] <= 0) {
        error_log("Product {$product_data['id']} has invalid price: {$product_data['price']}");
        return false;
    }
    
    return $is_valid;
}

Error Logging

Custom Error Handling
// Enhanced error logging
add_action('pureclarity_feed_error', 'custom_error_handling', 10, 3);

function custom_error_handling($error_message, $feed_type, $context) {
    // Log to custom file
    $log_file = WP_CONTENT_DIR . '/pureclarity-errors.log';
    $timestamp = current_time('Y-m-d H:i:s');
    $log_entry = "[{$timestamp}] {$feed_type}: {$error_message} - Context: " . json_encode($context) . "\n";
    
    file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX);
    
    // Send critical error notifications
    if (strpos($error_message, 'critical') !== false) {
        wp_mail('admin@example.com', 'Critical PureClarity Error', $error_message);
    }
}

Performance Optimization

Batch Processing Customization

// Customize batch processing
add_filter('pureclarity_feed_batch_size', 'custom_batch_size', 10, 2);

function custom_batch_size($batch_size, $feed_type) {
    // Adjust batch size based on server resources
    if ($feed_type === 'product') {
        // Smaller batches for product feeds with many custom fields
        return 50;
    }
    
    return $batch_size;
}

Caching Integration

// Implement custom caching for expensive operations
add_filter('pureclarity_product_data', 'cached_product_data', 10, 2);

function cached_product_data($product_data, $product_id) {
    $cache_key = "pureclarity_product_data_{$product_id}";
    $cached_data = wp_cache_get($cache_key);
    
    if ($cached_data !== false) {
        return array_merge($product_data, $cached_data);
    }
    
    // Expensive computation
    $custom_data = perform_expensive_calculation($product_id);
    
    // Cache for 1 hour
    wp_cache_set($cache_key, $custom_data, '', 3600);
    
    return array_merge($product_data, $custom_data);
}
Be cautious with caching duration. Product data that changes frequently should have shorter cache times to ensure accuracy.

Testing and Debugging

Debug Output

// Add debug information to feeds
add_action('pureclarity_debug_product_data', 'debug_product_data', 10, 2);

function debug_product_data($product_data, $product_id) {
    if (defined('WP_DEBUG') && WP_DEBUG) {
        error_log("Product {$product_id} data: " . json_encode($product_data));
    }
}

Test Mode Enhancements

// Special handling for test environments
add_filter('pureclarity_product_data', 'test_mode_modifications', 10, 2);

function test_mode_modifications($product_data, $product_id) {
    if (wp_get_environment_type() === 'development') {
        // Add test identifiers
        $product_data['test_mode'] = true;
        $product_data['debug_id'] = "test_{$product_id}";
    }
    
    return $product_data;
}

Best Practices

Code Organization

Create a Custom Plugin
<?php
/**
 * Plugin Name: PureClarity Custom Extensions
 * Description: Custom modifications for PureClarity WooCommerce integration
 * Version: 1.0.0
 */

// Prevent direct access
if (!defined('ABSPATH')) {
    exit;
}

class PureClarityCustomExtensions {
    public function __construct() {
        add_action('init', array($this, 'init'));
    }
    
    public function init() {
        // Initialize customizations
        $this->add_product_filters();
        $this->add_category_filters();
        $this->add_user_filters();
    }
    
    private function add_product_filters() {
        add_filter('pureclarity_product_data', array($this, 'modify_product_data'), 10, 2);
    }
    
    // Additional methods...
}

new PureClarityCustomExtensions();

Documentation

Comment Your Code
/**
 * Add custom brand information to product feed
 * 
 * @param array $product_data Existing product data
 * @param int   $product_id   WooCommerce product ID
 * @return array Modified product data with brand information
 */
function add_brand_data($product_data, $product_id) {
    // Implementation here
}