Documentation Index Fetch the complete documentation index at: https://mintlify.com/beaverbuilder/documentation/llms.txt
Use this file to discover all available pages before exploring further.
BB Theme provides numerous action hooks and filter hooks that allow you to customize and extend the theme without modifying core files.
Auto-generated documentation
Complete, up-to-date hook documentation is auto-generated from the code:
View BB Theme Hooks
For a visual layout of common theme hooks:
ProBeaver Hook Layout
Action hooks
Action hooks let you insert custom code at specific points in the theme.
Head and body
fl_head_open
Fires after the opening <head> tag.
function my_head_open () {
echo '<script>console.log("Head opened!");</script>' ;
}
add_action ( 'fl_head_open' , 'my_head_open' );
fl_head
BB Theme’s styles and custom code are loaded after wp_head to ensure they aren’t overridden by plugins. Use the fl_head action if you need to load something after BB Theme’s styles.
function my_head () {
echo '<link rel="stylesheet" href="custom.css">' ;
}
add_action ( 'fl_head' , 'my_head' );
fl_body_open
Fires after the opening <body> tag.
function my_body_open () {
echo '<div>Content right after body tag</div>' ;
}
add_action ( 'fl_body_open' , 'my_body_open' );
Page structure
fl_page_open
Fires after the opening fl-page <div> tag.
function my_page_open () {
echo '<div class="custom-banner">Special Offer!</div>' ;
}
add_action ( 'fl_page_open' , 'my_page_open' );
fl_page_close
Fires before the closing fl-page <div> tag.
function my_page_close () {
echo '<div class="custom-footer-banner">Thank you!</div>' ;
}
add_action ( 'fl_page_close' , 'my_page_close' );
Top bar hooks
fl_before_top_bar
Fires before the opening top bar <div> tag.
function my_before_top_bar () {
echo '<div class="announcement">Free shipping today!</div>' ;
}
add_action ( 'fl_before_top_bar' , 'my_before_top_bar' );
fl_after_top_bar
Fires after the closing top bar <div> tag.
function my_after_top_bar () {
echo '<div class="divider"></div>' ;
}
add_action ( 'fl_after_top_bar' , 'my_after_top_bar' );
fl_top_bar_col1_open / fl_top_bar_col1_close
Fires at the beginning and end of the first top bar column.
function my_top_bar_col1_open () {
echo '<span class="icon">📞</span>' ;
}
add_action ( 'fl_top_bar_col1_open' , 'my_top_bar_col1_open' );
fl_top_bar_col2_open / fl_top_bar_col2_close
Fires at the beginning and end of the second top bar column.
Fires before the opening header <div> tag.
function my_before_header () {
echo '<div class="promo-banner">Sale ends today!</div>' ;
}
add_action ( 'fl_before_header' , 'my_before_header' );
Fires after the closing header <div> tag.
function my_after_header () {
echo '<div class="breadcrumbs">' . get_breadcrumbs () . '</div>' ;
}
add_action ( 'fl_after_header' , 'my_after_header' );
Fires at the beginning and end of the header content section (available in Nav Bottom header layout).
function my_header_content_open () {
echo '<div class="header-notice">Special announcement</div>' ;
}
add_action ( 'fl_header_content_open' , 'my_header_content_open' );
Content hooks
fl_before_content
Fires before the opening content <div> tag.
function my_before_content () {
if ( is_front_page ()) {
echo '<div class="hero-section">Welcome!</div>' ;
}
}
add_action ( 'fl_before_content' , 'my_before_content' );
fl_content_open
Fires after the opening content <div> tag.
function my_content_open () {
echo '<!-- Content starts here -->' ;
}
add_action ( 'fl_content_open' , 'my_content_open' );
fl_content_close
Fires before the closing content <div> tag.
function my_content_close () {
echo '<!-- Content ends here -->' ;
}
add_action ( 'fl_content_close' , 'my_content_close' );
fl_after_content
Fires after the closing content <div> tag.
function my_after_content () {
echo '<div class="call-to-action">Contact us today!</div>' ;
}
add_action ( 'fl_after_content' , 'my_after_content' );
Post hooks
fl_post_top_meta_open / fl_post_top_meta_close
Fires at the beginning and end of the top post meta section.
function my_post_top_meta_open () {
echo '<span class="reading-time">5 min read</span>' ;
}
add_action ( 'fl_post_top_meta_open' , 'my_post_top_meta_open' );
fl_post_bottom_meta_open / fl_post_bottom_meta_close
Fires at the beginning and end of the bottom post meta section.
function my_post_bottom_meta_close () {
echo '<div class="share-buttons">' . get_share_buttons () . '</div>' ;
}
add_action ( 'fl_post_bottom_meta_close' , 'my_post_bottom_meta_close' );
Fires after the opening fl-sidebar <div> tag.
function my_sidebar_open () {
echo '<div class="sidebar-header">Quick Links</div>' ;
}
add_action ( 'fl_sidebar_open' , 'my_sidebar_open' );
Fires before the closing fl-sidebar <div> tag.
function my_sidebar_close () {
echo '<div class="sidebar-footer">Need help?</div>' ;
}
add_action ( 'fl_sidebar_close' , 'my_sidebar_close' );
Fires after the opening footer wrap <div> tag.
function my_footer_wrap_open () {
echo '<!-- Footer section starts -->' ;
}
add_action ( 'fl_footer_wrap_open' , 'my_footer_wrap_open' );
Fires before the opening footer widgets <div> tag.
function my_before_footer_widgets () {
echo '<div class="newsletter-signup">' . get_newsletter_form () . '</div>' ;
}
add_action ( 'fl_before_footer_widgets' , 'my_before_footer_widgets' );
Fires after the closing footer widgets <div> tag.
Fires before the opening footer <div> tag.
function my_before_footer () {
echo '<div class="pre-footer">Trust badges</div>' ;
}
add_action ( 'fl_before_footer' , 'my_before_footer' );
Fires after the closing footer <div> tag.
function my_after_footer () {
echo '<div class="bottom-bar">Additional links</div>' ;
}
add_action ( 'fl_after_footer' , 'my_after_footer' );
Fires at the beginning and end of the first footer column.
function my_footer_col1_open () {
echo '<div class="footer-logo"><img src="logo.png"></div>' ;
}
add_action ( 'fl_footer_col1_open' , 'my_footer_col1_open' );
Fires at the beginning and end of the second footer column.
Fires before the closing footer wrap <div> tag.
function my_footer_wrap_close () {
echo '<!-- Footer section ends -->' ;
}
add_action ( 'fl_footer_wrap_close' , 'my_footer_wrap_close' );
Fires after the opening fl-comments <div> tag.
function my_comments_open () {
echo '<p>Join the conversation!</p>' ;
}
add_action ( 'fl_comments_open' , 'my_comments_open' );
Fires before the closing fl-comments <div> tag.
Body close
fl_body_close
Fires before the closing </body> tag.
function my_body_close () {
echo '<script>// Analytics code</script>' ;
}
add_action ( 'fl_body_close' , 'my_body_close' );
Filter hooks
Filter hooks let you modify theme data and functionality.
fl_font_subset
Add subsets to a Google font chosen in the Customizer.
function my_font_subset ( $subset , $font ) {
if ( $font == 'Acme' ) {
$subset = '&subset=latin,latin-ext' ;
}
return $subset ;
}
add_filter ( 'fl_font_subset' , 'my_font_subset' , 10 , 2 );
fl_topbar_enabled
Override the display of the theme’s top bar. Return false to hide it, true to show it.
function my_topbar_enabled ( $enabled ) {
if ( is_page ( 'landing' )) {
return false ; // Hide top bar on landing page
}
return $enabled ;
}
add_filter ( 'fl_topbar_enabled' , 'my_topbar_enabled' );
Override the display of the theme’s fixed header.
function my_fixed_header_enabled ( $enabled ) {
if ( is_front_page ()) {
return false ; // Disable fixed header on home page
}
return $enabled ;
}
add_filter ( 'fl_fixed_header_enabled' , 'my_fixed_header_enabled' );
Override the display of the theme’s header.
function my_header_enabled ( $enabled ) {
if ( is_page ( 'splash' )) {
return false ; // Hide header on splash page
}
return $enabled ;
}
add_filter ( 'fl_header_enabled' , 'my_header_enabled' );
fl_nav_toggle_text
Change the text or icon shown in the mobile nav toggle button.
function my_nav_toggle_text ( $text ) {
return 'Main Menu' ;
}
add_filter ( 'fl_nav_toggle_text' , 'my_nav_toggle_text' );
Override the display of the theme’s footer.
function my_footer_enabled ( $enabled ) {
if ( is_page ( 'checkout' )) {
return false ; // Hide footer on checkout page
}
return $enabled ;
}
add_filter ( 'fl_footer_enabled' , 'my_footer_enabled' );
fl_social_icons
Change the order of the social icons. The $icons parameter is an array of keys for each icon.
function my_social_icons ( $icons ) {
$icons = array (
'facebook' ,
'twitter' ,
'instagram' ,
'linkedin' ,
'youtube' ,
'pinterest' ,
);
return $icons ;
}
add_filter ( 'fl_social_icons' , 'my_social_icons' );
Common use cases
Add Google Analytics
Add tracking code to the head:
function my_google_analytics () {
?>
<!-- Global site tag ( gtag . js ) - Google Analytics -->
< script async src = "https://www.googletagmanager.com/gtag/js?id=UA-XXXXX-Y" ></ script >
< script >
window . dataLayer = window . dataLayer || [];
function gtag (){ dataLayer . push ( arguments );}
gtag ( 'js' , new Date ());
gtag ( 'config' , 'UA-XXXXX-Y' );
</ script >
<? php
}
add_action ( 'fl_head' , 'my_google_analytics' );
Add custom copyright text
Add dynamic copyright to footer:
function my_footer_copyright () {
echo '<p>© ' . date ( 'Y' ) . ' ' . get_bloginfo ( 'name' ) . '. All rights reserved.</p>' ;
}
add_action ( 'fl_footer_col1_open' , 'my_footer_copyright' );
Add breadcrumbs
Insert breadcrumbs after header:
function my_breadcrumbs () {
if ( function_exists ( 'yoast_breadcrumb' )) {
yoast_breadcrumb ( '<div class="breadcrumbs">' , '</div>' );
}
}
add_action ( 'fl_after_header' , 'my_breadcrumbs' );
Hide header on specific pages:
function my_conditional_header ( $enabled ) {
// Hide header on page IDs 5, 10, and 15
if ( is_page ( array ( 5 , 10 , 15 ))) {
return false ;
}
return $enabled ;
}
add_filter ( 'fl_header_enabled' , 'my_conditional_header' );
Register and display custom widget area:
// Register widget area
function my_register_widget_area () {
register_sidebar ( array (
'name' => 'After Header' ,
'id' => 'after-header' ,
'before_widget' => '<div class="widget">' ,
'after_widget' => '</div>' ,
));
}
add_action ( 'widgets_init' , 'my_register_widget_area' );
// Display widget area
function my_display_widget_area () {
if ( is_active_sidebar ( 'after-header' )) {
dynamic_sidebar ( 'after-header' );
}
}
add_action ( 'fl_after_header' , 'my_display_widget_area' );
Best practices
Use child theme
Always add hooks in your child theme’s functions.php, never in the parent theme.
Check conditions
Use conditional tags to control when hooks fire:
function my_hook_function () {
if ( is_front_page ()) {
// Code for home page only
}
if ( is_singular ( 'post' )) {
// Code for single posts only
}
}
Priority and arguments
Understand hook priority and number of arguments:
// Higher priority (runs later)
add_action ( 'fl_before_header' , 'my_function' , 20 );
// Accept 2 arguments
add_filter ( 'fl_font_subset' , 'my_function' , 10 , 2 );
Clean code
Use proper indentation
Add comments explaining your code
Use meaningful function names
Follow WordPress coding standards
Debugging hooks
Check if hook exists
if ( has_action ( 'fl_before_header' )) {
echo 'Hook exists!' ;
}
See all hooked functions
global $wp_filter ;
print_r ( $wp_filter [ 'fl_before_header' ]);
Remove a hooked function
remove_action ( 'fl_before_header' , 'function_name' );
Child themes Learn about creating and using child themes
Developer resources All BB Theme developer documentation
WordPress Plugin API Official WordPress hooks documentation
Auto-generated hooks Complete, up-to-date hook reference