Pro Extension Points
Pro feature. Available in WP Sell Services Pro.
WP Sell Services Pro extends the free plugin only through documented hooks and services -- it never modifies free source. This page covers the Pro-specific seams. For the base marketplace hooks (services, orders, delivery, disputes, REST), see Hooks and Filters.
How Pro relates to Free
- Pro boots after Free (later priority on
plugins_loaded) and requires Free to be active. - Pro consumes Free's services and seams rather than calling WordPress APIs directly. Money helpers, the ledger debit-type list, and the display-price seam (
wpss_catalog_price_html) all live in Free; Pro builds on them, so there is one settlement source of truth. - E-commerce integrations (WooCommerce, EDD, FluentCart) are a payment rail only -- they move money. They never supply the marketplace's amounts, currency, or delivery deadline. Those are WP Sell Services-internal and set by the order provider.
That last point matters when you write an integration. If you source a price or a due date from the cart plugin, you will disagree with the ledger the moment someone edits a package or a refund lands.
Commission
| Filter | Parameters | Purpose |
|---|---|---|
wpss_commission_rate |
float $rate, object $order, int $vendor_id, int $service_id |
Adjust the commission percentage before the split is computed. |
wpss_commission_fee |
float $fee, object $order, float $base, float $rate |
Override the final platform fee amount for an order. |
Use wpss_commission_rate for percentage logic and wpss_commission_fee when a
percentage cannot express what you need -- a flat fee, or an absolute per-plan
override.
// Flat $5 platform fee, regardless of order value.
add_filter( 'wpss_commission_fee', function ( $fee, $order, $base, $rate ) {
return min( 5.00, $base );
}, 10, 4 );
The split is computed once via CommissionService and persisted on the
order; every rail and payout reads the stored value. Return a value from these
filters and it becomes the number of record -- do not try to adjust the fee later
in the flow.
Analytics
| Hook | Parameters | Purpose |
|---|---|---|
wpss_analytics_init |
AnalyticsManager $manager |
Fires when the analytics subsystem boots. |
wpss_analytics_widgets |
array $widgets |
Register additional analytics widgets. |
Wallet
| Hook | Parameters |
|---|---|
wpss_wallet_providers |
array $providers |
Register wpss_wallet_providers to add your own wallet backend alongside the
built-in Internal Wallet, TeraWallet, WooWallet, and MyCred providers.
The provider layer is read-only. It answers what a vendor holds; it does not
move money. Earnings are credited by the free plugin's CommissionService on
wpss_order_paid, and withdrawals are debited by its EarningsService - hook
those if you need to react to a balance change.
wpss_wallet_credited, wpss_wallet_debited and wpss_vendor_payout_processed
were removed in 1.7.0 along with the payout path that fired them. That path was
gated on an option nothing ever wrote, so the three actions never fired on any
install and nothing can have been listening.
Storage
| Hook | Parameters |
|---|---|
wpss_storage_providers |
array $providers |
Add an S3-compatible or bespoke storage backend next to S3, Google Cloud Storage, and DigitalOcean Spaces.
Payment gateways
| Hook | Parameters |
|---|---|
wpss_payment_gateways |
array $gateways |
wpss_render_secret_field |
(gateway settings rendering) |
E-commerce adapter hooks
Each integration exposes lifecycle hooks so you can react to rail-specific events without coupling to the rail.
EDD
| Hook | Fires when |
|---|---|
wpss_edd_adapter_init |
The EDD adapter boots. |
wpss_edd_service_purchased |
An EDD purchase of a service completes. |
wpss_edd_services_processed |
All services in an EDD order have been processed. |
wpss_edd_order_record_created |
The marketplace order is created from an EDD order. |
wpss_edd_service_meta_saved |
Service meta is saved on the EDD product. |
wpss_edd_service_checkout_processed |
An EDD checkout line has been turned into an order. |
FluentCart exposes parallel hooks (wpss_fluentcart_adapter_init,
wpss_fluentcart_order_created, and so on).
SureCart was removed in 1.6.0 and fires nothing.
WooCommerce is the exception. The WooCommerce adapter does not fire its own
namespaced lifecycle hooks -- it reuses the core wpss_order_created and
wpss_order_status_changed hooks instead. Code written against those works
identically whether the sale came through WooCommerce or standalone checkout.
Use adapter hooks to observe or annotate, never to source marketplace amounts. The order provider owns price, currency, and delivery deadline.
Payouts and Stripe Connect
| Hook | Parameters |
|---|---|
wpss_pro_connect_payout_paid |
string $payout_id, string $account_id, float $amount, string $currency |
wpss_pro_connect_payout_failed |
string $payout_id, string $account_id, string $failure_code, string $failure_message |
wpss_pro_connect_transfer_created |
string $transfer_id, string $account_id, float $amount, string $currency |
Stripe Connect settlement is recorded on the order so the wallet ledger can offset it; a refund reverses the ledger only when Stripe actually reclaimed the money. Build payout tooling against the wallet ledger and the persisted commission split, not against re-derived amounts.
Recurring services (feature-gated)
Recurring services sit behind a default-off feature flag in 1.3.0 while the feature is finished. Opt in on a development site with:
add_filter( 'wpss_pro_recurring_feature_available', '__return_true' );
While the flag is off, all recurring-service UI, settings, and the admin Subscriptions page stay hidden, so the feature never appears before it ships. Its REST routes register either way. See Recurring Services.
Related
- Hooks and Filters -- the full reference, free and Pro
- REST API Controllers -- including the 10 Pro controllers
- Building Custom Integrations
- Money Flow
- Sub-Order Pattern