Skip to main content

Developer Hooks and API

This comprehensive reference covers all available hooks, filters, and API endpoints for extending and customizing the Live Carts for WooCommerce plugin.

Table of Contents

Action Hooks

The plugin provides several action hooks that fire during cart lifecycle events.

Cart Creation and Loading

phplugins_live_carts_cart_created

Fires when a new cart is initially created and saved to the database.

Parameters:

  • $cart_id (string): Unique cart identifier
  • $user_id (int): WordPress user ID (0 for guests)
  • $cart_data (array): Complete cart data array

Example:

add_action('phplugins_live_carts_cart_created', function($cart_id, $user_id, $cart_data) {
// Log new cart creation
error_log("New cart created: {$cart_id} for user {$user_id}");

// Send analytics event
analytics_track('cart_created', [
'cart_id' => $cart_id,
'user_id' => $user_id,
'value' => $cart_data['value']
]);
});

phplugins_live_carts_cart_loaded

Triggers when an existing cart is loaded from the session.

Parameters:

  • $cart_id (string): Cart identifier
  • $cart_data (array): Cart data from database

Example:

add_action('phplugins_live_carts_cart_loaded', function($cart_id, $cart_data) {
// Track cart resume events
update_user_meta($cart_data['user_id'], 'last_cart_resume', current_time('mysql'));
});

Cart Activity Tracking

phplugins_live_carts_cart_seen

Fires whenever cart activity is detected (page loads, updates, etc.).

Parameters:

  • $cart_id (string): Cart identifier
  • $activity_data (array): Activity information including URL, timestamp

Example:

add_action('phplugins_live_carts_cart_seen', function($cart_id, $activity_data) {
// Track customer behavior patterns
$patterns = get_option('cart_behavior_patterns', []);
$patterns[$cart_id][] = [
'timestamp' => $activity_data['timestamp'],
'url' => $activity_data['url']
];
update_option('cart_behavior_patterns', $patterns);
});

phplugins_live_carts_cart_contents_updated

Triggers when cart contents are modified (items added, removed, or quantities changed).

Parameters:

  • $cart_id (string): Cart identifier
  • $old_contents (array): Previous cart contents
  • $new_contents (array): Updated cart contents

Example:

add_action('phplugins_live_carts_cart_contents_updated', function($cart_id, $old_contents, $new_contents) {
// Track product addition/removal patterns
$old_count = count($old_contents);
$new_count = count($new_contents);

if ($new_count > $old_count) {
// Product added
do_action('custom_product_added_to_cart', $cart_id, $new_contents);
} elseif ($new_count < $old_count) {
// Product removed
do_action('custom_product_removed_from_cart', $cart_id, $old_contents, $new_contents);
}
});

Cart Status Changes

phplugins_live_carts_cart_abandoned

Fires when a cart is marked as abandoned due to inactivity.

Parameters:

  • $cart_id (string): Cart identifier
  • $cart_data (array): Complete cart information

Example:

add_action('phplugins_live_carts_cart_abandoned', function($cart_id, $cart_data) {
// Trigger abandoned cart email campaign
if ($cart_data['value'] > 50 && $cart_data['user_id'] > 0) {
wp_schedule_single_event(
time() + (1 * HOUR_IN_SECONDS),
'send_abandoned_cart_email',
[$cart_id, $cart_data['user_id']]
);
}

// Log abandonment for analytics
do_action('ecommerce_event_track', 'cart_abandoned', [
'cart_value' => $cart_data['value'],
'items_count' => count($cart_data['contents'] ?? [])
]);
});

phplugins_live_carts_cart_converted

Triggers when a cart is successfully converted to an order.

Parameters:

  • $cart_id (string): Cart identifier
  • $order_id (int): WooCommerce order ID
  • $cart_data (array): Cart data at time of conversion

Example:

add_action('phplugins_live_carts_cart_converted', function($cart_id, $order_id, $cart_data) {
// Calculate cart lifetime
$created_time = strtotime($cart_data['created']);
$conversion_time = current_time('timestamp');
$cart_lifetime = $conversion_time - $created_time;

// Update conversion analytics
update_post_meta($order_id, '_cart_id', $cart_id);
update_post_meta($order_id, '_cart_lifetime_seconds', $cart_lifetime);

// Send conversion event to analytics
analytics_track('cart_converted', [
'cart_id' => $cart_id,
'order_id' => $order_id,
'lifetime_minutes' => round($cart_lifetime / 60, 2),
'final_value' => $cart_data['value']
]);
});

Filter Hooks

Filter hooks allow you to modify plugin behavior and data.

Pro Version Specific Filters

phplugins_live_carts_admin_cart_contents

Modify the cart contents display in admin interface (Pro version extends this for editing).

Parameters:

  • $html (string): Generated HTML content
  • $cart_data (object): Cart data object
  • $contents (array): Cart contents array

Return: Modified HTML string

Example:

