This plugin displays Dust's complete data including camps, art, schedule, and music from regional Burning Man events or from Burning Man itself. It fetches data from all four Dust API endpoints and renders it on your WordPress site with options for layout, styling, and interactivity.
Many thanks to Dust's creator Damian for creating and supporting the app, and for providing the API this plugin depends on.
- Go to the Settings for this plugin, and enter the short name for your event. This is the same short event name you see in your Dust admin panel: "https://edit.dust.events/**myBurn**";
- Use any of the following shortcodes on your WordPress pages:
[dust_camps layout="grid" show_coordinates="false" show_images="true"] [dust_art layout="grid" show_images="true"] [dust_schedule layout="list"] [dust_schedule display="tabs" layout="grid" show_export_buttons="all" ] [dust_schedule layout="list" show_export_buttons="csv,ics"] [dust_schedule layout="grid" show_export_buttons="csv"] [dust_music layout="list"]
Shows camp information with names, descriptions, images, and coordinates.
Parameters: event_name, layout, show_coordinates, show_images, per_page
Shows art installations and mutant vehicles with artist information.
Parameters: event_name, layout, show_coordinates, show_images, per_page
Shows scheduled events sorted by camp, then by title.
Parameters: event_name, layout, show_images, per_page, show_export_buttons, display
Export Buttons: The show_export_buttons parameter accepts:
"all"or"true": Show all export buttons (ICS or CSV)"none"or"false": Show no export buttons"csv","ics": Show specific export button- Comma-separated list:
"csv,ics"
Examples:
[dust_schedule show_export_buttons="all"]
[dust_schedule show_export_buttons="csv,ics"]
[dust_schedule show_export_buttons="csv"]
[dust_schedule show_export_buttons="none"]
Tabbed Display: Use display="tabs" to show events organized by day with an "Every Day" tab for recurring events. Each day tab includes both daily recurring events and day-specific events.
Accessibility: The tabbed interface meets WCAG AA standards with proper ARIA attributes, keyboard navigation (arrow keys, Home/End), and focus management.
Shows music events and parties sorted by camp, then by title.
Parameters: event_name, layout, show_images, per_page
Displays a button to export schedule data as an ICS calendar file.
Parameters:
text: Custom button text (default: "📅 Export to Calendar")event_name: Specific event name (optional)
Examples:
[dust_schedule_ics_button]
[dust_schedule_ics_button text="Download Schedule"]
[dust_schedule_ics_button text="Get Calendar" event_name="myburn2024"]
Displays a button to export schedule data as a CSV file.
Parameters:
text: Custom button text (default: "📊 Export to CSV")event_name: Specific event name (optional)
Examples:
[dust_schedule_csv_button]
[dust_schedule_csv_button text="Download CSV"]
[dust_schedule_csv_button text="Get Spreadsheet" event_name="myburn2024"]
event_name: Your burn's unique name from Dustlayout:"grid"or"list"(default: grid)show_coordinates:"true"or"false"(default: true) - For camps/art onlyshow_images:"true"or"false"(default: true)per_page: Number of items to show,-1for all (default: -1)show_export_buttons:"csv","ics","all","none", or comma-separated list (default: false) - For schedule onlydisplay:"all"or"tabs"(default: all) - For schedule only
Grid Layout
- Responsive card-based layout
- Images displayed above content
- Good for browsing multiple camps
List Layout
- Horizontal layout with image on left
- More detailed view
- Better for detailed information
:root {
--dust-camp-primary-color: #007cba;
--dust-camp-border-color: #ddd;
--dust-camp-background: #fff;
--dust-camp-hover-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}Camps:
.dust-camps-container: Main container.dust-camps-item: Individual camp card.dust-camps-image: Image container.dust-camps-content: Content area.dust-camps-name: Camp name.dust-camps-description: Description text.dust-camps-coordinates: Coordinates display
Art:
.dust-art-container: Main container.dust-art-item: Individual art card.dust-art-image: Image container.dust-art-content: Content area.dust-art-name: Art name.dust-art-artist: Artist name.dust-art-description: Description text
Schedule:
.dust-schedule-container: Main container.dust-schedule-item: Individual event card.dust-schedule-content: Content area.dust-schedule-title: Event title.dust-schedule-camp: Camp name.dust-schedule-time: Event time.dust-schedule-description: Event description
Schedule Tabs:
.dust-schedule-tabs-container: Tabbed schedule container.dust-schedule-display-toggle: Toggle buttons container.dust-schedule-toggle-btn: Toggle button (tabs/all).dust-schedule-tab-nav: Tab navigation container.dust-schedule-tab-btn: Individual tab button.dust-schedule-tab-content: Tab content container.dust-schedule-tab-pane: Individual tab pane.dust-schedule-all-events: All events view container
Music:
.dust-music-container: Main container.dust-music-item: Individual music event card.dust-music-content: Content area.dust-music-title: Event title.dust-music-camp: Camp name.dust-music-who: Artist/DJ name.dust-music-time: Event time
// Refresh data for any type
LunaCode.DisplayDustData.refreshData("camps", "event-name");
LunaCode.DisplayDustData.refreshData("art", "event-name");
LunaCode.DisplayDustData.refreshData("schedule", "event-name");
LunaCode.DisplayDustData.refreshData("music", "event-name");
// Get specific item data
var item = LunaCode.DisplayDustData.getItemByUid("u-123", "camps");
// Highlight an item
LunaCode.DisplayDustData.highlightItem("u-123", "camps");
// Filter items
LunaCode.DisplayDustData.filterItems("search-term", "camps");
// Schedule tabs functionality
LunaCode.DisplayDustData.toggleScheduleDisplay("container-id", "tabs"); // or "all"
LunaCode.DisplayDustData.switchScheduleTab("container-id", "friday");
// Global convenience functions
dustToggleScheduleDisplay("container-id", "tabs");
dustSwitchScheduleTab("container-id", "everyday");// Listen for item clicks
$(document).on("dustItemClicked", function (event, data) {
console.log("Item clicked:", data.name || data.title, data.uid, data.type);
});// Get any type of data
$camps = dust_get_data('camps', 'your-event-name');
$art = dust_get_data('art', 'your-event-name');
$schedule = dust_get_data('schedule', 'your-event-name');
$music = dust_get_data('music', 'your-event-name');
// Parse coordinates (camps/art)
$pin_data = json_decode($item['pin'], true);
if (isset($pin_data['lat'], $pin_data['lng'])) {
$latitude = $pin_data['lat'];
$longitude = $pin_data['lng'];
}
// Handle different image formats
// Camps: $item['imageUrl'] (needs base URL prefix)
// Art: $item['images'][0]['thumbnail_url'] (complete URL)
// Schedule: $item['imageUrl'] (needs base URL prefix)The plugin automatically caches API responses for 1 hour using WordPress transients:
// Cache key format for each endpoint
$cache_key = 'dust_' . $type . '_' . md5($event_name);
// Examples: dust_camps_abc123, dust_art_abc123, dust_schedule_abc123, dust_music_abc123- Lazy loading support included
- Broken image handling with placeholder
- Responsive image sizing
- Configure event name in plugin settings
- Or pass event_name parameter to shortcode
- Check that your event name is correct
- Verify the API endpoint is accessible
- Ensure the endpoint exists (some events may not have all four data types)
- Camps/Schedule: Check that imageUrl field is present and add base URL
- Art: Check that images array exists and contains thumbnail_url
- Verify image URLs are accessible
- Only applies to camps and art
- Check that pin field contains valid JSON
- Verify coordinate format (lat/lng or x/y)
- Data is sorted by camp name, then by title
- Check that camp/hosted_by_camp fields are present
Add filters for any data type:
// In your theme or plugin
function custom_data_processing($data, $type) {
// Add custom fields or modify existing data
if ($type === 'camps') {
// Custom camp processing
} elseif ($type === 'schedule') {
// Custom schedule processing
}
return $data;
}
add_filter('dust_events_process_data', 'custom_data_processing', 10, 2);Create custom display templates by overriding the render functions or creating your own shortcodes for specific data types.
// Display any data type programmatically
dust_display_data('camps', 'your-event', array('layout' => 'grid'));
dust_display_data('art', 'your-event', array('show_images' => 'true'));
dust_display_data('schedule', 'your-event', array('layout' => 'list'));
dust_display_data('music', 'your-event', array('per_page' => 10));
// Export buttons
echo dust_schedule_ics_button();
echo dust_schedule_ics_button('Custom Text');
echo dust_schedule_ics_button('Download Events', 'myburn2024');
echo dust_schedule_csv_button();
echo dust_schedule_csv_button('Download CSV', 'myburn2024');- API responses are sanitized using WordPress functions
- User input is escaped and validated
- AJAX requests use nonces for security
- Remote API calls have timeout limits
The plugin meets WCAG AA accessibility standards:
- Tabbed Interface: Proper ARIA roles (
tablist,tab,tabpanel), states (aria-selected), and relationships (aria-labelledby,aria-controls) - Keyboard Navigation: Full keyboard support with arrow keys, Home/End, Enter/Space
- Focus Management: Focus moves to tab content when switching tabs, preventing users from getting lost
- Screen Reader Support: Proper labeling and announcements for all interactive elements
- Visual Focus Indicators: Clear focus outlines that meet contrast requirements
- Modern browsers (Chrome, Firefox, Safari, Edge)
- IE11+ for basic functionality
- Progressive enhancement for advanced features
This implementation is provided as-is for integration with the Dust API. Follow WordPress coding standards and GPL licensing if distributing.
For issues with the Dust API itself, contact the Dust team. For WordPress implementation questions, refer to WordPress documentation and community resources.
- Camps & Art: Sorted alphabetically by name
- Schedule & Music: Sorted by camp name (using
camporhosted_by_campfields), then by title - Schedule Tabs: Within each tab, events are sorted by:
- All-day events first
- Start time (earliest first)
- Event title (alphabetical)
https://data.dust.events/[event-name]/camps.jsonhttps://data.dust.events/[event-name]/art.jsonhttps://data.dust.events/[event-name]/schedule.jsonhttps://data.dust.events/[event-name]/music.json