arraypress/edd-register-export-columns

A library for registering custom export columns in Easy Digital Downloads CSV exports

Installs: 12

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/arraypress/edd-register-export-columns

dev-main 2025-12-04 22:10 UTC

This package is auto-updated.

Last update: 2025-12-06 16:54:28 UTC


README

Add custom columns to Easy Digital Downloads CSV exports with custom data and calculations.

Installation

composer require arraypress/edd-register-export-columns

Basic Usage

// Add custom columns to customer exports
edd_register_export_columns( 'customers', [
	'lifetime_downloads' => [
		'label'    => 'Total Downloads',
		'callback' => function ( $customer_id ) {
			return edd_count_file_downloads_of_customer( $customer_id );
		}
	],
	'last_login'         => [
		'label'    => 'Last Login',
		'callback' => function ( $customer_id ) {
			$customer = new EDD_Customer( $customer_id );
			if ( ! $customer->user_id ) {
				return 'N/A';
			}

			$last_login = get_user_meta( $customer->user_id, 'last_login', true );

			return $last_login ? date( 'Y-m-d H:i:s', $last_login ) : 'Never';
		}
	],
	'support_tickets'    => [
		'label'    => 'Support Tickets',
		'callback' => function ( $customer_id ) {
			$customer = new EDD_Customer( $customer_id );

			return get_user_meta( $customer->user_id, 'support_ticket_count', true ) ?: 0;
		}
	]
] );

// Add custom columns to download exports
edd_register_export_columns( 'downloads', [
	'total_reviews'  => [
		'label'    => 'Reviews',
		'callback' => function ( $download_id ) {
			return get_comments_number( $download_id );
		}
	],
	'average_rating' => [
		'label'    => 'Avg Rating',
		'callback' => function ( $download_id ) {
			$reviews = get_comments( [
				'post_id'  => $download_id,
				'meta_key' => 'rating',
				'fields'   => 'ids'
			] );

			if ( empty( $reviews ) ) {
				return 'N/A';
			}

			$total_rating = 0;
			foreach ( $reviews as $review_id ) {
				$total_rating += (int) get_comment_meta( $review_id, 'rating', true );
			}

			return round( $total_rating / count( $reviews ), 2 );
		}
	],
	'custom_field'   => [
		'label'    => 'Custom Field',
		'callback' => function ( $download_id ) {
			return get_post_meta( $download_id, 'my_custom_field', true );
		}
	]
] );

Real Examples

function add_export_columns() {
	// Customer export columns
	$customer_columns = [];

	// Add WooCommerce data if available
	if ( class_exists( 'WooCommerce' ) ) {
		$customer_columns['woo_orders'] = [
			'label'    => 'WooCommerce Orders',
			'callback' => function ( $customer_id ) {
				$customer = new EDD_Customer( $customer_id );

				return $customer->user_id ? wc_get_customer_order_count( $customer->user_id ) : 0;
			}
		];

		$customer_columns['woo_total_spent'] = [
			'label'    => 'WooCommerce Total Spent',
			'callback' => function ( $customer_id ) {
				$customer = new EDD_Customer( $customer_id );

				return $customer->user_id ? wc_get_customer_total_spent( $customer->user_id ) : 0;
			}
		];
	}

	// Add subscription data
	if ( class_exists( 'EDD_Recurring' ) ) {
		$customer_columns['active_subscriptions'] = [
			'label'    => 'Active Subscriptions',
			'callback' => function ( $customer_id ) {
				return count( EDD_Recurring()->db->get_subscriptions( [
					'customer_id' => $customer_id,
					'status'      => 'active'
				] ) );
			}
		];
	}

	// Add affiliate data
	if ( function_exists( 'affiliate_wp' ) ) {
		$customer_columns['referrals'] = [
			'label'    => 'Referrals Made',
			'callback' => function ( $customer_id ) {
				$customer     = new EDD_Customer( $customer_id );
				$affiliate_id = affwp_get_affiliate_id( $customer->user_id );

				return $affiliate_id ? affiliate_wp()->referrals->count( [ 'affiliate_id' => $affiliate_id ] ) : 0;
			}
		];
	}

	if ( ! empty( $customer_columns ) ) {
		edd_register_export_columns( 'customers', $customer_columns );
	}

	// Download export columns
	$download_columns = [
		'featured_image'       => [
			'label'    => 'Featured Image URL',
			'callback' => function ( $download_id ) {
				return get_the_post_thumbnail_url( $download_id, 'full' ) ?: '';
			}
		],
		'download_files_count' => [
			'label'    => 'Number of Files',
			'callback' => function ( $download_id ) {
				$files = edd_get_download_files( $download_id );

				return count( $files );
			}
		],
		'total_earnings'       => [
			'label'    => 'Total Earnings',
			'callback' => function ( $download_id ) {
				return edd_get_download_earnings_stats( $download_id );
			}
		],
		'total_sales'          => [
			'label'    => 'Total Sales',
			'callback' => function ( $download_id ) {
				return edd_get_download_sales_stats( $download_id );
			}
		]
	];

	edd_register_export_columns( 'downloads', $download_columns );
}

add_action( 'init', 'add_export_columns' );

Parameters

Parameter Type Required Description
$type string Yes Export type ('customers', 'downloads', 'payments', etc.)
$columns array Yes Array of column configurations
$id_field string No ID field name (default: 'ID')
$error_callback callable No Error handling function

Column Configuration

Option Required Description
label Yes Column header text
callback Yes Function that returns column value

Export Types

Common EDD export types you can extend:

  • customers - Customer export data
  • downloads - Download/product export data
  • payments - Payment/order export data
  • file_downloads - File download logs
  • customers_export - Alternative customer export

Requirements

  • PHP 7.4+
  • WordPress 5.0+
  • Easy Digital Downloads 3.0+

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the GPL-2.0-or-later License.

Support