HAP Logo Square PNG

2026

Entries Now Open

My Uploads Plugin — v1.9.3-fix9

Plugin name

My Uploads Shortcode

Purpose

End-to-end submission and judging flow for the Harden Art Prize:

  • Artists: upload, edit drafts, then set to Private for judging; can preview only their own entry.

  • Judges: view all private submissions, score/comment, and see progress/averages.

  • Built-in nonces/links so the preview/review pages open the correct post safely.

Roles required

  • Artists: register/pay via Paid Memberships Pro (PMPro) (UM login also works).

  • Judges: role hap_judge (or judge / pmpro_role_*) with read_private_posts capability.

  • Admins: full access as usual.

Critical capability for judges: read_private_posts (otherwise they won’t see entries after artists submit).


Shortcodes

I have used ‘#’ instead of ‘[‘ as the latter symbols trigger the actual shortcodes.


1) #my_uploads]

What it does: Artist’s table to view/edit their own drafts and private posts; links to a secure preview page.

Common attributes

  • category (required): category slug for the current year, e.g. 25-artwork-submissions.

  • statuses: comma list (e.g. draft,private) to show in the table.

  • per_page: number of rows (e.g. 20).

  • show_attachments: true|false — show file/thumbnail column.

  • preview_url: path to the preview page containing

    No artwork selected.

    .

  • bypass_pmpro_preview: true|false — ensures the preview page isn’t gated by PMPro.

Example

 

[my_uploads category="25-artwork-submissions"
statuses="draft,private"
per_page="20"
show_attachments="true"
preview_url="/artwork-preview/"
bypass_pmpro_preview="true"]



2) #my_artwork_preview]

What it does: Secure, read-only preview for artists/judges/admin.
How it’s called: Link includes ?post_id=###&ms_nonce=... from the artist table.
Attributes: None (uses request parameters).


3) #judges_dashboard]

What it does: Judges’ master table (all Private entries), per-judge progress panel, average score.
Common attributes

  • category (required): category slug for the current year.

  • review_url: path to the page with /judge_review/.

  • include_former: false|true — whether to include past judges in averages/columns.


Example

#judges_dashboard category=“25-artwork-submissions”
review_url="/judge-review/"
include_former="false"]

Extras in fix6+

  • Download CSV button on the judges dashboard (scores, comments, timestamps). No shortcode change needed.

In fix9: Titles in the judges table show the raw post title (no “Private:” prefix).


4) #judge_review]

What it does: Judge’s side-by-side artwork view + scoring form (per-judge fields).
Common attributes

  • review_return: path back to the dashboard (e.g. /judges-dashboard/).

Example

 ##judge_review review_return=“/judges-dashboard/”]




Plugin pre-requisites & field/label mapping

Required plugins / settings

  • Frontend Post Submission Manager (FPS) — used for artist submission form.

  • PMPro — handles artist registration/payment; make sure it does not gate judges pages.

  • Ultimate Member (UM) — used to create/approve judge accounts (optional for artists’ login).

  • My Uploads Shortcode settings (WP Admin → Settings → Judges):

    • Select the Judges Dashboard page (contains ##judges_dashboard]).

    • Select the Judge Review page (contains ##judge_review])
      These are whitelisted so PMPro doesn’t block judges.

  • Artist table also passes bypass_pmpro_preview="true" so /artwork-preview/ isn’t PMPro-gated.

Data mapping used in preview/review

  • Full Namepost meta: name (common variants supported)

  • Emailpost meta: email

  • Dimensionspost meta: dimensions

  • Mediumpost_excerpt (fallback to post meta: medium)

  • Artist Statementpost_content (fallback to post meta: artist_comments)

Judge scoring storage (per post, per judge)
judge_score_{userID} (float)

  • judge_comment_{userID} (string)

  • judge_reviewed_at_{userID} (datetime)



Annual rollover: how to keep it working

New Post Category each year

Create a new category/slug for the year (e.g. 26-artwork-submissions) and update the shortcodes:

  1. Create the category: Posts → Categories

    • Name: “2026 Artwork Submissions”

    • Slug: 26-artwork-submissions


  2. Update pages:

    • Artist dashboard page: set ##my_uploads category="26-artwork-submissions" ...]

    • Judges dashboard page: set ##judges_dashboard category="26-artwork-submissions" ...]

    • (If you’re using the Team plugin, update its ##team_dashboard category="26-artwork-submissions"] too.)

  3. Check PMPro gating:

    • Verify /judges-dashboard/, /judge-review/, and /artwork-preview/ remain whitelisted in Settings → Judges and/or PMPro page rules.

  4. Leave last year’s posts alone (they stay in their old category).

    • Keeps archives intact and avoids breaking any saved links to the old category page.