{"id":381806,"date":"2026-10-20T14:32:20","date_gmt":"2026-10-20T14:32:20","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/headfoot-header-footer-builder-for-elementor\/"},"modified":"2026-10-20T14:31:50","modified_gmt":"2026-10-20T14:31:50","slug":"headfoot","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/headfoot\/","author":18837462,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"HeadFoot - Header & Footer Builder for Elementor","header_author":"migaweb","header_description":"Build a header and a footer with the free version of Elementor and choose where they show.","assets_banners_color":"","last_updated":"2026-10-20 14:31:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/migaweb.de","rating":0,"author_block_rating":0,"active_installs":0,"downloads":40,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"migaweb","date":"2026-10-20 14:31:50","revision":3756921}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The template list under Appearance, Header &amp; Footer.","2":"The meta box with the type, the display rules, and the user roles.","3":"The display conditions inside the Elementor panel.","4":"The tab Settings with the theme integration mode."}},"plugin_section":[],"plugin_tags":[76538,2640,147240,1431,147242],"plugin_category":[],"plugin_contributors":[207306],"plugin_business_model":[],"class_list":["post-381806","plugin","type-plugin","status-publish","hentry","plugin_tags-elementor","plugin_tags-footer","plugin_tags-footer-builder","plugin_tags-header","plugin_tags-header-builder","plugin_contributors-migaweb","plugin_committers-migaweb"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/headfoot.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>HeadFoot adds a header and footer builder to the free version of Elementor. You build a header or a footer as a normal Elementor template. You then tell the plugin where to show it: on the whole site, on all pages, on one page, on an archive, or for one user role.<\/p>\n\n<p>The plugin does not add widgets and it does not need Elementor Pro. You work with the widgets that free Elementor ships.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Four template types under Appearance, Header &amp; Footer: Header, Below Header, Above Footer, and Footer.<\/li>\n<li>Full Elementor editor support with a preview that shows only the template.<\/li>\n<li>Display rules: entire website, singulars, archives, front page, blog page, 404 page, search page, date archive, author archive, every public post type, every public taxonomy, and specific pages, posts, or terms.<\/li>\n<li>Exclusion rules that always win over display rules.<\/li>\n<li>A user role rule: all, logged in, logged out, or any role.<\/li>\n<li>The rules in the meta box and in the Elementor panel. Both write the same values.<\/li>\n<li>Automatic output in the active theme. Astra, GeneratePress, OceanWP, and Hello Elementor get a dedicated integration. Block themes get their header and footer template parts replaced. Every other classic theme gets a generic fallback.<\/li>\n<li>Output on Elementor Canvas pages as a per template choice.<\/li>\n<li>The shortcode <code>[headfoot_template id=\"123\"]<\/code> and PHP functions to render a template anywhere.<\/li>\n<li>A configuration page with the theme integration mode.<\/li>\n<li>A switch that shows the font families of the WordPress font library in the Elementor font picker.<\/li>\n<\/ul>\n\n<h4>Theme integration<\/h4>\n\n<p>The plugin picks the integration method for the active theme in this order:<\/p>\n\n<ol>\n<li>The theme declares <code>add_theme_support( 'headfoot' )<\/code> or <code>add_theme_support( 'header-footer-elementor' )<\/code>. The theme then calls <code>headfoot_render_header()<\/code> and <code>headfoot_render_footer()<\/code> itself. These functions print the Below Header and Above Footer templates too.<\/li>\n<li>The theme is Astra, GeneratePress, OceanWP, or Hello Elementor. The plugin swaps the theme header and footer on the theme hooks. Astra, GeneratePress, and OceanWP print the Below Header and Above Footer templates on their hooks after the theme header and before the theme footer.<\/li>\n<li>The theme is a block theme. The plugin replaces the template parts with the slugs <code>header<\/code> and <code>footer<\/code>. The Below Header and Above Footer templates print next to the template parts.<\/li>\n<li>Every other classic theme. The plugin replaces <code>header.php<\/code> and <code>footer.php<\/code> with a generic fallback.<\/li>\n<\/ol>\n\n<p>You can force a method on the tab Settings under Appearance, Header &amp; Footer.<\/p>\n\n<h4>Limits<\/h4>\n\n<p>The generic fallback skips <code>header.php<\/code> and <code>footer.php<\/code> of the theme. If the theme opens wrapper elements in <code>header.php<\/code> and closes them in <code>footer.php<\/code>, the theme CSS that targets those wrappers stops working on the page content. If this happens, select the mode Theme support and call the plugin functions in the theme.<\/p>\n\n<p>A Below Header or Above Footer template needs a place after the theme header or before the theme footer. Astra, GeneratePress, OceanWP, and block themes have one. In the generic fallback, in Hello Elementor, and in the mode Theme support, the template shows only together with a Header or Footer template of the plugin. A theme in the mode Theme support can call <code>headfoot_render_below_header()<\/code> and <code>headfoot_render_above_footer()<\/code> at the places it wants.<\/p>\n\n<p>In a shortcode and in a block theme, the plugin escapes the template markup with <code>wp_kses()<\/code>. The plugin removes each <code>script<\/code> element and each event handler attribute, so the JavaScript of an HTML widget does not run there. The CSS of a <code>style<\/code> element goes to <code>wp_add_inline_style()<\/code>, and WordPress prints it with the other styles. The filter <code>headfoot_kses_allowed_html<\/code> changes the list of permitted elements and attributes.<\/p>\n\n<p>The user role rule does not work with full page caching. A cached page for a logged out visitor serves the logged out header to everyone.<\/p>\n\n<p>If Elementor Pro renders a theme builder template for the same location, the plugin yields to Elementor Pro. If Elementor Header &amp; Footer Builder (Ultimate Addons for Elementor) is active, the plugin renders nothing, so the site never gets two headers.<\/p>\n\n<h4>Functions and hooks<\/h4>\n\n<p>Functions: <code>headfoot_get_template_id( $type )<\/code>, <code>headfoot_header_enabled()<\/code>, <code>headfoot_footer_enabled()<\/code>, <code>headfoot_below_header_enabled()<\/code>, <code>headfoot_above_footer_enabled()<\/code>, <code>headfoot_render_header()<\/code>, <code>headfoot_render_footer()<\/code>, <code>headfoot_render_below_header()<\/code>, <code>headfoot_render_above_footer()<\/code>, <code>headfoot_get_header_html()<\/code>, <code>headfoot_get_footer_html()<\/code>, <code>headfoot_get_below_header_html()<\/code>, <code>headfoot_get_above_footer_html()<\/code>, <code>headfoot_get_template_html( $id )<\/code>.<\/p>\n\n<p>The type for <code>headfoot_get_template_id()<\/code> is <code>header<\/code>, <code>below_header<\/code>, <code>above_footer<\/code>, or <code>footer<\/code>. The functions <code>headfoot_render_header()<\/code> and <code>headfoot_get_header_html()<\/code> include the Below Header template after the header. The functions <code>headfoot_render_footer()<\/code> and <code>headfoot_get_footer_html()<\/code> include the Above Footer template before the footer.<\/p>\n\n<p>Filters: <code>headfoot_template_id<\/code>, <code>headfoot_rules<\/code>, <code>headfoot_rule_match<\/code>, <code>headfoot_header_wrapper<\/code>, <code>headfoot_below_header_wrapper<\/code>, <code>headfoot_above_footer_wrapper<\/code>, <code>headfoot_footer_wrapper<\/code>, <code>headfoot_kses_allowed_html<\/code>, <code>headfoot_theme_mode<\/code>, <code>headfoot_block_template_part_slugs<\/code>.<\/p>\n\n<p>Actions: <code>headfoot_before_header<\/code>, <code>headfoot_after_header<\/code>, <code>headfoot_before_below_header<\/code>, <code>headfoot_after_below_header<\/code>, <code>headfoot_before_above_footer<\/code>, <code>headfoot_after_above_footer<\/code>, <code>headfoot_before_footer<\/code>, <code>headfoot_after_footer<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate Elementor.<\/li>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install the plugin from the Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open Appearance, Header &amp; Footer, and click Add New.<\/li>\n<li>Enter a title, select the type Header, and add the display rule Entire Website.<\/li>\n<li>Save the template, then click Edit with Elementor and build the header.<\/li>\n<li>Publish the template in Elementor. Repeat the steps with the type Footer for a footer.<\/li>\n<\/ol>\n\n<h4>WordPress font library<\/h4>\n\n<p>WordPress 6.5 and newer has a font library. Turn on Enable WordPress Font Library on the tab Settings, and every font family of the library shows in the Elementor font picker in the group WordPress Font Library. The plugin prints the font files of a family only on pages that use the family. The font library screen is part of the Site Editor, so only a block theme offers a screen to upload fonts. Fonts that already exist in the library work on every theme.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20need%20elementor%20pro%3F\"><h3>Does the plugin need Elementor Pro?<\/h3><\/dt>\n<dd><p>No. The plugin works with the free version of Elementor. If Elementor Pro is active and a Pro theme builder template claims the same location, the plugin yields to Elementor Pro.<\/p><\/dd>\n<dt id=\"where%20do%20i%20set%20the%20display%20rules%3F\"><h3>Where do I set the display rules?<\/h3><\/dt>\n<dd><p>In the meta box Template Settings on the edit screen of the template, or in the Elementor panel under Settings, Display Conditions. Both write the same values.<\/p><\/dd>\n<dt id=\"two%20templates%20match%20the%20same%20page.%20which%20one%20shows%3F\"><h3>Two templates match the same page. Which one shows?<\/h3><\/dt>\n<dd><p>The template with the more specific rule shows. A specific page beats a post type rule, a post type rule beats All Singulars, and All Singulars beats Entire Website. If two templates tie, the newer template shows.<\/p><\/dd>\n<dt id=\"where%20do%20the%20below%20header%20and%20above%20footer%20templates%20show%3F\"><h3>Where do the Below Header and Above Footer templates show?<\/h3><\/dt>\n<dd><p>A Below Header template shows right after the header, and an Above Footer template shows right before the footer. Both have their own display rules. On Astra, GeneratePress, OceanWP, and block themes they also show next to the theme header and footer. On other themes they show only together with a Header or Footer template of the plugin. The section Limits has the details.<\/p><\/dd>\n<dt id=\"why%20does%20the%20template%20not%20show%20on%20my%20elementor%20canvas%20page%3F\"><h3>Why does the template not show on my Elementor Canvas page?<\/h3><\/dt>\n<dd><p>Turn on Enable on Elementor Canvas in the template settings. The Canvas page template prints no theme header and no theme footer, so the plugin adds the template only when you ask for it.<\/p><\/dd>\n<dt id=\"the%20layout%20of%20my%20theme%20breaks%20with%20the%20header.%20what%20can%20i%20do%3F\"><h3>The layout of my theme breaks with the header. What can I do?<\/h3><\/dt>\n<dd><p>Your theme uses the generic fallback. Open Appearance, Header &amp; Footer, then the tab Settings, and read the detected method. Select the mode Theme support and call <code>headfoot_render_header()<\/code> and <code>headfoot_render_footer()<\/code> in the theme files, as the section Theme integration describes.<\/p><\/dd>\n<dt id=\"how%20do%20i%20use%20my%20own%20fonts%3F\"><h3>How do I use my own fonts?<\/h3><\/dt>\n<dd><p>Upload the fonts to the WordPress font library in the Site Editor under Styles, Typography. Then turn on Enable WordPress Font Library on the tab Settings. The families show in the Elementor font picker in the group WordPress Font Library. On a classic theme the Site Editor is not available, so upload the fonts while a block theme is active, or use a plugin that writes to the font library.<\/p><\/dd>\n<dt id=\"can%20i%20place%20a%20template%20inside%20a%20page%20or%20a%20widget%20area%3F\"><h3>Can I place a template inside a page or a widget area?<\/h3><\/dt>\n<dd><p>Yes. Copy the shortcode from the list table, for example <code>[headfoot_template id=\"123\"]<\/code>, and paste it into the content. The shortcode ignores the display rules.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Build a header and a footer with the free version of Elementor and choose where they show.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/381806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=381806"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/migaweb"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=381806"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=381806"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=381806"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=381806"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=381806"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=381806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}