'jvbRenderFeedBlock' // ] // ); // } if (Features::anyContentHas('show_directory') || Features::anyTaxonomyHas('show_directory')) { register_block_type( JVB_DIR . '/build/list', [ 'render_callback' => 'jvbRenderListBlock' ] ); } } add_action('init', 'jvbRegisterBlocks'); function jvbRegisterBlockCategory(array $categories):array { return array_merge($categories, [ [ 'slug' => 'jvb', 'title' => get_bloginfo('name'), 'icon' => 'art' ] ]); } add_filter('block_categories_all', 'jvbRegisterBlockCategory'); //Get our loaded types function jvbRegisterFeedTypes():void { global $jvb_feed; global $jvb_taxonomy_for; wp_localize_script('jvb-feed-block-editor', 'jvbBlockSettings', [ 'contentTypes' => $jvb_feed, 'taxonomyFor' => $jvb_taxonomy_for ]); // Filter for block.json add_filter('block_type_metadata', function ($metadata) use ($jvb_feed) { if ($metadata['name'] === 'jvb/feed') { $metadata['attributes']['contentTypes']['items']['enum'] = array_keys($jvb_feed); } return $metadata; }); } add_action('wp_loaded', 'jvbRegisterFeedTypes'); if (jvbSiteUsesFeedBlock()) { add_action('rest_api_init', 'jvbGetFeedTypes'); function jvbGetFeedTypes():void { register_rest_route( 'jvb/v1', 'types', [ 'permission_callback' => function () { return is_user_logged_in(); }, 'callback' => function () { global $jvb_feed; return new WP_REST_Response(json_encode((object) $jvb_feed)); } ] ); } } /** * Enqueue block editor assets */ function jvbEnqueueBlockEditorAssets():void { // Only localize for block editor if (!is_admin()) { return; } // Localize list types for the block wp_localize_script( 'jvb-list-editor-script', // This should match your editor script handle 'jvbListTypes', jvbGlobalDirectoryInfo() ); } add_action('enqueue_block_editor_assets', 'jvbEnqueueBlockEditorAssets');