<?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');
|