From 9f86429a1252b45c95b7c62fbaa1b82de3723997 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 05 Jan 2026 18:16:07 +0000
Subject: [PATCH] =Complete TaxonomySelector.js and TaxonomyCreator.js refactor

---
 inc/registry/TaxonomyRegistrar.php |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/inc/registry/TaxonomyRegistrar.php b/inc/registry/TaxonomyRegistrar.php
index e31fc5a..c1bf6e2 100644
--- a/inc/registry/TaxonomyRegistrar.php
+++ b/inc/registry/TaxonomyRegistrar.php
@@ -55,12 +55,32 @@
 		$post_types = array_map(fn($type) => BASE . $type, $this->config['for_content'] ?? []);
 		register_taxonomy($this->taxonomy, $post_types, $args);
 
+		$this->maybeAddRewriteRule($args['rewrite']);
 		if (!empty($this->fields)) {
 			$meta_registry = new MetaRegistry($this->fields, $this->slug, 'term');
 			$meta_registry->registerMetaFields();
 		}
 	}
 
+	/**
+	 * Add custom rewrite rule for hierarchical taxonomy slugs (e.g., post-type/by/taxonomy-slug)
+	 */
+	protected function maybeAddRewriteRule(array $rewrite_config): void
+	{
+		$slug = $rewrite_config['slug'] ?? $this->slug;
+
+		// Only add custom rule if slug contains slashes (hierarchical path)
+		if (!str_contains($slug, '/')) {
+			return;
+		}
+
+		add_rewrite_rule(
+			"^{$slug}/([^/]+)/?$",
+			'index.php?' . $this->taxonomy . '=$matches[1]',
+			'top'
+		);
+	}
+
     private function buildLabels(string $singular, string $plural): array
     {
         return [
@@ -338,6 +358,7 @@
 				$term = get_term($term_id, $tax);
 
 				CacheManager::for(jvbNoBase($taxonomy))->invalidate();
+				CacheManager::for(jvbNoBase($taxonomy))->clear();
 
 				// Clear cache for associated content types
 				$checker = Checker::getInstance();

--
Gitblit v1.10.0