From 772462eeca3002a1d52508aeba485aab2b4742ad Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 03 Mar 2026 19:06:19 +0000
Subject: [PATCH] =MAJOR OVERHAUL. Likely should have made a new branch ages ago. Key changes: Registrar.php is the base for custom post types, taxonomies, and user roles. Replaces JVB_CONTENT, JVB_TAXONOMY, and JVB_USER constants, eliminates most of Features.php (except for JVB_SITE, JVB_MEMBERSHIP), and has built in sanitizing and validation via sub-classes. Also started a major overhaul of the Schema output. Created a shit ton of property traits and classes to help sanitize and ensure proper data for different schema types. Still a bunch to do, but better to be starting committing changes here on this other branch.
---
inc/meta/Meta.php | 38 +++++++++++++++++++++++++++++++++++++-
1 files changed, 37 insertions(+), 1 deletions(-)
diff --git a/inc/meta/Meta.php b/inc/meta/Meta.php
index 1316684..8984345 100644
--- a/inc/meta/Meta.php
+++ b/inc/meta/Meta.php
@@ -1,6 +1,8 @@
<?php
namespace JVBase\meta;
+use JVBase\registrar\Registrar;
+
if (!defined('ABSPATH')) {
exit;
}
@@ -245,7 +247,7 @@
return [];
}
- return jvbGetFields($contentType ?? 'options', $objectType);
+ return Registrar::getFieldsFor($contentType??'options');
}
// ─────────────────────────────────────────────────────────────
@@ -276,6 +278,11 @@
*/
public function get(string $name): mixed
{
+ // Handle repeater subfield path
+ if (str_contains($name, ':')) {
+ return $this->getByPath($name);
+ }
+
// Check computed fields first
if (isset($this->computed[$name])) {
return ($this->computed[$name])($this);
@@ -301,6 +308,11 @@
*/
public function set(string $name, mixed $value): self
{
+ // Handle repeater subfield path (e.g., "services:2:image")
+ if (str_contains($name, ':')) {
+ return $this->setByPath($name, $value);
+ }
+
$config = $this->item->getFieldConfig($name);
if (!$config) {
@@ -442,6 +454,30 @@
return new Repeater($this, $name);
}
+ protected function setByPath(string $path, mixed $value): self
+ {
+ $parts = explode(':', $path, 3);
+ if (count($parts) !== 3) {
+ return $this;
+ }
+
+ [$repeaterName, $rowIndex, $subField] = $parts;
+ $this->repeater($repeaterName)->setField((int) $rowIndex, $subField, $value);
+
+ return $this;
+ }
+
+ protected function getByPath(string $path): mixed
+ {
+ $parts = explode(':', $path, 3);
+ if (count($parts) !== 3) {
+ return null;
+ }
+
+ [$repeaterName, $rowIndex, $subField] = $parts;
+ return $this->repeater($repeaterName)->field((int) $rowIndex, $subField);
+ }
+
// ─────────────────────────────────────────────────────────────
// Utility Methods
// ─────────────────────────────────────────────────────────────
--
Gitblit v1.10.0