add_filter('phplugins_live_carts_admin_cart_contents', function($html, $cart_data, $contents) {
// Add custom cart analysis before editing interface
$analysis = '<div class="custom-cart-analysis">';
$analysis .= '<h4>Cart Analysis</h4>';
$analysis .= '<p>High-value cart: ' . ($cart_data->value > 100 ? 'Yes' : 'No') . '</p>';
$analysis .= '</div>';

return $analysis . $html;
}, 15, 3); // Priority 15 to run before Pro editing (priority 20)

Data Modification Filters

phplugins_live_carts_cart_insert

Modify cart data before insertion into database.

Parameters:

  • $cart_data (array): Cart data to be inserted

Return: Modified cart data array

Example:

add_filter('phplugins_live_carts_cart_insert', function($cart_data) {
// Add custom metadata
$cart_data['custom_source'] = $_GET['utm_source'] ?? 'direct';
$cart_data['device_type'] = wp_is_mobile() ? 'mobile' : 'desktop';

return $cart_data;
});

phplugins_live_carts_cart_ip_address

Filter the IP address before storing.

Parameters:

  • $ip_address (string): Detected IP address
  • $cart_id (string): Cart identifier

Return: Filtered IP address string

Example:

add_filter('phplugins_live_carts_cart_ip_address', function($ip_address, $cart_id) {
// Anonymize IP for privacy
if (strpos($ip_address, '.') !== false) {
// IPv4
$parts = explode('.', $ip_address);
$parts[3] = '0';
return implode('.', $parts);
}
return $ip_address;
}, 10, 2);

Display and Frontend Filters

phplugins_live_carts_frontend_cart_id_html

Customize the HTML output of cart ID on frontend.

Parameters:

  • $html (string): Default HTML output
  • $cart_id (string): Cart identifier

Return: Modified HTML string

Example:

add_filter('phplugins_live_carts_frontend_cart_id_html', function($html, $cart_id) {
return sprintf(
'<div class="custom-cart-id">
<span class="cart-label">Your Cart:</span>
<strong class="cart-id">%s</strong>
<button onclick="copyCartId(\'%s\')" class="copy-btn">Copy</button>
</div>',
$cart_id,
$cart_id
);
}, 10, 2);

Configuration Filters

phplugins_live_carts_track_revisions

Control whether cart content revisions are tracked.

Parameters:

  • $track_revisions (bool): Whether to track revisions
  • $cart_id (string): Cart identifier

Return: Boolean value

Example:

add_filter('phplugins_live_carts_track_revisions', function($track_revisions, $cart_id) {
// Only track revisions for carts with high value
global $woocommerce;
$cart_total = $woocommerce->cart->get_total('raw');

return $cart_total > 100; // Only track if cart > $100
}, 10, 2);

phplugins_live_carts_abandon_time

Customize the time before carts are considered abandoned.

Parameters:

  • $abandon_time (int): Default abandon time in seconds (7200 = 2 hours)

Return: Modified abandon time in seconds

Example:

add_filter('phplugins_live_carts_abandon_time', function($abandon_time) {
// Different abandon times based on user role
if (current_user_can('subscriber')) {
return 3600; // 1 hour for subscribers
}
if (current_user_can('customer')) {
return 4 * 3600; // 4 hours for customers
}
return $abandon_time; // Default for others
});

phplugins_live_carts_archive_time

Modify how long before carts are archived.

Parameters:

  • $archive_time (int): Default archive time in seconds (30 days)

Return: Modified archive time in seconds

Example:

add_filter('phplugins_live_carts_archive_time', function($archive_time) {
// Archive faster for development, slower for production
if (defined('WP_DEBUG') && WP_DEBUG) {
return 7 * DAY_IN_SECONDS; // 7 days in debug mode
}
return 90 * DAY_IN_SECONDS; // 90 days in production
});

REST API Endpoints

The plugin provides REST API endpoints compatible with WooCommerce Analytics.

Stats Endpoint

Endpoint: /wp-json/wc-analytics/reports/phplugins-carts/stats
Method: GET
Authentication: WooCommerce Admin permissions required

Parameters

ParameterTypeDescriptionDefault
afterstringStart date (ISO 8601 format)30 days ago
beforestringEnd date (ISO 8601 format)Current date
intervalstringData grouping (day, week, month)day
statusstringFilter by cart statusall

Response Format

{
"totals": {
"carts_created": 150,
"carts_converted": 45,
"carts_abandoned": 90,
"conversion_rate": 30.0,
"abandonment_rate": 60.0,
"average_cart_value": 85.50
},
"intervals": [
{
"interval": "2023-11-01",
"date_start": "2023-11-01T00:00:00",
"date_end": "2023-11-01T23:59:59",
"subtotals": {
"carts_created": 12,
"carts_converted": 4,
"carts_abandoned": 7,
"conversion_rate": 33.33,
"abandonment_rate": 58.33,
"average_cart_value": 92.25
}
}
]
}

