Teams for WooCommerce Memberships Developer Documentation

You are here:
In this article

This document provides an overview of structure, hooks, and helpful methods in Teams for WooCommerce Memberships. To make adjustments to plugin functionality in an upgrade-safe manner, you should be very familiar with WordPress hooks — actions and filters — as these allow you to make modifications to plugin behavior.

Our goal is to ensure this plugin is easy to work with for customizations. If a hook doesn’t exist where you think it should, please submit a ticket so we can consider its addition.

This reference lists helpful filters, actions, and methods and is meant to be a directory. This document may not outline every available or hook or method, so please see the plugin’s inline documentation for additional details on parameters, returned values, and usage, or example usage.

Please be aware that this document is meant for developers to use as a reference, and some of these code samples are structural samples rather than working snippets. We do not support or do plugin customizations as per our support policy. You can get in touch with an expert for help with customizations.

If you need help changing this code or extending it, we recommend getting in touch with a WooExpert or a developer at Codeable.

Please be aware that the plugin namespace is: \SkyVerge\WooCommerce\Memberships\Teams — references to classes in this document will prefix global namespaces or complete namespaces with a backslash (\); a relative class name, such as “Team”, implies that this object would live in the plugin namespace, such as: \SkyVerge\WooCommerce\Memberships\Teams\Team

 

Data Structure

Teams for WC Memberships leverages a few custom data structures, but you would also benefit from being familiar with the data structure of WooCommerce Memberships itself. The Memberships Data Structure overview and developer documentation will be helpful resources.

We also recommend reviewing the methods in the WC_Memberships_User_Membership class, as these methods are quite commonly used by developers to manipulate user memberships. User memberships can easily be instantiated with the wc_memberships_get_user_membership() global method.

For its own functionality, Teams adds a “team” and “invitation” custom post type to manage groups of members, and invitations to join a team. Teams also makes modifications to particular products and membership plans to store additional data related to purchasing a team, and managing team access.

Teams

Post typewc_memberships_team

The team post serves as a data store for all team information, such as purchase record, owner, and members (along with the roles of each member on the team).

The team owner is stored as the post_author, given a team can only have one owner, and the configured team name is stored as the post_title. The team’s post_parent is the post ID of the Membership Plan to which the team grants access (as currently a team can only provide access to a single plan).

Team posts store other data about the team as well:

META KEYDATA TYPESTORED VALUE
_product_idintthe ID for the product that was purchased to create the team
_order_idintthe ID for the order in which the team was purchased
_subscription_idintif the team was purchased via a subscription product, this is the ID of the subscription to which access is tied
_seat_countintthe maximum number of available seats on this team
_member_idintthe ID of a member on the team; there can be multiple pieces of _member_id metadata if multiple seats are occupied
_membership_end_datestringthe day membership start to expire, based on the plan length; owners cannot remove members after this date if removals are enabled

Team Invitation

Post typewc_team_invitation

Invitation posts store data about invitations sent to particular emails. The invitation post will use custom statuses to determine the invitation status: wcmti-pendingwcmti-accepted, or wcmti-cancelled. The post_author is the user who sent the invitation, while the post_parent is the team to which the invitation belongs.

Pending invitations will store no meta, but accepted invitations will add 2 pieces of meta data:

META KEYDATA TYPESTORED VALUE
_accepted_user_idintthe user ID of the customer who accepted the invitation
_accepted_datestringthe date on which the invitation was accepted

Product Data

To associate a team with a product or variation, the product post will store a few pieces of data:

META KEYDATA TYPESTORED VALUE
_wc_memberships_for_teams_has_team_membershipstringyes or no
_wc_memberships_for_teams_pricingstringper_member or per_team (dictates the pricing fields for the team)
_wc_memberships_for_teams_max_member_countintthe maximum seats that a team can have upon purchase
_wc_memberships_for_teams_min_member_countintthe minimum seats required to purchase a team
_wc_memberships_for_teams_planintthe ID of the membership plan to which the team will have access

 

User capabilities

Teams provides a few custom WP User capabilities for both admin management of teams, and frontend management for team owners and managers.

