Jake Vanderwerf
2026-01-01 de699440ff94e9c0d8e8b5201ee93179c085bf60
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 [
@@ -336,19 +356,15 @@
            if ($tax !== $taxonomy) return;
            $term = get_term($term_id, $tax);
            jvbUpdateCacheTimestamp('term', $term);
            // Clear taxonomy cache
            CacheManager::invalidateGroup($taxonomy);
            CacheManager::invalidateGroup('terms');
            CacheManager::invalidateGroup('termCheck');
            CacheManager::for(jvbNoBase($taxonomy))->invalidate();
            // Clear cache for associated content types
            $checker = Checker::getInstance();
            $content_types = $checker->getContentForTaxonomy($taxonomy);
            foreach ($content_types as $content_type) {
               CacheManager::invalidateGroup($content_type);
               CacheManager::for($content_type)->invalidate();
            }
            do_action("jvb_taxonomy_cache_invalidated_{$taxonomy}", $term, $action);