Custom API Usage Example

// Create custom endpoint extending the stats controller
add_action('rest_api_init', function() {
register_rest_route('custom/v1', '/cart-insights', [
'methods' => 'GET',
'callback' => function($request) {
global $wpdb;

$table = $wpdb->prefix . 'phplugins_carts';

// Get top abandoned products
$abandoned_products = $wpdb->get_results("
SELECT
cc.contents,
COUNT(*) as abandon_count
FROM {$table} c
JOIN {$wpdb->prefix}phplugins_cart_contents cc ON c.cart_id = cc.cart_id
WHERE c.status = 'abandoned'
AND c.created > DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY cc.contents
ORDER BY abandon_count DESC
LIMIT 10
");

return rest_ensure_response([
'abandoned_products' => $abandoned_products,
'timestamp' => current_time('c')
]);
},
'permission_callback' => function() {
return current_user_can('manage_woocommerce');
}
]);
});

Database Schema

Direct database access for advanced customizations.

Primary Tables

wp_phplugins_carts

CREATE TABLE wp_phplugins_carts (
cart_id VARCHAR(8) PRIMARY KEY,
user_id BIGINT(20) DEFAULT 0,
created DATETIME DEFAULT CURRENT_TIMESTAMP,
last_seen DATETIME DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'active',
ip_address VARCHAR(45) NULL,
last_url TEXT NULL,
value DOUBLE DEFAULT 0,
coupon VARCHAR(200) NULL,
order_id BIGINT(20) DEFAULT 0,
archived TINYINT(1) DEFAULT 0,
-- Pro Version Additional Columns
session_key VARCHAR(191) DEFAULT NULL,
recovery_key VARCHAR(32) DEFAULT NULL UNIQUE,
INDEX idx_status (status),
INDEX idx_created (created),
INDEX idx_last_seen (last_seen),
INDEX idx_user_id (user_id)
);

wp_phplugins_cart_contents

CREATE TABLE wp_phplugins_cart_contents (
id BIGINT(20) AUTO_INCREMENT PRIMARY KEY,
cart_id VARCHAR(8) NOT NULL,
ts DATETIME DEFAULT CURRENT_TIMESTAMP,
contents TEXT NOT NULL,
FOREIGN KEY (cart_id) REFERENCES wp_phplugins_carts(cart_id) ON DELETE CASCADE,
INDEX idx_cart_id (cart_id),
INDEX idx_timestamp (ts)
);

Custom Query Examples

// Get cart conversion funnel data
function get_conversion_funnel_data($days = 30) {
global $wpdb;

$table = $wpdb->prefix . 'phplugins_carts';

return $wpdb->get_results($wpdb->prepare("
SELECT
DATE(created) as date,
COUNT(*) as total_carts,
SUM(CASE WHEN status = 'converted' THEN 1 ELSE 0 END) as converted,
SUM(CASE WHEN status = 'abandoned' THEN 1 ELSE 0 END) as abandoned,
AVG(value) as avg_value
FROM {$table}
WHERE created >= DATE_SUB(NOW(), INTERVAL %d DAY)
GROUP BY DATE(created)
ORDER BY date DESC
", $days));
}

// Get high-value abandoned carts for recovery
function get_high_value_abandoned_carts($min_value = 100) {
global $wpdb;

$table = $wpdb->prefix . 'phplugins_carts';

return $wpdb->get_results($wpdb->prepare("
SELECT
c.*,
u.user_email,
u.display_name
FROM {$table} c
LEFT JOIN {$wpdb->users} u ON c.user_id = u.ID
WHERE c.status = 'abandoned'
AND c.value >= %f
AND c.last_seen >= DATE_SUB(NOW(), INTERVAL 24 HOUR)
ORDER BY c.value DESC
", $min_value));
}

Plugin Class Methods

Direct access to plugin functionality for advanced integrations.

Core Methods

// Get plugin instance
$live_carts = \BerryPress\LiveCarts\LiveCarts::get_instance();

// Force cart status update
$live_carts->update_cart_status($cart_id, 'abandoned');

// Get cart data
$cart_data = $live_carts->get_cart_data($cart_id);

// Create new cart manually
$cart_id = $live_carts->create_cart($user_id, $cart_contents);

// Archive old carts manually
$archived_count = $live_carts->archive_old_carts();

Best Practices for Developers

Performance Considerations

  • Use appropriate WordPress caching for custom queries
  • Implement pagination for large datasets
  • Use transients for expensive calculations
  • Consider database indexing for custom queries

Security Guidelines

  • Always validate and sanitize inputs
  • Use proper capability checks for admin functions
  • Implement nonce verification for forms
  • Follow WordPress coding standards

Integration Patterns

  • Hook into existing actions rather than creating new ones when possible
  • Use filters to modify behavior instead of overriding core functions
  • Implement proper error handling and logging
  • Follow WordPress plugin development best practices

Support and Resources