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 '
';
foreach ($recent_orders as $order) {
printf(
'- %s - %s ($%s)
',
date_i18n(get_option('date_format'), strtotime($order->purchase_date)),
get_permalink($order->product_id),
esc_html($order->product_name),
number_format($order->amount, 2)
);
}
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); ?>
-
purchase_date)); ?> -
product_name); ?>
($amount, 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)) {
?>