WooCommerce Memberships
Selling membership plans? Need to know which memberships customers have?
Standard exports show the order. Not the member’s plan, status, or expiration.
Here’s how to export membership details for each customer.
What this code exports
Adds four membership columns to your order export:
- Member plan (Gold, Silver, Premium)
- Member status (Active, Paused, Expired)
- Member since (start date)
- Member expires (end date)
If a customer has multiple memberships, all appear in the same cell. Each on a new line.
The complete code
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
class WOE_Memberships { var $fields = array("plan","status","since","expires"); function __construct() { add_filter('woe_get_order_fields', function ($fields) { foreach($this->fields as $f) { $fields['membership_'.$f] = array( 'label' => "Member $f", 'colname' => "Member $f", 'checked' => 1 ); } return $fields; }); add_filter('woe_settings_validate_defaults', function ($settings) { foreach($this->fields as $f) { add_filter('woe_get_order_value_membership_'.$f, function ($value,$order,$field) { return isset($this->data[$field]) ? $this->data[$field] : $value; },10,3); } return $settings; }); // rebuild for each order add_filter('woe_order_export_started', function ($order_id) { // each order can create many memberships! $this->data = array(); foreach($this->fields as $f) $this->data[$f] = array(); //gather details $order = wc_get_order($order_id); $user_id = $order->get_user_id(); $memberships = wc_memberships_get_user_active_memberships( $user_id ); foreach ($memberships as $m) { $this->data['plan'][] = $m->get_plan()->get_name(); $this->data['status'][] = $m->get_status(); $this->data['since'][] = $m->get_start_date(); $this->data['expires'][] = $m->get_end_date(); } // convert to multiline cells foreach($this->data as $f=>$v) $this->data['membership_'.$f] = join("n", $v ); return $order_id; }); } } new WOE_Memberships(); |
Setup steps
- Copy the entire code block
- Paste into your theme’s
functions.php - Go to Advanced Order Export for WooCommerce
- Create or edit an export profile
- Open Setup Fields → Others
- You’ll see Member plan, Member status, Member since, Member expires
- Check the columns you need
- Save and test on an order from a member
What your export looks like
Single membership:
| Order # | Customer | Member plan | Member status | Member since | Member expires |
|---|---|---|---|---|---|
| 1001 | [email protected] | Gold | active | 2026-01-15 | 2027-01-15 |
Multiple memberships (same customer):
| Member plan | Member status | Member since | Member expires |
|---|---|---|---|
| Gold\nSilver | active\nactive | 2026-01-15\n2026-03-20 | 2027-01-15\n2027-03-20 |
Each membership on its own line within the cell.
When you need this
You sell recurring memberships. Need to track expiration dates.
Your support team needs to verify member status from order exports.
You run reports on active vs expired members.
You integrate with external systems. Need membership data in your CSV.
How it works
The code finds the customer who placed the order. Looks up all their active memberships. Pulls plan name, status, start date, and end date.
If a customer has multiple memberships (Gold and Premium), both appear. Each on a new line.
Common mistake
The code only exports active memberships. Uses wc_memberships_get_user_active_memberships().
Expired or cancelled memberships won’t appear.
Want all memberships? Change the function to wc_memberships_get_user_memberships().
Empty columns?
The customer isn’t a member. Guest checkout (no user account). Or memberships expired.
Memberships require a registered user. Guest orders won’t have membership data.
Pro tip
Need membership ID or plan ID? Add to the $fields array:
|
1 |
var $fields = array("plan", "plan_id", "status", "since", "expires"); |
Then add the data:
|
1 |
$this->data['plan_id'][] = $m->get_plan_id(); |
Want a single line instead of multiline? Change join("\n", $v) to join(", ", $v).
Real talk
WooCommerce Memberships stores plans separately from orders. An order might purchase a membership. But the actual membership record lives elsewhere.
This code bridges that gap. Finds the membership record. Pulls the important fields.
Your team gets clear membership data. No more “is this customer still active?” guesswork. Export shows exactly who has what.