Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/curly-sprout-creative/curly-projects/archive/refs/heads/main.zipCustom projects post type for Curly Sprout sites — a portfolio/works
entry with service + type taxonomies, a links repeater, and shortcodes built
for Oxygen 6 Post Loops. Pairs with the WordPress archive at /projects/.
Repo: Curly-Sprout-Creative/curly-projects (public). Updates flow
GitHub Release → plugin-update-checker → wp-admin, the same pipeline as
curly-events / curly-site-tools.
Post type
projects—has_archive(/projects/), supports title, editor, featured image, excerpt, and page attributes (order withmenu_order).show_in_reston, so the Oxygen 6 agent can create/read projects.project_service— the "what we did" line (Graphic Design, Copywriting, Websites, …).project_type— Website / Email / Branding, so non-website work (e.g. email campaigns) can be looped in or excluded.- Both taxonomies have rewrite disabled (admin tagging + loop queries only).
Meta
| Key | Type | Notes |
|---|---|---|
_project_links |
array of {label, url, target} |
The links shown under the card. Repeater UI in the post edit screen. |
_project_url |
string | Optional primary URL, used as a fallback when _project_links is empty. |
Both are registered with show_in_rest, so they work with Oxygen 6 dynamic
data and the MCP agent.
Shortcodes
Both default to the current loop post, so drop them into an Oxygen 6 Post Loop
item with no id.
[project_links]
Renders the repeater as a row of mini links.
[project_links]
[project_links class="mini-link-row" link_class="mini-link hover-slide-up"]
| Attribute | Default | Notes |
|---|---|---|
id |
current post | |
class |
mini-link-row |
Container class. |
link_class |
mini-link hover-slide-up |
Anchor class. |
fallback_label |
Visit website |
Used when a row has no label. |
[project_services]
Renders terms joined by a separator (the "Copywriting • Website" label).
[project_services]
[project_services taxonomy="project_type"]
[project_services taxonomy="project_service" sep=" • "]
| Attribute | Default | Notes |
|---|---|---|
id |
current post | |
taxonomy |
project_service |
Or project_type. |
sep |
• |
|
link |
0 |
1 links each term to its term archive. |
class |
project-services |
Wrapper class. |
Oxygen 6 wiring
- Projects section (home) — a
PostsListqueryingpost_type=projects,orderby=menu_order,order=ASC. Each item is the Project Card component: featured image,[project_services]label, title, excerpt/content,[project_links]. - Archive —
/projects/is the CPT archive. Assign the O6 template to it (or render the same card in aPostsList).
Development
php -levery PHP file,node --checkevery JS asset.- Version header in
curly-projects.phpmust match the git tag (1.0.0↔v1.0.0); tagging triggers.github/workflows/release.yml, which builds and uploads the zip as a GitHub Release. - Never hand-edit plugin files on a server — ship a release and let the site updater pull it.