fix(schema): v0.6.2 — move Drug/FAQ injection to wpseo_schema_graph; fix peptide 500

Root cause: inject_graph_pieces() added plain PHP arrays to wpseo_schema_graph_pieces.
Yoast Schema_Generator::filter_graph_pieces_to_generate() calls get_class() +
is_needed() on every piece expecting Abstract_Schema_Piece objects — a plain array
produces: PHP Fatal: get_class(): Argument #1 ($object) must be of type object,
array given. All peptide monograph pages returned HTTP 500; non-peptide pages were
unaffected (is_singular guard).

Fix: remove wpseo_schema_graph_pieces hook entirely. New inject_graph_nodes() method
hooks wpseo_schema_graph at priority 12 (after enrich_webpage_piece at 11), which
receives the fully-assembled graph as array-of-arrays — safe for plain array appends.

Also adds regression test (test-jsonld-peptide-piece.php) that:
- Reproduces the v0.6.1 get_class(array) TypeError (fails-before)
- Confirms inject_graph_nodes Drug+FAQ emission is correct (passes-after)

Agent-Session: jsonld-peptide-piece-fix v0.6.2
This commit is contained in:
peptiderepo
2026-06-13 07:12:46 +00:00
parent 118f301705
commit 0bbb75fd26
4 changed files with 423 additions and 29 deletions

View File

@@ -3,6 +3,19 @@
All notable changes to Peptide Repo Core are documented here.
Format: [Semantic Versioning](https://semver.org/).
## [0.6.2] — 2026-06-13
### Fixed
- **Critical**: Peptide monograph pages (e.g. `/peptides/bpc-157/`) returned HTTP 500 after v0.6.0 launch. Root cause: `PR_Core_Jsonld::inject_graph_pieces()` appended plain PHP arrays (Drug, FAQ) to Yoast's `wpseo_schema_graph_pieces` filter. Yoast's `Schema_Generator::filter_graph_pieces_to_generate()` then called `get_class()` and `is_needed()` on every piece, expecting `Abstract_Schema_Piece` objects — a plain array causes `PHP Fatal: get_class(): Argument #1 ($object) must be of type object, array given`. Non-peptide pages (/, /about/, /peptides/ archive) were unaffected because the `is_singular('peptide')` guard prevented entry.
- Fix: removed `wpseo_schema_graph_pieces` hook entirely. Drug and FAQPage nodes are now injected via a new `inject_graph_nodes()` method hooked on `wpseo_schema_graph` at priority 12, which receives Yoast's fully-assembled graph as an array of plain arrays — safe for plain array appends.
- Added regression test `tests/unit/test-jsonld-peptide-piece.php` that reproduces the v0.6.1 `get_class(array)` fatal and verifies the v0.6.2 `inject_graph_nodes` path emits Drug + FAQ correctly across peptide, non-peptide, and empty-FAQ scenarios.
### Changed
- `PR_Core_Jsonld::register_hooks()`: no longer registers `wpseo_schema_graph_pieces`; registers `wpseo_schema_graph` at priority 12 for Drug/FAQ injection (in addition to priority 11 for `enrich_webpage_piece`, unchanged).
- `PR_Core_Jsonld::inject_graph_pieces()` renamed to `inject_graph_nodes()`; signature updated from `(array $pieces, $context)` to `(array $graph, $context)` to reflect that it now receives the assembled graph, not the pieces array.
## [0.6.1] — 2026-06-13
### Fixed