Skip to content

Widgets

Widgets are content blocks placed in predefined areas like the sidebar and footer columns.

The widgets screen

Available widgets on the left, the areas they can be dropped into on the right.

Widget Areas

Falcon CMS includes these built-in widget areas:

SlugLabel
primary-sidebarPrimary Sidebar
footer-1Footer Column 1
footer-2Footer Column 2
footer-3Footer Column 3
footer-4Footer Column 4

Managing Widgets

Go to Admin → Appearance → Widgets:

  1. Choose a widget area from the tabs
  2. Click Add Widget
  3. Select the widget type
  4. Configure it (title, settings)
  5. Drag to reorder within the area

Built-in Widget Types

TypeDescription
searchSearch form
recent_postsList of latest posts
categoriesList of categories or taxonomies
custom_htmlPaste any HTML or embed code

Themes can register additional widget types in their functions.php.

Rendering Widgets in Templates

php
// Render widgets for an area
<?php render_falcon_widgets('primary-sidebar'); ?>

// In a layout with sidebar
<div class="layout">
    <main>{{ $content }}</main>
    <aside>
        <?php render_falcon_widgets('primary-sidebar'); ?>
    </aside>
</div>

// Footer
<footer>
    <div class="footer-grid">
        <div><?php render_falcon_widgets('footer-1'); ?></div>
        <div><?php render_falcon_widgets('footer-2'); ?></div>
        <div><?php render_falcon_widgets('footer-3'); ?></div>
        <div><?php render_falcon_widgets('footer-4'); ?></div>
    </div>
</footer>

Widgets with Multi-language

Each widget can have a lang_code field. Widgets only display on matching locales — use this to show different sidebar content per language.

Registering Custom Widget Types

In your theme's functions.php:

php
add_falcon_filter('falcon_available_widgets', function(array $widgets) {
    $widgets['newsletter'] = [
        'name'        => 'Newsletter Signup',
        'description' => 'Email subscription form.',
        'settings'    => ['placeholder' => 'Enter your email'],
        'view'        => 'themes.my-theme.widgets.newsletter',
    ];
    return $widgets;
});

Then create resources/views/themes/my-theme/widgets/newsletter.blade.php:

blade
<div class="widget-newsletter">
    <h3>{{ $widget->title }}</h3>
    <form>
        <input type="email" placeholder="{{ $widget->settings['placeholder'] ?? 'Your email' }}">
        <button type="submit">Subscribe</button>
    </form>
</div>

Released under the MIT License.