| | |
| | | $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 [ |
| | |
| | | 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(); |
| | | CacheManager::for(jvbNoBase($taxonomy))->clear(); |
| | | |
| | | // 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); |