CAPABILITYDESCRIPTIONDEFAULT ROLES
memberships_teamgrants admin access to manage teamsWP: administrator
WP: shop manager
wc_memberships_for_teams_renew_team_membershiplets a user renew team accessteam owner
wc_memberships_for_teams_manage_team_settingslets a user manage team settings (e.g., name)team owner
wc_memberships_for_teams_manage_team
wc_memberships_for_teams_manage_team_members
lets a user manage a team and which members belongteam owner
team manager
wc_memberships_for_teams_remove_team_memberlets a user remove team membersteam owner
team manager

 

Team Lifecycle

You can hook into the team lifecycle at several instances to fire third party code or adjust teams.

Created Team Filters

When a new team is created, the team data can be filtered.

wc_memberships_for_teams_new_team_data

@since

 

1.0.0

 

@param

 

array $data team data

 

@param

 

array $args an array of team arguments {

    • @type string $name the team name
    • @type int $plan_id the plan id the team has access to
    • @type int $owner_id the user id the team is assigned to
    • @type int $product_id the product id that creates the team (optional)
    • @type int $order_id the order id that contains the product that creates the team (optional)

}

Created Team Actions

Team creation and management also fires several actions that can be used to run additional code.

wc_memberships_for_teams_team_created

Fires after a team has been created. This action hook is similar to wc_memberships_for_teams_team_saved but doesn’t fire when teams are manually created from admin.

@since

 

1.0.0

 

@param

 

Team $team the team that was just created

 

@param

 

bool $updating whether this is a post update or a newly created team

wc_memberships_for_teams_team_saved

Fires after a team has been created. This action hook is similar to wc_memberships_for_teams_team_created but will also fire when a team is manually created in admin, or upon an import or via command line interface, etc.

@since

 

1.0.0

 

@param

 

Team $team the team that was just saved

 

@param

 

bool $updating whether this is a post update or a newly created team

wc_memberships_for_teams_process_team_meta

Fires when a team is saved/updated from admin.

@since

 

1.0.0

 

@param

 

int $post_id post identifier

 

@param

 

\WP_Post $post the post object

 

Invitation Lifecycle

You can hook into the team lifecycle at several instances to fire third party code or adjust invitations.

Created Invitation Filters

When a new invitation is created, the invitation data can be filtered.

wc_memberships_for_teams_new_invitation_post_data

@since

 

1.0.0

 

@param

 

array $data new invitation post data

 

@param

 

array $args array of Invitation arguments {

    • @type string $email email of the invitation recipient
    • @type int $team_id the team id
    • @type int $sender_id the sender user id
    • @type string $role the role to assign the invited user to

}

wc_memberships_for_teams_join_team_redirect_to

Filters the URL to redirect to when a user joins a team by invitation or via link

@since

 

1.0.4

 

@param

 

string $redirect_to URL to redirect to

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $team the team object

 

@param

 

false|\SkyVerge\WooCommerce\Memberships\Teams\Invitation $invitation the invitation object

Created Invitation Actions

Invitation creation will also fire an action that can be used to run additional code.

wc_memberships_for_teams_invitation_created

Fires after an invitation has been created.

@since

 

1.0.0

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Invitation $invitation the invitation that was just created

 

Frontend Hooks

This is a non-exhaustive list; these represent some often-used frontend hooks.

Frontend Filters

wc_memberships_for_teams_product_team_user_input_fields

Filters user input fields for a team product.

@since

 

1.0.0

 

@param

 

array $fields associative array of user input fields

 

@param

 

\WC_Product $product the product

wc_memberships_for_teams_add_team_member_form_fields

Filters form fields for the add team member form on frontend.

@since

 

1.0.0

 

@param

 

array $fields associative array of form fields

wc_memberships_team_teams_area_sections

Filters the available sections for the teams area.

@since

 

1.0.0

 

@param

 

array $sections associative array with teams area id and label of each section

wc_memberships_for_teams_teams_area_{$section_id}_title

Filters the teams area section name title. Core section IDs include “members”, “add-member”, and “settings”.

@since

 

1.0.0

 

@param

 

string $section_name the section name (e.g. “Members”, “Add Member”, “Settings”…)

 

@param

 

Team $team the current team displayed

wc_memberships_for_teams_teams_area_my_team_details

Filters the teams area team details.

@since

 

