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)

→ Login link (with optional redirect + custom text)

→ 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)

→ Login link (with optional redirect + custom text)

→ 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

Click or drag a file to this area to upload.
Does this artwork contain mature content?
* Mature content is generally anything that contains sexual, graphic, or violent imagery or language. To learn more visit our Community Guidelines

Artwork calibrating & Details Adding - Step 2 of 2

Zoom 1.00
Safe
0 of 14 max characters.
0 of 10 max words.
# ShapedPixel – Artseller Suite (MU Plugins) — Clean Guide This guide organizes the features, shortcodes, admin screens, and setup steps referenced in your working notes into a single, labeled document. — ## 1) What’s Included (by purpose) ### A) Core Artseller/ROYALTIES MU Plugin **File:** `wp-content/mu-plugins/shapedpixel-artseller.php` **Adds:** Admin UI (Overview / Artseller / Users / Royalties), regional royalties engine, auto-promotion/levels, and multiple shortcodes. **Key shortcodes (full tables):** – “ — table: items sold this month / last month / lifetime – “ — table: royalties this month / last month / lifetime – “ — table of recent royalty lines (default 10 rows) **Admin targeting:** All three tables can target a specific user when used by Admin/Shop Manager: “` “` **Value-only counters (single numbers):** “` 0 → items sold this month 0 → last month 0 → lifetime 0 → this month (plain number) 0 → last month formatted with currency 0 → lifetime in cents “` **Artist status (value-only)** — for logged-in artsellers (Admins may pass `user_id`): “` → Artist / Fundraiser / Business 0 → level number (1–5) 0 → number of published products 0 → remaining uploads (level cap − current active/pending) “` **Other convenience shortcodes you might already have:** “` [sp_artist_level] [sp_sales_this_month] [sp_sales_last_month] [sp_sales_lifetime] [sp_artist_dashboard] “` ### B) PayPal Verification & Email Change **Front-end verification button:** `

One-time PayPal verification ($1) is required to receive payouts for your sales.

Wholesale

Shaped Pixel continually looks for avenues to maximize your revenue for art. We work with curated retailers that fit our brand. Royalty payments for wholesale orders are 20% of net profits. If you’d like to opt out, leave the box unchecked.

` — opens PayPal hosted button, unlocks form only after successful micro-payment verification. **Change PayPal email form:** `spv-change-paypal-email.php` (MU plugin) with shortcode `

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 “`

One-time PayPal verification ($1) is required to receive payouts for your sales.

Wholesale

Shaped Pixel continually looks for avenues to maximize your revenue for art. We work with curated retailers that fit our brand. Royalty payments for wholesale orders are 20% of net profits. If you’d like to opt out, leave the box unchecked.

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 0

You must be logged in to change your PayPal email.

One-time PayPal verification ($1) is required to receive payouts for your sales.

Wholesale

Shaped Pixel continually looks for avenues to maximize your revenue for art. We work with curated retailers that fit our brand. Royalty payments for wholesale orders are 20% of net profits. If you’d like to opt out, leave the box unchecked.

  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_<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: shortcode
Please log in to manage your affiliate links.
“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/<code> (or ?sp_aff=<code>). → 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/<code> via rewrite rule; flushes on activation. Also supports ?sp_aff=<code>. 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:
Please log in to manage your affiliate links.
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: <p>Hi {{user_display}},</p> <p>Your payout of <strong>{{payout_amount}}</strong> for <strong>{{payout_month}}</strong> has been processed.</p> <p>You can review details in your dashboard.</p> <p>— {{site_name}}</p> 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.

Upload your artwork

Click or drag a file to this area to upload.
Does this artwork contain mature content?
* Mature content is generally anything that contains sexual, graphic, or violent imagery or language. To learn more visit our Community Guidelines

Artwork calibrating & Details Adding - Step 2 of 2

Zoom 1.00
Safe
0 of 14 max characters.
0 of 10 max words.

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.

One-time PayPal verification ($1) is required to receive payouts for your sales.

Wholesale

Shaped Pixel continually looks for avenues to maximize your revenue for art. We work with curated retailers that fit our brand. Royalty payments for wholesale orders are 20% of net profits. If you’d like to opt out, leave the box unchecked.



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

Please log in to manage your affiliate links.

“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:

Please log in to manage your affiliate links.

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.

# ShapedPixel – Artseller Suite (MU Plugins) — Clean Guide This guide organizes the features, shortcodes, admin screens, and setup steps referenced in your working notes into a single, labeled document. — ## 1) What’s Included (by purpose) ### A) Core Artseller/ROYALTIES MU Plugin **File:** `wp-content/mu-plugins/shapedpixel-artseller.php` **Adds:** Admin UI (Overview / Artseller / Users / Royalties), regional royalties engine, auto-promotion/levels, and multiple shortcodes. **Key shortcodes (full tables):** – “ — table: items sold this month / last month / lifetime – “ — table: royalties this month / last month / lifetime – “ — table of recent royalty lines (default 10 rows) **Admin targeting:** All three tables can target a specific user when used by Admin/Shop Manager: “` “` **Value-only counters (single numbers):** “` 0 → items sold this month 0 → last month 0 → lifetime 0 → this month (plain number) 0 → last month formatted with currency 0 → lifetime in cents “` **Artist status (value-only)** — for logged-in artsellers (Admins may pass `user_id`): “` → Artist / Fundraiser / Business 0 → level number (1–5) 0 → number of published products 0 → remaining uploads (level cap − current active/pending) “` **Other convenience shortcodes you might already have:** “` [sp_artist_level] [sp_sales_this_month] [sp_sales_last_month] [sp_sales_lifetime] [sp_artist_dashboard] “` ### B) PayPal Verification & Email Change **Front-end verification button:** `

One-time PayPal verification ($1) is required to receive payouts for your sales.

Wholesale

Shaped Pixel continually looks for avenues to maximize your revenue for art. We work with curated retailers that fit our brand. Royalty payments for wholesale orders are 20% of net profits. If you’d like to opt out, leave the box unchecked.

` — opens PayPal hosted button, unlocks form only after successful micro-payment verification. **Change PayPal email form:** `spv-change-paypal-email.php` (MU plugin) with shortcode `

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 “`

One-time PayPal verification ($1) is required to receive payouts for your sales.

Wholesale

Shaped Pixel continually looks for avenues to maximize your revenue for art. We work with curated retailers that fit our brand. Royalty payments for wholesale orders are 20% of net profits. If you’d like to opt out, leave the box unchecked.

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`).