feat: PRAB article JSON-LD emitter + meta reader (v0.8.0)
- PR_Core_Jsonld_Article: meta-triggered emitter for PRAutoBlogger posts (trigger: _prab_schema_version=1 on post type). Yoast path retypes page node to MedicalWebPage (wpseo_schema_webpage_type priority 10) and enriches Article piece with citation[], about[]→Drug @id, lastReviewed, honest reviewedBy (wpseo_schema_graph priority 13). No-Yoast fallback emits standalone @graph. Posts without trigger meta are byte-unchanged. - PR_Core_Prab_Meta_Reader: sanitises all _prab_* contract-v1 meta at read time. URLs validated (http/https), DOIs normalised to https://doi.org/ URI, JSON arrays per-element validated, WP user ID resolved. Malformed values degrade gracefully. Honest reviewedBy: Person ONLY when mode=human + valid user ID; else Organization. Never a fabricated person. - Unit tests: JsonldArticleTest.php — 22 assertions covering is_triggered, review_mode, reviewed_by Person/Org decision tree, citation sanitization, DOI normalisation, about linkage, retype passthrough, enrich, no-new-nodes, editorial-system-never-person. - bootstrap.php: WP_User stub + get_userdata reads pr_test_userdata global. - ARCHITECTURE.md: updated JSON-LD class tree + PRAB emission section. - CONVENTIONS.md: PRAB contract v2 extension guide added. - CHANGELOG.md + version bump to v0.8.0. Ratified contract: convo/prcore/decisions/2026-06-11-jsonld-contract-v1.md File sizes: article.php=235L, meta-reader.php=265L (both < 300-line gate). No duplicate Article/WebPage nodes. uninstall.php unaffected (_prab_* unowned). Agent-Session: prcore-jsonld-article-20260622
This commit is contained in:
@@ -19,7 +19,7 @@ declare(strict_types=1);
|
||||
* What: Registers all hooks, runs migrations, boots subsystems.
|
||||
* Who calls it: peptide-repo-core.php on plugins_loaded.
|
||||
* Dependencies: PR_Core_Migration_Runner, PR_Core_Peptide_CPT, PR_Core_Topic_Taxonomy,
|
||||
* PR_Core_Admin, PR_Core_Disclaimer, PR_Core_Jsonld,
|
||||
* PR_Core_Admin, PR_Core_Disclaimer, PR_Core_Jsonld, PR_Core_Jsonld_Article,
|
||||
* PR_Core_Rest_Controller, PR_Core_Related_Posts_Section.
|
||||
*
|
||||
* @see peptide-repo-core.php — Bootstrap that instantiates this class.
|
||||
@@ -91,6 +91,9 @@ class PR_Core {
|
||||
$jsonld = new PR_Core_Jsonld();
|
||||
$jsonld->register_hooks();
|
||||
|
||||
$jsonld_article = new PR_Core_Jsonld_Article();
|
||||
$jsonld_article->register_hooks();
|
||||
|
||||
// Related Articles section (frontend).
|
||||
$related_posts = new PR_Core_Related_Posts_Section(
|
||||
new PR_Core_Internal_Posts_Provider()
|
||||
|
||||
Reference in New Issue
Block a user