1.0.0

 

@param

 

array $details associative array of settings labels and HTML content for each row

 

@param

 

Team $team the team the details are for

Frontend Actions

wc_memberships_for_teams_before_renewal_auto_login

Fires right before logging a team member in. Can throw \SV_WC_Plugin_Exception to halt the login completely.

@since

 

1.0.0

 

@param

 

int $log_in_user_id the user ID of the member to log in

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $team team instance

 

@param

 

bool $allow_login whether automatic log in is allowed

 

Admin Hooks

This is a non-exhaustive list; these represent some often-used admin hooks.

Admin Filters

wc_memberships_for_teams_team_member_roles

Filters the list of available team member roles. Note that this does not include owner by design.

@since

 

1.0.0

 

@param

 

array $roles an associative array of role => label pairs

wc_memberships_for_teams_settings

Filters Memberships for Teams settings.

@since

 

1.0.0

 

@param

 

array $settings array of teams settings

wc_memberships_for_teams_invitation_statuses

Filters invitation statuses.

@since

 

1.0.0

 

@param

 

array $statuses associative array of statuses and their arguments

wc_memberships_for_teams_skip_invitations

Filters sending an invitation when adding members to a team

@since

 

1.1.2

 

@param

 

bool $skip_invitations whether invitations should be skipped

 

@param

 

null|\SkyVerge\WooCommerce\Memberships\Teams\Team optional argument to evaluate if invitations should be skipped for a particular team

 

@param

 

null|int|string|\WP_User optional entity being invited to join a team (either email, ID or object)

wc_memberships_for_teams_team_membership_can_be_renewed

Filters whether a team membership can be renewed

@since

 

1.0.0

 

@param

 

bool $can_be_renewed whether can be renewed by a user

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $team the team to renew membership for

wc_memberships_for_teams_team_management_status

Filters team management status

@since

 

1.0.0

 

@param

 

array an associative array with two keys: “can_be_managed” and “messages”

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $team the related team

wc_memberships_for_teams_team_can_add_seats

Filters whether a team can have seats added

@since

 

1.1.0

 

@param

 

bool $can_add_seats whether seats can be added

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $this the Team object

wc_memberships_for_teams_team_can_remove_seats

Filters whether a team can have seats removed

@since

 

1.1.0

 

@param

 

bool $can_remove_seats whether seats can be removed

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $this the Team object

wc_memberships_for_teams_allow_editing_user_membership

Filters the editing of a user membership

@since

 

1.1.2

 

@param

 

bool $allow_edit default true for non-subscription linked memberships

 

@param

 

\WC_Memberships_User_Membership|\WC_Memberships_Integration_Subscriptions_User_Membership $user_membership membership object

wc_memberships_for_teams_should_perform_seat_change

Filters whether a seat change should be performed

@since

 

1.1.0

 

@param

 

bool $should_perform_seat_change

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $this the Team object

 

@param

 

int $new_seat_count the desired seat count

wc_memberships_for_teams_should_prorate_seat_change

Filters whether a seat change should be prorated

@since

 

1.1.0

 

@param

 

bool $should_prorate_seat_change default false

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $this the Team object

 

@param

 

int $new_seat_count the desired seat count

wc_memberships_for_teams_seat_change_notice_message

Filters the notice message that is shown after a successful seat change

@since

 

1.1.0

 

@param

 

string $seat_change_message the notice message

 

@param

 

WC_Order $order the order object

 

@param

 

\WC_Order_Item $item the order item object that contains the seat change data

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $this the Team object

Admin Actions

wc_memberships_for_teams_before_team_billing_details

Fires before the billing details in edit team screen.

@since

 

1.0.0

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $team the team instance

wc_memberships_for_teams_after_team_billing_details

Fires before the billing details in edit team screen.

@since

 

1.0.0

 

@param

 

\SkyVerge\WooCommerce\Memberships\Teams\Team $team the team instance

 

Methods and Global Functions

This is a non-exhaustive list; these represent some often-used plugin methods.

Plugin main class

The instance of the main plugin class can be accessed with: wc_memberships_for_teams()

