get_results($wpdb->prepare( "SELECT o.*, p.post_title as product_name FROM {$wpdb->prefix}wpdd_orders o LEFT JOIN {$wpdb->posts} p ON o.product_id = p.ID WHERE o.customer_id = %d AND o.status = 'completed' ORDER BY o.purchase_date DESC LIMIT 5", $current_user->ID )); if ($recent_orders) { echo ''; printf( '

%s

', get_permalink(get_option('wpdd_purchases_page_id')), __('View All Purchases', 'wp-digital-download') ); } else { echo '

' . __('No purchases yet.', 'wp-digital-download') . '

'; printf( '

%s

', get_permalink(get_option('wpdd_shop_page_id')), __('Browse Products', 'wp-digital-download') ); } } public static function sales_summary_widget() { global $wpdb; $current_user = wp_get_current_user(); $stats = $wpdb->get_row($wpdb->prepare( "SELECT COUNT(*) as total_sales, SUM(amount) as total_revenue, COUNT(DISTINCT product_id) as products_sold FROM {$wpdb->prefix}wpdd_orders WHERE creator_id = %d AND status = 'completed' AND purchase_date >= DATE_SUB(NOW(), INTERVAL 30 DAY)", $current_user->ID )); $recent_sales = $wpdb->get_results($wpdb->prepare( "SELECT o.*, p.post_title as product_name FROM {$wpdb->prefix}wpdd_orders o LEFT JOIN {$wpdb->posts} p ON o.product_id = p.ID WHERE o.creator_id = %d AND o.status = 'completed' ORDER BY o.purchase_date DESC LIMIT 5", $current_user->ID )); ?>
total_sales); ?>
$total_revenue ?: 0, 2); ?>

roles)) { $purchases_page = get_option('wpdd_purchases_page_id'); if ($purchases_page) { return get_permalink($purchases_page); } } return $redirect_to; } public static function add_customer_fields($user) { if (!in_array('wpdd_customer', $user->roles)) { return; } global $wpdb; $total_purchases = $wpdb->get_var($wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}wpdd_orders WHERE customer_id = %d AND status = 'completed'", $user->ID )); $total_spent = $wpdb->get_var($wpdb->prepare( "SELECT SUM(amount) FROM {$wpdb->prefix}wpdd_orders WHERE customer_id = %d AND status = 'completed'", $user->ID )); ?>

$
get_results($wpdb->prepare( "SELECT o.*, p.post_title as product_name FROM {$wpdb->prefix}wpdd_orders o LEFT JOIN {$wpdb->posts} p ON o.product_id = p.ID WHERE o.customer_id = %d AND o.status = 'completed' ORDER BY o.purchase_date DESC", $customer_id )); } public static function can_download_product($customer_id, $product_id) { global $wpdb; $order = $wpdb->get_row($wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wpdd_orders WHERE customer_id = %d AND product_id = %d AND status = 'completed' ORDER BY purchase_date DESC LIMIT 1", $customer_id, $product_id )); if (!$order) { return false; } $download_limit = get_post_meta($product_id, '_wpdd_download_limit', true); $download_expiry = get_post_meta($product_id, '_wpdd_download_expiry', true); if ($download_expiry > 0) { $expiry_date = date('Y-m-d H:i:s', strtotime($order->purchase_date . ' + ' . $download_expiry . ' days')); if (current_time('mysql') > $expiry_date) { return false; } } if ($download_limit > 0 && $order->download_count >= $download_limit) { return false; } return true; } /** * Block wp-admin access for customers */ public static function restrict_admin_access() { $current_user = wp_get_current_user(); // Only block for wpdd_customer role, allow creators and admins if (in_array('wpdd_customer', $current_user->roles) && !current_user_can('manage_options')) { // Allow AJAX requests if (defined('DOING_AJAX') && DOING_AJAX) { return; } // Redirect to purchases page $purchases_page = get_option('wpdd_purchases_page_id'); $redirect_url = $purchases_page ? get_permalink($purchases_page) : home_url(); wp_redirect($redirect_url); exit; } } /** * Add frontend customer scripts and functionality */ public static function add_customer_scripts() { if (is_user_logged_in()) { $current_user = wp_get_current_user(); // Only for customers if (in_array('wpdd_customer', $current_user->roles)) { ?>