Guest → prints current user’s display name (or “Guest”)
→ prints any user field (display_name, user_login, first_name, last_name, user_email)
→ Logout link (with optional redirect + custom text)
Log In → Login link (with optional redirect + custom text)
Log In → smart Login/Logout toggle (auto shows the right one)
→ show content only to logged-in users
… → show content only to logged-out users
Guest → prints current user’s display name (or “Guest”)
→ prints any user field (display_name, user_login, first_name, last_name, user_email)
→ Logout link (with optional redirect + custom text)
Log In → Login link (with optional redirect + custom text)
Log In → smart Login/Logout toggle (auto shows the right one)
→ show content only to logged-in users
SQAQ → show content only to logged-out users
Upload your artwork
Artwork calibrating & Details Adding - Step 2 of 2
You must be logged in to change your PayPal email.
`. > Your rule: each time the payout email changes, require a fresh verification purchase. ### C) Notifications → Templates (Admin) **File:** `wp-content/mu-plugins/sp-notify-templates.php` **Menu:** under **SP Dashboard → Notifications → Templates**. **Lets you:** create email templates (key, subject, HTML body, description), link them to event keys (e.g., `user.form_completed`, `product.published`), test-send, and sync into your central rules (if Notify Hub/Queue are present). — ## 2) Admin Screens (SP Dashboard) – **Overview** — high-level status – **Artseller** — roles/levels – **Users** — per-user insights/controls – **Royalties** — configuration & reports – **Notifications → Templates** — (from `sp-notify-templates.php`) manage email templates for events > Place these as submenus under your existing **SP Dashboard** (slug `sp-dashboard`). — ## 3) Using Shortcodes ### A) Tables for the current logged-in artist “` ← default limit 10 “` ### B) Same tables, but as Admin/Shop Manager targeting a user “` “` ### C) Single-number counters (period/format options) “` 0 → this month 0 → last month 0 → lifetime 0 → this month (plain number) 0 0 “` ### D) Artist-only value shortcodes “` 0 0 0 “` ### E) PayPal-related “`You must be logged in to change your PayPal email.
“` — ## 4) Elementor & Dynamic User Meta (IDs) Use **Elementor → Dynamic Tags → SP User Meta** to pull any key below, or use the shortcode: “` “` ### Media & Bios – `_sp_profile_avatar_id` — Profile Picture – `_sp_profile_banner_id` — Banner Picture – `_sp_profile_short_desc` — Short Description – `_sp_profile_long_desc` — Long Description ### Payout – `_sp_profile_payout_email` — Payout Email ### Links – `_sp_profile_portfolio_url` — Portfolio URL – `_sp_profile_affiliate_url` — Affiliate URL – `_sp_profile_affiliate_form_url` — Affiliate Form URL – `_sp_profile_marketplace_url` — Marketplace Artwork URL ### Social Accounts – `_sp_facebook_url` — Facebook – `_sp_twitter_url` — Twitter – `_sp_instagram_url` — Instagram – `_sp_uoutube_url` — YouTube *(key preserved as “uoutube”)* – `_sp_pinterest_url` — Pinterest – `_sp_deviantart_url` — Deviantart – `_sp_behance_url` — Behance – `_sp_linkedin_url` — Linkedin – `_sp_webexempel_url` — Website exempel ### Types (free text) – `_sp_profile_artist_type` — Artist Type – `_sp_profile_brand_type` — Brand Type – `_sp_profile_fundraiser_type` — Fundraiser Type ### Notifications – `_sp_profile_notify_new_messages` — Notify: New Messages – `_sp_profile_notify_admin_messages` — Notify: Admin Messages – `_sp_profile_notify_item_sold` — Notify: Item Sold – `_sp_profile_notify_order_shipping` — Notify: Order & Shipping – `_sp_profile_sale_summary` — Sale Summary *(never/daily/weekly/monthly)* ### Extra – `_sp_profile_gender` — Gender *(male, female, other)* – `_sp_profile_birthday` — Birthday *(YYYY-MM-DD)* > Skipped on purpose (exist elsewhere in your stack): PayPal email (separate flow), social links (if duplicated), avatar/banner if managed by another module, “User Earning” counters, pricing/promotions controls, Artseller Level counters. — ## 5) Regional Prices & Shipping (Snapshot + Geolocation) 1. **Write snapshot**: In **SP Price Matrix → Shipping** enable “Write shipping JSON after save.” This creates: `/wp-content/uploads/sp_shipping_snapshot.json`. 2. **WooCommerce → Settings → Shipping → Zones**: add e.g. “United Kingdom” and others. 3. **Add method**: choose **SP Matrix Rates** (your custom method). 4. **WooCommerce → Settings → General → Default customer location**: set **Geolocate (with page caching support)**. 5. **WooCommerce → Settings → Integration → MaxMind**: add your MaxMind key for accurate IP→Country. 6. Add a small “bootstrap region” patch early in MU to set visitor’s country and pin a cookie (helps behind proxies/CDNs and with caching). **Developer filter (example override for previews):** “`php add_filter(‘sp_pm/final_price_preview’, function($preview, $region, $type, $size){ // Demo: Poster small in USA is $10 regular with 50% off → $5 final if ($region===’USA’ && $type===’Poster’ && $size===’small’) { return [‘final_cents’=>500, ‘regular_cents’=>1000, ‘breakdown’=>[‘50%’]]; } return $preview; }, 10, 4); “` — ## 6) Quick Examples – Current artist royalties table: “ – Admin report for a specific user with 25 recent lines: “ – Counter style (lifetime items sold): `0` – Force PayPal re‑verification whenever payout email changes: Install the **Change PayPal Email** MU plugin and place `You must be logged in to change your PayPal email.
` on a protected page; the flow enforces a fresh verification payment on change. — ## 7) Notes – Non-admin users always see **their own** data; **Admins/Shop Managers** may pass `user_id=”123″` in shortcodes. – Place the **Notifications → Templates** screen under **SP Dashboard** (slug `sp-dashboard`). Here’s the complete MU-plugin file with the Overview / Artseller / Users / Royalties admin UI, regional royalties engine, auto-promotion/levels, and the three shortcodes: — items sold this month / last month / lifetime — royalties this month / last month / lifetime — recent royalty lines table (default 10 rows) Save as: wp-content/mu-plugins/shapedpixel-artseller.php Items sold (current artist): Royalties totals (current artist): Recent lines (current artist): Admin/shop manager can target a user: [sp_artist_level] [sp_sales_this_month] [sp_sales_this_month] [sp_sales_last_month] [sp_sales_lifetime] [sp_artist_dashboard] Here’s the complete MU-plugin file with the Overview / Artseller / Users / Royalties admin UI, regional royalties engine, auto-promotion/levels, and the three shortcodes: — items sold this month / last month / lifetime — royalties this month / last month / lifetime — recent royalty lines table (default 10 rows) Save as: wp-content/mu-plugins/shapedpixel-artseller.php Shortcodes to use: Items sold (current artist): Royalties totals (current artist): Recent lines (current artist): Admin/shop manager can target a user: Usage Items sold numbers: This month: 0 Last month: 0 Lifetime: 0 Royalties numbers: This month (plain number): 0 Last month (money with symbol): 0 Lifetime (cents only): 0 (Admins/Shop Managers may add user_id=”123″ to target a specific user; everyone else always sees their own data.) Shortcodes to use: Items sold (current artist): Royalties totals (current artist): Recent lines (current artist): Admin/shop manager can target a user: Thought for 9s Here’s the complete MU-plugin file with the Overview / Artseller / Users / Royalties admin UI, regional royalties engine, auto-promotion/levels, and the three shortcodes: — items sold this month / last month / lifetime — royalties this month / last month / lifetime — recent royalty lines table (default 10 rows) You got it! Here are four tiny, value-only shortcodes (no labels) just for logged-in artsellers: → Artist / Fundraiser / Business 0 → level number (1–5) 0 → number of published products 0 → how many uploads they still can publish (level cap − current active publish/pending) These use the helpers already in your MU plugin (role detection, caps, active-count cache, etc.). Admins can optionally pass user_id=”123″. 0 0 0You must be logged in to change your PayPal email.
You must be logged in to change your PayPal email.
. Got it. Here’s a professional MU plugin that adds a submenu under your existing “SP Dashboard” (slug sp-dashboard) called “Notifications → Templates”. It lets you: Create multiple email templates (key, subject, HTML body, description) Link each template to an event/function key (e.g., user.form_completed, product.published, or any custom key you emit) Sync those templates into your central rules (if you installed the notify hub I gave you: SPN_Notify_Hub), so each event uses that template automatically Test-send an event to a specific user (and optional product/post) via your queue if SPN_Mailer_Queue is present Save as: wp-content/mu-plugins/sp-notify-templates.php Requires: your top-level SP Dashboard plugin (you already have sp-dashboard slug). Optional but recommended: the Notify Suite I gave earlier (SPN_Notify_Hub + SPN_Mailer_Queue) for auto-sync and queued sending. ———— sp-user-extras.php What you get New profile fields (meta keys you can use anywhere): Portfolio URL → _sp_profile_portfolio_url Affiliate URL → _sp_profile_affiliate_url Affiliate Form URL → _sp_profile_affiliate_form_url Artist Type (free text) → _sp_profile_artist_type Brand Type (free text) → _sp_profile_brand_type Fundraiser Type (free text) → _sp_profile_fundraiser_type Sale Summary (select: never/daily/weekly/monthly) → _sp_profile_sale_summary Notify: New Messages (checkbox) → _sp_profile_notify_new_messages Notify: Admin Messages (checkbox) → _sp_profile_notify_admin_messages Notify: Item Sold (checkbox) → _sp_profile_notify_item_sold Notify: Order & Shipping (checkbox) → _sp_profile_notify_order_shipping Google Analytics Site ID → _sp_profile_ga_site_id Google Analytics Embed (textarea) → _sp_profile_ga_embed Facebook Pixel ID → _sp_profile_fb_pixel_id Facebook Pixel Embed (textarea) → _sp_profile_fb_pixel_embed Marketplace Artwork URL → _sp_profile_marketplace_url Gender (select) → _sp_profile_gender Birthday (date YYYY-MM-DD) → _sp_profile_birthday Country (ISO-2 like US, DE) → _sp_profile_country Skipped on purpose (already exist somewhere else in your stack): PayPal email, social links, avatar/banner, “User Earning” counters, pricing/promotions controls, and any Artseller Level / sales counters. user 112.09.25 matrix 9.9.25+ —————————– How to use in Elementor Add any text/link widget → click Dynamic Tags → SP User Meta → choose the field (e.g., _sp_profile_portfolio_url) and optionally set a fallback. Or use the shortcode widget: If you want me to add/remove fields or change any labels/choices, say the word and I’ll update the registry at the top of the file. ————————————— Here you go — Dynamic Tag ID — Field Name (exactly as in your current plugin): Media & Bios _sp_profile_avatar_id — Profile Picture _sp_profile_banner_id — Banner Picture _sp_profile_short_desc — Short Description _sp_profile_long_desc — Long Description Payout _sp_profile_payout_email — Payout Email Links _sp_profile_portfolio_url — Portfolio URL _sp_profile_affiliate_url — Affiliate URL _sp_profile_affiliate_form_url — Affiliate Form URL _sp_profile_marketplace_url — Marketplace Artwork URL Social Accounts _sp_facebook_url — Facebook _sp_twitter_url — Twitter _sp_instagram_url — Instagram _sp_uoutube_url — Youtube (kept your key as “uoutube”) _sp_pinterest_url — Pinterest _sp_deviantart_url — Deviantart _sp_behance_url — Behance _sp_linkedin_url — Linkedin _sp_webexempel_url — Website exempel Types (free text) _sp_profile_artist_type — Artist Type _sp_profile_brand_type — Brand Type _sp_profile_fundraiser_type — Fundraiser Type Notifications _sp_profile_notify_new_messages — Notify: New Messages _sp_profile_notify_admin_messages — Notify: Admin Messages _sp_profile_notify_item_sold — Notify: Item Sold _sp_profile_notify_order_shipping — Notify: Order & Shipping _sp_profile_sale_summary — Sale Summary Extra _sp_profile_gender — Gender (values: male, female, other) How to use it (one-time setup) Save your SP Price Matrix → Shipping tab (tick “Write shipping JSON after save”). This creates /wp-content/uploads/sp_shipping_snapshot.json. WooCommerce → Settings → Shipping → Zones Create a United Kingdom zone (and others you need). Add method → SP Matrix Rates (the one you just added). Do these two things: In WooCommerce → Settings → General → Default customer location set “Geolocate (with page caching support)”. Also add a MaxMind key (WooCommerce → Settings → Integration → MaxMind) for accurate IP → country. Add the small “bootstrap region” patch below to your MU plugin so the visitor’s country is set very early (works behind proxies/CDNs) and we pin a cookie. This makes your regional prices reliable even with caching. ———– ne fund te matrixes e kom shut qito qe me e i mar vlerat e produktit per user royalty add_filter(‘sp_pm/final_price_preview’, function($preview, $region, $type, $size){ // demo: Poster small in USA costs 10$ regular with 50% off → 5$ if ($region===’USA’ && $type===’Poster’ && $size===’small’) { return [‘final_cents’=>500, ‘regular_cents’=>1000, ‘breakdown’=>[‘50%’]]; } return $preview; }, 10, 4); —————————- Why this plugs in cleanly (and keeps all existing functions) It attaches under your existing SP Dashboard parent slug (sp-dashboard) and uses your capability helper SP_DASH_CAP() so only the same roles can see it. sp-dashboard.php sp-dashboard.php It doesn’t modify any of your plugins’ functions; it only reads their data: SP Price Matrix: reads ship mode, base region and discount window via the option helpers you already expose. sp-mu-price-matrix.php sp-mu-price-matrix.php Notifications Templates: counts templates from the stored option (SPNT_OPT_TEMPLATES). sp-notify-suite.php sp-notify-suite.php Artist / Royalties: dashboard doesn’t recalc anything; it only uses WooCommerce order data like your royalties tools do. sp-artist-level.php PayPal Verification: counts records created by your verifier (spv_verified_<sha1> options). sp-change-paypal-email.php User Extras: uses your known meta keys (e.g., _sp_profile_payout_email, _sp_profile_avatar_id). sp-user-extras.php AIO / Mockups: uses _sp_mockups_done to surface readiness. sp-aio-shapedpixel.php Note: The code also removes WP’s auto-inserted duplicate submenu item so “Overview” is truly first. If you want the top-level SP Dashboard click to redirect to the Overview too (optional), say the word and I’ll add a tiny load-toplevel_page_sp-dashboard redirect snippet. ChatGPT said: Thought for 1m 38s Done. I built you a brand-new plugin that adds a customer-friendly affiliate system with: a new role (Affiliate), an admin dashboard under your SP Dashboard, and a frontend user dashboard via shortcode to create links and track performance (clicks & sales). Download Install this like any normal plugin (or drop into mu-plugins if you want it always on): Download: ShapedPixel – Affiliate Links What you get (exactly as requested) Affiliate role: sp_affiliate (can read; you can assign it to customers or just let any logged-in user use the dashboard). Admin page: under SP Dashboard → Affiliates (auto-fallbacks to WooCommerce menu if SP Dashboard isn’t active). Settings: cookie duration (default 30 days). Top Affiliates table: links, clicks, orders, revenue (all time). Frontend dashboard: shortcodeUpload your artwork
Artwork calibrating & Details Adding - Step 2 of 2
Here’s the complete MU-plugin file with the Overview / Artseller / Users / Royalties admin UI, regional royalties engine, auto-promotion/levels, and the three shortcodes:
— items sold this month / last month / lifetime
— royalties this month / last month / lifetime
— recent royalty lines table (default 10 rows)
Save as: wp-content/mu-plugins/shapedpixel-artseller.php
Items sold (current artist):
Royalties totals (current artist):
Recent lines (current artist):
Admin/shop manager can target a user:
[sp_artist_level]
[sp_sales_this_month]
[sp_sales_this_month]
[sp_sales_last_month]
[sp_sales_lifetime]
[sp_artist_dashboard]
Here’s the complete MU-plugin file with the Overview / Artseller / Users / Royalties admin UI, regional royalties engine, auto-promotion/levels, and the three shortcodes:
— items sold this month / last month / lifetime
— royalties this month / last month / lifetime
— recent royalty lines table (default 10 rows)
Save as: wp-content/mu-plugins/shapedpixel-artseller.php
Shortcodes to use:
Items sold (current artist):
Royalties totals (current artist):
Recent lines (current artist):
Admin/shop manager can target a user:
Usage
Items sold numbers:
This month: 0
Last month: 0
Lifetime: 0
Royalties numbers:
This month (plain number): 0
Last month (money with symbol): 0
Lifetime (cents only): 0
(Admins/Shop Managers may add user_id=”123″ to target a specific user; everyone else always sees their own data.)
Shortcodes to use:
Items sold (current artist):
Royalties totals (current artist):
Recent lines (current artist):
Admin/shop manager can target a user:
Thought for 9s
Here’s the complete MU-plugin file with the Overview / Artseller / Users / Royalties admin UI, regional royalties engine, auto-promotion/levels, and the three shortcodes:
— items sold this month / last month / lifetime
— royalties this month / last month / lifetime
— recent royalty lines table (default 10 rows)
You got it! Here are four tiny, value-only shortcodes (no labels) just for logged-in artsellers:
→ Artist / Fundraiser / Business
0 → level number (1–5)
0 → number of published products
0 → how many uploads they still can publish (level cap − current active publish/pending)
These use the helpers already in your MU plugin (role detection, caps, active-count cache, etc.).
Admins can optionally pass user_id=”123″.
0
0
0
You must be logged in to change your PayPal email.
Here’s a single-file MU plugin (simple, standalone). Save as: wp-content/mu-plugins/spv-change-paypal-email.php. Shortcode:
You must be logged in to change your PayPal email.
.Got it. Here’s a professional MU plugin that adds a submenu under your existing “SP Dashboard” (slug sp-dashboard) called “Notifications → Templates”. It lets you:
Create multiple email templates (key, subject, HTML body, description)
Link each template to an event/function key (e.g., user.form_completed, product.published, or any custom key you emit)
Sync those templates into your central rules (if you installed the notify hub I gave you: SPN_Notify_Hub), so each event uses that template automatically
Test-send an event to a specific user (and optional product/post) via your queue if SPN_Mailer_Queue is present
Save as: wp-content/mu-plugins/sp-notify-templates.php
Requires: your top-level SP Dashboard plugin (you already have sp-dashboard slug).
Optional but recommended: the Notify Suite I gave earlier (SPN_Notify_Hub + SPN_Mailer_Queue) for auto-sync and queued sending.
————
sp-user-extras.php
What you get
New profile fields (meta keys you can use anywhere):
Portfolio URL → _sp_profile_portfolio_url
Affiliate URL → _sp_profile_affiliate_url
Affiliate Form URL → _sp_profile_affiliate_form_url
Artist Type (free text) → _sp_profile_artist_type
Brand Type (free text) → _sp_profile_brand_type
Fundraiser Type (free text) → _sp_profile_fundraiser_type
Sale Summary (select: never/daily/weekly/monthly) → _sp_profile_sale_summary
Notify: New Messages (checkbox) → _sp_profile_notify_new_messages
Notify: Admin Messages (checkbox) → _sp_profile_notify_admin_messages
Notify: Item Sold (checkbox) → _sp_profile_notify_item_sold
Notify: Order & Shipping (checkbox) → _sp_profile_notify_order_shipping
Google Analytics Site ID → _sp_profile_ga_site_id
Google Analytics Embed (textarea) → _sp_profile_ga_embed
Facebook Pixel ID → _sp_profile_fb_pixel_id
Facebook Pixel Embed (textarea) → _sp_profile_fb_pixel_embed
Marketplace Artwork URL → _sp_profile_marketplace_url
Gender (select) → _sp_profile_gender
Birthday (date YYYY-MM-DD) → _sp_profile_birthday
Country (ISO-2 like US, DE) → _sp_profile_country
Skipped on purpose (already exist somewhere else in your stack): PayPal email, social links, avatar/banner, “User Earning” counters, pricing/promotions controls, and any Artseller Level / sales counters.
user 112.09.25
matrix 9.9.25+
—————————–
How to use in Elementor
Add any text/link widget → click Dynamic Tags → SP User Meta → choose the field (e.g., _sp_profile_portfolio_url) and optionally set a fallback.
Or use the shortcode widget:
If you want me to add/remove fields or change any labels/choices, say the word and I’ll update the registry at the top of the file.
—————————————
Here you go — Dynamic Tag ID — Field Name (exactly as in your current plugin):
Media & Bios
_sp_profile_avatar_id — Profile Picture
_sp_profile_banner_id — Banner Picture
_sp_profile_short_desc — Short Description
_sp_profile_long_desc — Long Description
Payout
_sp_profile_payout_email — Payout Email
Links
_sp_profile_portfolio_url — Portfolio URL
_sp_profile_affiliate_url — Affiliate URL
_sp_profile_affiliate_form_url — Affiliate Form URL
_sp_profile_marketplace_url — Marketplace Artwork URL
Social Accounts
_sp_facebook_url — Facebook
_sp_twitter_url — Twitter
_sp_instagram_url — Instagram
_sp_uoutube_url — Youtube (kept your key as “uoutube”)
_sp_pinterest_url — Pinterest
_sp_deviantart_url — Deviantart
_sp_behance_url — Behance
_sp_linkedin_url — Linkedin
_sp_webexempel_url — Website exempel
Types (free text)
_sp_profile_artist_type — Artist Type
_sp_profile_brand_type — Brand Type
_sp_profile_fundraiser_type — Fundraiser Type
Notifications
_sp_profile_notify_new_messages — Notify: New Messages
_sp_profile_notify_admin_messages — Notify: Admin Messages
_sp_profile_notify_item_sold — Notify: Item Sold
_sp_profile_notify_order_shipping — Notify: Order & Shipping
_sp_profile_sale_summary — Sale Summary
Extra
_sp_profile_gender — Gender (values: male, female, other)
How to use it (one-time setup)
Save your SP Price Matrix → Shipping tab (tick “Write shipping JSON after save”).
This creates /wp-content/uploads/sp_shipping_snapshot.json.
WooCommerce → Settings → Shipping → Zones
Create a United Kingdom zone (and others you need).
Add method → SP Matrix Rates (the one you just added).
Do these two things:
In WooCommerce → Settings → General → Default customer location
set “Geolocate (with page caching support)”. Also add a MaxMind key (WooCommerce → Settings → Integration → MaxMind) for accurate IP → country.
Add the small “bootstrap region” patch below to your MU plugin so the visitor’s country is set very early (works behind proxies/CDNs) and we pin a cookie. This makes your regional prices reliable even with caching.
———–
ne fund te matrixes e kom shut qito qe me e i mar vlerat e produktit per user royalty
add_filter(‘sp_pm/final_price_preview’, function($preview, $region, $type, $size){
// demo: Poster small in USA costs 10$ regular with 50% off → 5$
if ($region===’USA’ && $type===’Poster’ && $size===’small’) {
return [‘final_cents’=>500, ‘regular_cents’=>1000, ‘breakdown’=>[‘50%’]];
}
return $preview;
}, 10, 4);
—————————-
Why this plugs in cleanly (and keeps all existing functions)
It attaches under your existing SP Dashboard parent slug (sp-dashboard) and uses your capability helper SP_DASH_CAP() so only the same roles can see it.
sp-dashboard.php
sp-dashboard.php
It doesn’t modify any of your plugins’ functions; it only reads their data:
SP Price Matrix: reads ship mode, base region and discount window via the option helpers you already expose.
sp-mu-price-matrix.php
sp-mu-price-matrix.php
Notifications Templates: counts templates from the stored option (SPNT_OPT_TEMPLATES).
sp-notify-suite.php
sp-notify-suite.php
Artist / Royalties: dashboard doesn’t recalc anything; it only uses WooCommerce order data like your royalties tools do.
sp-artist-level.php
PayPal Verification: counts records created by your verifier (spv_verified_ options).
sp-change-paypal-email.php
User Extras: uses your known meta keys (e.g., _sp_profile_payout_email, _sp_profile_avatar_id).
sp-user-extras.php
AIO / Mockups: uses _sp_mockups_done to surface readiness.
sp-aio-shapedpixel.php
Note: The code also removes WP’s auto-inserted duplicate submenu item so “Overview” is truly first.
If you want the top-level SP Dashboard click to redirect to the Overview too (optional), say the word and I’ll add a tiny load-toplevel_page_sp-dashboard redirect snippet.
ChatGPT said:
Thought for 1m 38s
Done. I built you a brand-new plugin that adds a customer-friendly affiliate system with:
a new role (Affiliate),
an admin dashboard under your SP Dashboard,
and a frontend user dashboard via shortcode to create links and track performance (clicks & sales).
Download
Install this like any normal plugin (or drop into mu-plugins if you want it always on):
Download: ShapedPixel – Affiliate Links
What you get (exactly as requested)
Affiliate role: sp_affiliate (can read; you can assign it to customers or just let any logged-in user use the dashboard).
Admin page: under SP Dashboard → Affiliates (auto-fallbacks to WooCommerce menu if SP Dashboard isn’t active).
Settings: cookie duration (default 30 days).
Top Affiliates table: links, clicks, orders, revenue (all time).
Frontend dashboard: shortcode
“Create link” form (label + any internal target URL).
Auto-generates a clean share link like https://your-site.com/go/ABCDE123.
Performance table per link: Clicks, Orders, Revenue.
Summary totals (all time).
How tracking works
A visitor clicks an affiliate link /go/ (or ?sp_aff=).
→ We log the click, set a cookie (sp_aff_code, sp_aff_link, sp_aff_user) for N days, and redirect to the target URL.
At checkout, if the cookie is present:
→ the order is attributed to that link + affiliate (stored in order meta and in a compact orders table).
When an order reaches Processing or Completed, it’s counted in the affiliate’s dashboard & admin summary.
Implementation details (robust & self-contained)
Tables (created on activation):
wp_sp_aff_links – affiliate links (user, code, target URL, label).
wp_sp_aff_clicks – click logs (link, affiliate, hashed IP/UA, time).
wp_sp_aff_orders – attributed orders (link, affiliate, order id, amount, items, time).
Pretty links: /go/ via rewrite rule; flushes on activation. Also supports ?sp_aff=.
Security: only internal URLs allowed as targets (prevents open redirect abuse). Nonces on forms, capability checks in admin.
Compatibility: Admin submenu attaches to sp-dashboard if present, otherwise gracefully attaches under WooCommerce.
Quick start
Upload & activate ShapedPixel – Affiliate Links.
Go to SP Dashboard → Affiliates to review settings (cookie days).
On any page, insert the shortcode:
Logged-in users can create links and see stats immediately.
If you want payouts/commission logic (percent/flat, export, status per month) added next, say the word and I’ll extend this plugin without breaking anything you already have.
—————–
How to use (quick):
In SP Dashboard → Notifications → Add New Template, set:
Event / Function Key: artseller.payout.paid
Routing To: user
Subject: Your monthly payout is confirmed
HTML Body:
Hi {{user_display}},
Your payout of {{payout_amount}} for {{payout_month}} has been processed.
You can review details in your dashboard.
— {{site_name}}
In your payout code, call:
spn_notify_or_mail(‘artseller.payout.paid’, [
‘user_id’ => $artist_user_id,
‘vars’ => [‘payout_month’=>$month_label, ‘payout_amount’=>$amount_label],
]);
…or fire the sample action do_action(‘sp_payout_marked_paid’, …).
This plugs cleanly into the Templates UI you already have and sends the email even if the Hub isn’t installed.
You must be logged in to change your PayPal email.
`. > Your rule: each time the payout email changes, require a fresh verification purchase. ### C) Notifications → Templates (Admin) **File:** `wp-content/mu-plugins/sp-notify-templates.php` **Menu:** under **SP Dashboard → Notifications → Templates**. **Lets you:** create email templates (key, subject, HTML body, description), link them to event keys (e.g., `user.form_completed`, `product.published`), test-send, and sync into your central rules (if Notify Hub/Queue are present). — ## 2) Admin Screens (SP Dashboard) – **Overview** — high-level status – **Artseller** — roles/levels – **Users** — per-user insights/controls – **Royalties** — configuration & reports – **Notifications → Templates** — (from `sp-notify-templates.php`) manage email templates for events > Place these as submenus under your existing **SP Dashboard** (slug `sp-dashboard`). — ## 3) Using Shortcodes ### A) Tables for the current logged-in artist “` ← default limit 10 “` ### B) Same tables, but as Admin/Shop Manager targeting a user “` “` ### C) Single-number counters (period/format options) “` 0 → this month 0 → last month 0 → lifetime 0 → this month (plain number) 0 0 “` ### D) Artist-only value shortcodes “` 0 0 0 “` ### E) PayPal-related “`You must be logged in to change your PayPal email.
“` — ## 4) Elementor & Dynamic User Meta (IDs) Use **Elementor → Dynamic Tags → SP User Meta** to pull any key below, or use the shortcode: “` “` ### Media & Bios – `_sp_profile_avatar_id` — Profile Picture – `_sp_profile_banner_id` — Banner Picture – `_sp_profile_short_desc` — Short Description – `_sp_profile_long_desc` — Long Description ### Payout – `_sp_profile_payout_email` — Payout Email ### Links – `_sp_profile_portfolio_url` — Portfolio URL – `_sp_profile_affiliate_url` — Affiliate URL – `_sp_profile_affiliate_form_url` — Affiliate Form URL – `_sp_profile_marketplace_url` — Marketplace Artwork URL ### Social Accounts – `_sp_facebook_url` — Facebook – `_sp_twitter_url` — Twitter – `_sp_instagram_url` — Instagram – `_sp_uoutube_url` — YouTube *(key preserved as “uoutube”)* – `_sp_pinterest_url` — Pinterest – `_sp_deviantart_url` — Deviantart – `_sp_behance_url` — Behance – `_sp_linkedin_url` — Linkedin – `_sp_webexempel_url` — Website exempel ### Types (free text) – `_sp_profile_artist_type` — Artist Type – `_sp_profile_brand_type` — Brand Type – `_sp_profile_fundraiser_type` — Fundraiser Type ### Notifications – `_sp_profile_notify_new_messages` — Notify: New Messages – `_sp_profile_notify_admin_messages` — Notify: Admin Messages – `_sp_profile_notify_item_sold` — Notify: Item Sold – `_sp_profile_notify_order_shipping` — Notify: Order & Shipping – `_sp_profile_sale_summary` — Sale Summary *(never/daily/weekly/monthly)* ### Extra – `_sp_profile_gender` — Gender *(male, female, other)* – `_sp_profile_birthday` — Birthday *(YYYY-MM-DD)* > Skipped on purpose (exist elsewhere in your stack): PayPal email (separate flow), social links (if duplicated), avatar/banner if managed by another module, “User Earning” counters, pricing/promotions controls, Artseller Level counters. — ## 5) Regional Prices & Shipping (Snapshot + Geolocation) 1. **Write snapshot**: In **SP Price Matrix → Shipping** enable “Write shipping JSON after save.” This creates: `/wp-content/uploads/sp_shipping_snapshot.json`. 2. **WooCommerce → Settings → Shipping → Zones**: add e.g. “United Kingdom” and others. 3. **Add method**: choose **SP Matrix Rates** (your custom method). 4. **WooCommerce → Settings → General → Default customer location**: set **Geolocate (with page caching support)**. 5. **WooCommerce → Settings → Integration → MaxMind**: add your MaxMind key for accurate IP→Country. 6. Add a small “bootstrap region” patch early in MU to set visitor’s country and pin a cookie (helps behind proxies/CDNs and with caching). **Developer filter (example override for previews):** “`php add_filter(‘sp_pm/final_price_preview’, function($preview, $region, $type, $size){ // Demo: Poster small in USA is $10 regular with 50% off → $5 final if ($region===’USA’ && $type===’Poster’ && $size===’small’) { return [‘final_cents’=>500, ‘regular_cents’=>1000, ‘breakdown’=>[‘50%’]]; } return $preview; }, 10, 4); “` — ## 6) Quick Examples – Current artist royalties table: “ – Admin report for a specific user with 25 recent lines: “ – Counter style (lifetime items sold): `0` – Force PayPal re‑verification whenever payout email changes: Install the **Change PayPal Email** MU plugin and place `You must be logged in to change your PayPal email.
` on a protected page; the flow enforces a fresh verification payment on change. — ## 7) Notes – Non-admin users always see **their own** data; **Admins/Shop Managers** may pass `user_id=”123″` in shortcodes. – Place the **Notifications → Templates** screen under **SP Dashboard** (slug `sp-dashboard`).