Jake Vanderwerf
2025-09-30 2cb91676044ecd0abd9c45b4835abb8b0d042312
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
 
use JVBase\utility\Features;
 
if (!defined('ABSPATH')) {
    exit;
}
//Blocks
if (jvbSiteUsesFeedBlock()) {
    require(JVB_DIR . '/build/feed/render.php');
}
require(JVB_DIR . '/build/list/render.php');
require(JVB_DIR . '/build/summary/render.php');
require(JVB_DIR . '/build/forms/render.php');
 
function jvbRegisterBlocks():void
{
//    if (jvbSiteUsesFeedBlock()) {
//        register_block_type(
//            JVB_DIR . '/build/feed',
//            [
//                'render_callback'   => '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');