Any other plugin classes are instantiated in this main plugin class, or another class that’s instantiated by the main plugin class. Therefore, if you want to unhook methods in a particular class, you’ll need to use this helper to access the class instance. For example, many classes are instantiated by the main plugin class, and can be accessed with:

wc_memberships_for_teams()->get_*_instance()

For example:

wc_memberships_for_teams()->get_orders_instance()

Classes that are not instantiated in the main plugin class can be accessed through instances of the class that instantiates them:

wc_memberships_for_teams()->get_frontend_instance()->get_teams_area_instance()

Teams object

While we won’t list every method here, the Team object is a good one to review, as this provides methods to get or set almost any piece of team data, or programmatically process seat changes, member invites, adding or removing members, etc.

An instance of this class can be accessed with:

wc_memberships_for_teams_get_team( $team_id_or_post )

Conditional Checks

There are a few conditional checks that can help you determine team or product information.

wc_memberships_for_teams_is_valid_team_member_role( $role )

Checks if a team member role is valid or not.

@since

 

1.0.0

 

@param

 

string $role the role to check

\SkyVerge\WooCommerce\Memberships\Teams\Product::has_team_membership( $product )

Checks if a product has a team membership attached (purchasing this product creates a team). You must pass an instance of WC_Product to this method.

@since

 

1.0.0

 

@param

 

\WC_Product $product

\SkyVerge\WooCommerce\Memberships\Teams\Product::has_per_member_pricing( $product )

Checks if a product uses per-member pricing (false if per-team pricing is used). You must pass an instance of WC_Product to this method.

@since

 

1.0.0

 

@param

 

\WC_Product $product

Global & Static Functions

A non-exhaustive list of some helpful global and static methods for use in customizations.

\SkyVerge\WooCommerce\Memberships\Teams\Product::get_min_member_count( $product )

Gets the minimum member count required to purchase the team product; returns the integer count or null if not set. You must pass an instance of WC_Product to this method.

@since

 

1.0.0

 

@param

 

\WC_Product $product

\SkyVerge\WooCommerce\Memberships\Teams\Product::get_max_member_count( $product )

Gets the maximum member count allowed when purchasing the team product; returns the integer count or null if not set. You must pass an instance of WC_Product to this method.

@since

 

1.0.0

 

@param

 

\WC_Product $product

\SkyVerge\WooCommerce\Memberships\Teams\Product::get_membership_plan_id( $product )

Gets the membership plan ID that will be granted to a team created via this product; returns the integer count or null if not set. You must pass an instance of WC_Product to this method.

@since

 

1.0.0

 

@param

 

\WC_Product $product

wc_memberships_for_teams_get_team( $id_or_post )

Can be used to get an instance of a team. Accepts the team post object or post ID. Returns a Team instance if found, or false on failure.

@since

 

1.0.0

 

@param

 

int|\WP_Post $post optional team id or post object, defaults to current global post object

wc_memberships_for_teams_get_teams( $user_id, $args, $return, $force_refresh )

Returns a list of teams for a user (should be preferred over get_posts() calls to protect against data structure changes). Can return either a plain list of team objects or an associative array with query results and team objects, and will return false on failure.

@since

 

1.0.0

 

@param

 

int $user_id optional, defaults to current user

 

@param

 

array $args an array of arguments to pass to \WP_Query – additionally, a few special arguments can be passed: {

    • @type string|array $status team status, defaults to ‘any’
    • @type string|array $role a comma-separated list or array of team member roles, defaults to ‘owner, manager’ – specifying this will only fetch teams that the user has one of the given roles
    • @type int $paged the page number for paging the results (corresponds to paged param for get_posts())

}

 

@param

 

string $return (optional) what to return – set to ‘query’ to return the \WP_Query instance instead of a list of invitation instances

 

@param

 

bool $force_refresh (optional) whether to force reloading the results even if a previous result has been memoized, defaults to false

wc_memberships_for_teams_get_user_membership_team( $user_membership_id )

Returns the team for a given user membership, if any. Returns false if the membership does not belong to a team.

@since

 

1.0.0

 

@param

 

int $user_membership_id user membership id

wc_memberships_for_teams_get_team_members( $team_id, $args, $return, $null )

Returns a list of team members given the input query (should be preferred over get_posts() calls to protect against data structure changes). Can return either a plain list of team member objects or an associative array with query results and team member objects.

