fieldRegistry = FieldRegistry::getInstance(); // Hook registration at different priorities for proper sequencing add_action('init', [$this, 'registerAll'], 5); // add_action('init', [$this, 'registerMetaFields'], 10); // add_action('rest_api_init', [$this, 'registerRestRoutes'], 10); } /** * Handle plugin activation */ public function onActivation(): void { // Initialize field registry early $this->fieldRegistry->initializeFields(); // Register post types and taxonomies immediately for activation $this->registerPostTypes(); $this->registerTaxonomies(); $this->registerUserRoles(); // Flush rewrite rules after registration flush_rewrite_rules(); } /** * Register all content types */ public function registerAll(): void { // if ($this->initialized) { // return; // } $this->registerPostTypes(); $this->registerTaxonomies(); // $this->initialized = true; } /** * Register meta fields for all types */ public function registerMetaFields(): void { if ($this->initialized) { return; } // Register post type fields foreach (JVB_CONTENT as $slug => $config) { if (!empty($config['fields'])) { $fields = $this->fieldRegistry->getFields($slug, 'post'); $this->registerFieldsForType(BASE . $slug, $fields, 'post'); } } // Register taxonomy fields foreach (JVB_TAXONOMY as $slug => $config) { if (!empty($config['fields'])) { $fields = $this->fieldRegistry->getFields($slug, 'term'); $this->registerFieldsForType(BASE . $slug, $fields, 'term'); } } // Register user fields foreach (JVB_USER as $slug => $config) { if (!empty($config['settings']) || !empty($config['admin'])) { $fields = $this->fieldRegistry->getFields($slug, 'user'); $this->registerFieldsForType(BASE . $slug, $fields, 'user'); } } $this->intialized = true; } /** * Register fields for a specific type */ private function registerFieldsForType(string $type, array $fields, string $object_type): void { if (empty($fields)) { return; } $meta_registry = new Registry($fields, $type, $object_type); $meta_registry->registerMetaFields(); } /** * Register post types */ private function registerPostTypes(): void { foreach (JVB_CONTENT as $slug => $config) { $registrar = new PostTypeRegistrar($slug, $config); $registrar->register(); // Set up calendar functionality if needed if ($config['is_calendar'] ?? false) { new MakeCalendarType($slug, $config['rewrite']['slug']??$slug); } } } /** * Register taxonomies */ private function registerTaxonomies(): void { foreach (JVB_TAXONOMY as $slug => $config) { $registrar = new TaxonomyRegistrar($slug, $config); $registrar->register(); } } /** * Register user roles */ public function registerUserRoles(): void { $registrar = new RoleManager(); error_log('Registering User Roles'); $registrar->activate(); } /** * Register options */ private function registerOptions(): void { if (empty(JVB_OPTIONS)) { return; } $fields = $this->fieldRegistry->getFields('options', 'options'); if (!empty($fields)) { new OptionsRegistry($fields); } } } new ContentRegistry();