'lcp-blocks', 'title' => __('LCP Blocks', 'lcp'), 'icon' => 'chart-bar', ), ) ); } add_filter('block_categories_all', 'lcp_block_categories', 10, 1); // Register the Data Collection Custom Post Type function lcp_register_data_collection_post_type() { $labels = array( 'name' => _x('Data Collections', 'Post type general name', 'lcp-data'), 'singular_name' => _x('Data Collection', 'Post type singular name', 'lcp-data'), 'menu_name' => _x('Data Collections', 'Admin Menu text', 'lcp-data'), 'name_admin_bar' => _x('Data Collection', 'Add New on Toolbar', 'lcp-data'), 'add_new' => __('Add New', 'lcp-data'), 'add_new_item' => __('Add New Data Collection', 'lcp-data'), 'new_item' => __('New Data Collection', 'lcp-data'), 'edit_item' => __('Edit Data Collection', 'lcp-data'), 'view_item' => __('View Data Collection', 'lcp-data'), 'all_items' => __('All Data Collections', 'lcp-data'), 'search_items' => __('Search Data Collections', 'lcp-data'), 'parent_item_colon' => __('Parent Data Collections:', 'lcp-data'), 'not_found' => __('No data collections found.', 'lcp-data'), 'not_found_in_trash' => __('No data collections found in Trash.', 'lcp-data'), 'featured_image' => _x('Data Collection Cover Image', 'Overrides the "Featured Image" phrase', 'lcp-data'), 'set_featured_image' => _x('Set cover image', 'Overrides the "Set featured image" phrase', 'lcp-data'), 'remove_featured_image'=> _x('Remove cover image', 'Overrides the "Remove featured image" phrase', 'lcp-data'), 'use_featured_image' => _x('Use as cover image', 'Overrides the "Use as featured image" phrase', 'lcp-data'), 'archives' => _x('Data Collection archives', 'The post type archive label used in nav menus', 'lcp-data'), 'insert_into_item' => _x('Insert into data collection', 'Overrides the "Insert into post" phrase', 'lcp-data'), 'uploaded_to_this_item'=> _x('Uploaded to this data collection', 'Overrides the "Uploaded to this post" phrase', 'lcp-data'), 'filter_items_list' => _x('Filter data collections list', 'Screen reader text for the filter links', 'lcp-data'), 'items_list_navigation'=> _x('Data Collections list navigation', 'Screen reader text for the pagination', 'lcp-data'), 'items_list' => _x('Data Collections list', 'Screen reader text for the items list', 'lcp-data'), ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array('slug' => 'data-collection'), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => null, 'menu_icon' => 'dashicons-chart-area', 'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields'), 'show_in_rest' => true, // Enable Gutenberg editor ); register_post_type('lcp-data-collection', $args); } add_action('init', 'lcp_register_data_collection_post_type'); // Register meta field for datasets function lcp_register_meta_fields() { register_post_meta('lcp-data-collection', 'lcp_datasets', array( 'show_in_rest' => true, 'single' => true, 'type' => 'array', 'auth_callback' => function() { return current_user_can('edit_posts'); }, 'sanitize_callback' => function($meta_value) { if (!is_array($meta_value)) { return array(); } $sanitized = array(); foreach ($meta_value as $key => $dataset) { $sanitized[$key] = array( 'dataset_name' => sanitize_text_field($dataset['dataset_name']), 'dataset_source' => sanitize_text_field($dataset['dataset_source']), 'dataset_json' => json_decode(wp_unslash($dataset['dataset_json']), true) ); } return $sanitized; } )); } add_action('init', 'lcp_register_meta_fields'); // Add meta box for datasets function lcp_add_datasets_meta_box() { add_meta_box( 'lcp_datasets_meta_box', 'Datasets', 'lcp_render_datasets_meta_box', 'lcp-data-collection', 'normal', 'high' ); } add_action('add_meta_boxes', 'lcp_add_datasets_meta_box'); // Render the meta box function lcp_render_datasets_meta_box($post) { // Get existing datasets $datasets = get_post_meta($post->ID, 'lcp_datasets', true); // Ensure it's an array if (!is_array($datasets)) { $datasets = array(); } // Convert PHP array to JSON for the React component $datasets_json = json_encode($datasets); // Add nonce for verification wp_nonce_field('lcp_datasets_meta_box', 'lcp_datasets_meta_box_nonce'); // Add hidden input for data ?>
post_type == 'lcp-data-collection') { // Enqueue React and dependencies wp_enqueue_script('wp-element'); wp_enqueue_script('wp-components'); wp_enqueue_script('wp-data'); // Enqueue our custom scripts wp_enqueue_script( 'lcp-form-repeater', plugins_url('build/index.js', __FILE__), array('wp-element', 'wp-components', 'wp-data'), filemtime(plugin_dir_path(__FILE__) . 'build/index.js'), true ); // Pass data to JavaScript wp_localize_script('lcp-form-repeater', 'lcpDataSettings', array( 'root' => esc_url_raw(rest_url()), 'nonce' => wp_create_nonce('wp_rest'), 'postId' => $post->ID )); } } } add_action('admin_enqueue_scripts', 'lcp_enqueue_admin_scripts'); // Flush rewrite rules on plugin activation function lcp_data_activate() { lcp_register_data_collection_post_type(); flush_rewrite_rules(); } register_activation_hook(__FILE__, 'lcp_data_activate'); // Flush rewrite rules on plugin deactivation function lcp_data_deactivate() { flush_rewrite_rules(); } register_deactivation_hook(__FILE__, 'lcp_data_deactivate');