Repository navigation
Releases: jwincek/shelterkit-pets
Release list
1.5.0
1.4.0
1.3.1
1.3.0
1.2.0
1.1.1
[1.1.1] - 2026-08-11
Fixed
-
Bonded-pair badges vanished from listing grids, sliders and favourites
modals. A bonded pet showed its badge on its own page and nowhere else, so
the two animals looked adoptable separately in exactly the places a visitor
browses.summaryandgridrequest the computedis_bonded_pairand
bonded_pair_namesbut not the api_fields they are derived from, and
hydration narrowed api_fields to the shape before computing. Those fields
therefore derived from a partial entity and always resolved to false.
Introduced in 1.1.0 by the provider-decoupling work, which moved the
computation from the always-present API snapshot onto the shape-filtered
entity.Fixed structurally rather than per-field: api_fields hydrate in full and the
output is narrowed at the end, so a computed field always sees a complete
entity. Measured at 0.7ms per pet and zero extra queries for a 60-pet grid.
1.1.0
[1.1.0] - 2026-08-11
Renamed to ShelterKit Pets. The slug, text domain and main plugin file all
changed with it; the plugin's internal naming (Petsync\, PETSYNC_) and every
stored identifier — post type, taxonomies, meta keys, option names, cron hooks
and all 21 block names — deliberately did not, so no placed block or stored
record is affected.
Added
- Import pets from CSV. Pets → Import, and
wp shelterkit import. Column
headings are matched loosely, so "Good with dogs?" finds the right field and a
shelter's existing spreadsheet needs no renaming. A preview shows exactly what
will be added, changed or skipped — including any heading that could not be
placed — and nothing is written until it is confirmed. Re-uploading a corrected
sheet updates rather than duplicates, matching on microchip number. Imported
pets count as hand-entered, so a later sync never overwrites or unpublishes
them. - Export pets to CSV and JSON. Pets → Export, and
wp shelterkit export.
Two modes:portablere-imports,fullincludes computed fields for reading.
Both use the same column schema as the importer, so an export can be edited in
a spreadsheet and imported straight back. wp shelterkit migrate, so a database upgrade is deliberate and
observable rather than firing on whichever page load happens to be first.
--dry-runnames every pending migration without writing. The rail no longer
runs automatically under WP-CLI; web traffic still triggers it as before.- Provider vocabulary moved into
config/providers/<slug>.json. Adding a
platform is adding a file, not editing PHP. Maps can rename a field, translate
a value (Adopt-a-Pet sends sex asf/m), invert a polarity, and declare
nested response paths. - Fixture-backed maps for Adopt-a-Pet and RescueGroups.org, neither
verified against a live account and both marked as such in the file. They exist
to prove the provider layer is general, not to be shipped to a shelter. - A notice when the provider goes dark. Pets carry
_pet_last_seen, so a
feed that stops returning an animal is visible rather than silent. - Read abilities offered to MCP clients via
meta.mcp.public, after the read
surface was covered by tests. - Pet gallery images can be managed from the dashboard.
- A test suite: 248 integration and unit tests at this release.
Changed
- Image sizes are budgeted. A sideloaded photo is capped at 1600px on its
longest edge and generates only the three sizes the plugin actually renders,
cutting the pet media footprint by 39%. Filterable via
petsync_max_image_edgeandpetsync_rendered_image_sizes. Existing
attachments are untouched. - CSV is written and read as RFC 4180 — quotes doubled, no backslash escape —
which is what Excel and Google Sheets both produce and consume. - Kennel-card printing now requires
edit_others_postsrather than being
available to any author. - The canonical field vocabulary is frozen, with two renames carried by a
migration and one block-binding alias kept for compatibility.
Fixed
- A portable export omitted every pet's description.
descriptionis
computed from the post content, so it never arrived through the editable-field
list — a backup carried all of a pet's data and none of its story, and
restoring one produced empty descriptions. Found by the import round-trip.
Anyone holding an export taken before this release should re-export. - The gallery lightbox opened behind the page.
position: stickyalways
creates a stacking context, even atz-index: auto, so a sticky ancestor
buried the overlay. Now a native<dialog>, whose top layer escapes every
stacking context without moving the element. - Hand-entered pets received no compatibility attribute terms, so they were
invisible to filtering while looking correct on their own page. Terms are now
derived from the canonical field rather than from raw provider data. - Site Editor customisations survived the renames. Migrations 4 and 5
consolidate template customisations filed under any of the plugin's four
previouswp_themenamespaces. - A negative ID passed to the batch-get ability resolved to a real, unrelated
pet, becauseabsint()takes the absolute value. Three separate occurrences
fixed tointval()with a positive filter. - The hero crossfade read state where it should have read context.
- Kennel-card block styles are loaded on the admin screen, so the print sheet
is styled.
Security
- Visitor favourite and comparison cookies are guarded, and the REST security
model is documented atPetsync_REST::check_permission. - Kennel-card ID parsing and plugin deactivation paths are hardened.
1.0.0 — first public release
First public release, prepared for WordPress.org submission.
Install
Download shelter-pets-1.0.0.zip below and install via Plugins → Add New → Upload Plugin. Requires WordPress 6.9+ and PHP 8.1+.
The attached zip is the artifact CI built from this tag — not a local build — so it's exactly what passed Plugin Check. Development files are excluded by .distignore, enforced by bin/build-dist.sh.
What's in it
- Adoptable pets as a custom post type, on your own domain and indexed by search engines
- 21 blocks: cards, listing grid, slider, filters, details, gallery, actions, attributes, health, compatibility, comparison, compare bar, favorites, adoption CTA, adoption fee, breadcrumb, tagline, toast notifications, back-to-top
- Taxonomy filtering (species, breed, age, size, sex, colour) plus URL-driven compatibility filters
- Anonymous favorites and side-by-side comparison via the Interactivity API — no login required
- Batched sync from the Petstablished public API, with progress UI and WP-Cron scheduling
- Built on the Abilities API and Block Bindings; server-rendered, no build step
- Uninstall preserves data by default, with an opt-in for full removal
Note on the name
Previously Shelter Pet Sync. Renamed before submission because sync is one way to populate the plugin, not what it is. Nothing was published under the old name, and no stored data changed — the post type, meta keys and options were deliberately left alone.
This plugin is not affiliated with, endorsed by, or sponsored by Petstablished. "Petstablished" is a trademark of its respective owner, used here only to describe compatibility.