Artopia Gallery
WordPress plugin to create client art gallery from LightRoom catalog
by aCharlieKelly · github.com/acharliekelly/artopia-gallery · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/acharliekelly/artopia-gallery/archive/refs/heads/main.zipCustom WordPress plugin for managing artist portfolios, importing artwork catalogs, and powering gallery websites for Artopia Giclée clients.
Overview
Artopia Gallery is a purpose-built WordPress plugin designed to streamline the process of turning artist inventory data into polished web galleries.
Many artists maintain artwork records in spreadsheets or Lightroom exports but have little interest in building or maintaining websites. This plugin bridges that gap by allowing administrators to bulk import artwork data, organize artists and galleries, and manage collections inside WordPress.
Current Features
Custom Content Model
- Artists custom post type
- Artworks custom post type
- Gallery taxonomy for organizing artist-scoped collections
Artwork Metadata
Each artwork supports:
- Artist relationship
- Filename
- Medium
- Year
- Dimensions
- Price
- Status
Importer
Admin import workflow includes:
- Choose import format
- Select Artist
- Enter Gallery Name
- Choose whether imported artworks are created as published posts or drafts
- Upload import file
- Load Lightroom catalogs to discover collections before validation/import
- Validate before import
- Temporary staged-upload reuse so validation and import can use the same file without re-uploading
- Shared validation/import pipeline across supported source formats
- Header normalization / alias handling for CSV
- Required field enforcement
- Duplicate prevention for repeated imports using a normalized import identity, with legacy fallback checks for older imported records
- Artist-scoped gallery lookup and creation
- Legacy unowned gallery adoption when a matching gallery is reused during import
- Bulk creation of Artwork posts
- Import summary reporting
Gallery terms are treated as artist-owned collections by the plugin. Two artists may use the same gallery name without sharing the same logical gallery record.
Currently supported formats:
CSVLightroom Catalog (.lrcat)through direct SQLite-backed catalog reading
Lightroom import notes:
- PHP SQLite support is required (
SQLite3orpdo_sqlite) - One catalog import targets one selected Lightroom collection
- If a collection named
Finalsexists, it is preferred automatically - Lightroom keywords are currently ignored
Shortcode behavior
The preferred shortcode pattern for gallery-specific output is:
[artopia-gallery gallery="landscapes" artist_id="123"]
When both gallery and artist_id are provided, the plugin resolves the gallery in artist context. Using gallery alone remains supported for backward compatibility, but can be ambiguous if multiple artists reuse the same gallery name.
Public templates
The plugin now manages its own public templates for:
- artist archive pages
- single artist pages
- gallery taxonomy pages
- single artwork pages
Template routing is handled inside the plugin, and gallery taxonomy pages reuse the same shared gallery rendering path used by the shortcode. The shortcode remains available and is still the preferred portable way to embed gallery output inside other content.
Artist pages use canonical singular permalinks such as /artists/charlie-kelly/. Single artist pages now show the artist details plus all galleries explicitly owned by that artist, with links to each gallery page.
Admin Tools
- Dashboard summary for artists, artworks, gallery ownership health, and draft content
- Multi-format import workflow with validate/import steps and publish/draft mode
- Gallery ownership review, manual owner assignment, and safe backfill for unowned legacy galleries
Supported CSV Columns
Required
filenametitle
Optional
mediumyeardimensionspricestatusdescription
Supported Aliases
Examples:
dimension→dimensionssize→dimensionsname→titleimage→filename
Example CSV
filename,title,medium,year,dimensions,price,status
marsh-sunset.jpg,Marsh Sunset,Oil on Canvas,2024,24x36,1800,available
cat-study.jpg,Cat Study,Pastel,2025,12x16,450,sold
Development
Install dev dependencies from the plugin directory:
cd wp-content/plugins/artopia-gallery
composer install
Run unit tests:
composer test
Testing
Unit tests live in tests/Unit.
Manual importer regression fixtures live in fixtures/:
import_min.csv: minimal valid importimport_default.csv: standard happy-path import with real image filenamesimport_bad.csv: invalid rows and warning scenariosimport_abnormal.csv: normalization and alias-header edge casesimport_duplicates.csv: repeat-import duplicate checksimport_same_filename_diff_title.csv: same filename, different title duplicate behaviorfake_lightroom_export/: synthetic Lightroom.lrcatfixture plus manifest for Phase 6 importer development
CI runs PHPUnit and PHP syntax linting through GitHub Actions in .github/workflows/phpunit.yml.
Uninstall Policy
Artopia Gallery currently uses a non-destructive uninstall policy.
Uninstalling the plugin leaves existing artists, artworks, gallery terms, attachments, and related post/term meta in place. The plugin treats these records as site content and does not remove them automatically.