@since

 

1.0.0

 

@param

 

int|\SkyVerge\WooCommerce\Memberships\Teams\Team $team_id team id or instance to get the team members for

 

@param

 

array $args (optional) an array of arguments to pass to \WP_Query – additionally, a few special arguments can be passed: {

    • @type string|array $role a comma-separated list or array of team member roles, empty by default – specifying this will only fetch members with the given role
    • @type int $paged the page number for paging the results, corresponds to paged param for get_users()
    • @type int $per_page the number of team members to fetch per page, corresponds to the number param for get_users()

}

 

@param

 

string $return (optional) what to return – set to ‘query’ to return the \WP_User_Query instance instead of a list of team member instances

 

@param

 

bool $force_refresh (optional) whether to force reloading the results even if a previous result has been memoized, defaults to false

wc_memberships_for_teams_get_team_member_roles()

Returns a an associative array of available team member roles.

@since

 

1.0.0

wc_memberships_for_teams_create_team( $args )

Programmatically creates a team. Returns a new Team object on success which can then be used to add additional data, but will return \SV_WC_Plugin_Exception on failure.

@since

 

1.0.0

 

@param

 

array $args (see below)

 

@param

 

string $action ‘create’ or ‘renew’; defaults to ‘create’

 

@return

 

Team|\SV_WC_Plugin_Exception

The arguments you can pass in to create a new team are as follows:

ARRAY KEYDATA TYPEREQUIREDVALUE
owner_idintrequiredowner user ID
plan_idint|\WC_Memberships_Planrequiredplan ID or instance to which the team will have access
product_idint|\WC_Productproduct ID or instance that can be used to purchase the team; required if a team should be renewable
order_idint\WC_OrderID or instance of the order in which the team was purchased
namestringteam name; defaults to “Team”
seatsintthe seat count for the team; if not provided, product_id must be specified, and the team will use the max member count from the product/variation

wc_memberships_for_teams_create_invitation( $args )

Programmatically creates a team invitation. Returns a new Invitation object on success which can then be used to add additional data, but will throw \SV_WC_Plugin_Exception on failure.

@since

 

1.0.0

 

@param

 

array $args (see below)

 

@return

 

Invitation|\SV_WC_Plugin_Exception

The arguments you can pass in to create a new invitation are as follows:

ARRAY KEYDATA TYPEREQUIREDVALUE
team_idint|objectrequiredteam ID or instance for the invitation
emailstringrequiredthe email address to which the invitation should be sent
sender_idintthe sender’s user ID (default: current user)
rolestringthe team role to assign to the invited user, defaults to ‘member’

wc_memberships_for_teams_get_invitation( $id, $email )

Returns a specific invitation for a team, or false on failure.

@since

 

1.0.0

 

@param

 

string|int|\WP_Post|Invitation|Team $id invitation token, id, or instance; or team id or instance

 

@param

 

string $email (optional) invitation recipient email, required if $id is a team id or instance

wc_memberships_for_teams_get_invitations( $team_id, $args, $return, $force_refresh )

Returns a list of invitations (should be preferred over get_posts() calls to protect against data structure changes). Can return either a plain list of invitation objects or an associative array with query results and invitation objects.

@since

 

1.0.0

 

@param

 

int $team_id team id to get the invitations for

 

@param

 

array $args an array of arguments to pass to \WP_Query – additionally, a few special arguments can be passed: {

    • @type string|array $status invitation status, defaults to ‘pending’, can be used instead of $post_status
    • string|array $role a comma-separated list or array of team member roles, empty by default – specifying this will only fetch invitations that grant the one of thge specified roles for the user
    • @type int $paged the page number for paging the results, corresponds to paged param for get_posts()
    • @type int $per_page the number of invitations to fetch per page, corresponds to the posts_per_page param for get_posts()

}

 

@param

 

@param string $return (optional) what to return – set to ‘query’ to return the \WP_Query instance instead of a list of invitation instances

 

@param

 

bool $force_refresh (optional) whether to force reloading the results even if a previous result has been memoized, defaults to false

User Documentation

Was this article helpful?
Dislike 0
Views: 0

Cart

Log in

Create an Account
Back to Top