Changeset 3437017
- Timestamp:
- 01/11/2026 10:33:41 AM (3 months ago)
- Location:
- header-footer-builder-for-elementor
- Files:
-
- 59 added
- 11 edited
-
tags/1.0.9 (added)
-
tags/1.0.9/LICENSE.txt (added)
-
tags/1.0.9/README.MD (added)
-
tags/1.0.9/assets (added)
-
tags/1.0.9/assets/css (added)
-
tags/1.0.9/assets/css/editor-warning.css (added)
-
tags/1.0.9/assets/css/icon-button-hf.css (added)
-
tags/1.0.9/assets/css/navigation-menu-hf.css (added)
-
tags/1.0.9/assets/css/top-bar-widgets-hf.css (added)
-
tags/1.0.9/assets/css/turbo-footer-template-popup.css (added)
-
tags/1.0.9/assets/css/turbo-header-style.css (added)
-
tags/1.0.9/assets/css/turbo-header-template-popup.css (added)
-
tags/1.0.9/assets/images (added)
-
tags/1.0.9/assets/images/promotion-banner.webp (added)
-
tags/1.0.9/assets/images/turbo-logo.png (added)
-
tags/1.0.9/assets/images/turboFile.svg (added)
-
tags/1.0.9/assets/js (added)
-
tags/1.0.9/assets/js/navigation-menu-hf.js (added)
-
tags/1.0.9/assets/js/turbo-footer-conditions-popup.js (added)
-
tags/1.0.9/assets/js/turbo-footer-template-popup.js (added)
-
tags/1.0.9/assets/js/turbo-header-behavior.js (added)
-
tags/1.0.9/assets/js/turbo-header-conditions-popup.js (added)
-
tags/1.0.9/assets/js/turbo-header-template-popup.js (added)
-
tags/1.0.9/assets/vendor (added)
-
tags/1.0.9/assets/vendor/select2 (added)
-
tags/1.0.9/assets/vendor/select2/select2.min.css (added)
-
tags/1.0.9/assets/vendor/select2/select2.min.js (added)
-
tags/1.0.9/backup (added)
-
tags/1.0.9/backup/turbo-header-render.php (added)
-
tags/1.0.9/header-footer-builder-for-elementor.php (added)
-
tags/1.0.9/header-footer-template (added)
-
tags/1.0.9/header-footer-template/footer-builder (added)
-
tags/1.0.9/header-footer-template/footer-builder/turbo-footer-render.php (added)
-
tags/1.0.9/header-footer-template/footer-builder/turbo-footer-template.php (added)
-
tags/1.0.9/header-footer-template/header-builder (added)
-
tags/1.0.9/header-footer-template/header-builder/dummy-header.php (added)
-
tags/1.0.9/header-footer-template/header-builder/empty-header.php (added)
-
tags/1.0.9/header-footer-template/header-builder/turbo-header-render.php (added)
-
tags/1.0.9/header-footer-template/header-builder/turbo-header-template.php (added)
-
tags/1.0.9/header-footer-template/header-footer-menu (added)
-
tags/1.0.9/header-footer-template/header-footer-menu/header-footer-menu.php (added)
-
tags/1.0.9/helper (added)
-
tags/1.0.9/helper/helper.php (added)
-
tags/1.0.9/includes (added)
-
tags/1.0.9/includes/class-hfb-recommend-turbo-addons.php (added)
-
tags/1.0.9/languages (added)
-
tags/1.0.9/templates (added)
-
tags/1.0.9/templates/single-tahefobu_footer_template.php (added)
-
tags/1.0.9/templates/single-tahefobu_header_template.php (added)
-
tags/1.0.9/widgets (added)
-
tags/1.0.9/widgets/copy-right-hf.php (added)
-
tags/1.0.9/widgets/icon-button-hf.php (added)
-
tags/1.0.9/widgets/navigation-menu-hf.php (added)
-
tags/1.0.9/widgets/site-logo-hf.php (added)
-
tags/1.0.9/widgets/top-bar-hf.php (added)
-
tags/1.0.9/wppulse (added)
-
tags/1.0.9/wppulse/wppulse-plugin-analytics-engine-sdk.php (added)
-
trunk/README.MD (modified) (2 diffs)
-
trunk/assets/css/navigation-menu-hf.css (modified) (1 diff)
-
trunk/assets/css/turbo-footer-template-popup.css (modified) (1 diff)
-
trunk/backup (added)
-
trunk/backup/turbo-header-render.php (added)
-
trunk/header-footer-builder-for-elementor.php (modified) (3 diffs)
-
trunk/header-footer-template/footer-builder/turbo-footer-render.php (modified) (1 diff)
-
trunk/header-footer-template/footer-builder/turbo-footer-template.php (modified) (1 diff)
-
trunk/header-footer-template/header-builder/dummy-header.php (modified) (1 diff)
-
trunk/header-footer-template/header-builder/empty-header.php (modified) (1 diff)
-
trunk/header-footer-template/header-builder/turbo-header-render.php (modified) (2 diffs)
-
trunk/header-footer-template/header-builder/turbo-header-template.php (modified) (2 diffs)
-
trunk/widgets/navigation-menu-hf.php (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
header-footer-builder-for-elementor/trunk/README.MD
r3428478 r3437017 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 1.0. 87 Stable tag: 1.0.9 8 8 License: GPLv3 9 9 License URI: https://opensource.org/licenses/GPL-3.0 … … 171 171 == Changelog == 172 172 173 == 1.0.9 == 174 - Fix: Allow plugin header/footer to render inside Elementor editor for normal pages so editor shows correct header/footer. 175 - Fix: Skip plugin header/footer rendering on pages using the Elementor Canvas layout (prevents plugin injection on Canvas pages). 176 - Maintenance: Minor code improvements and safety checks for Elementor preview handling. 177 173 178 = 1.0.8 = 174 179 * Fixed — Duplicate Header Issue – Resolved conflict causing duplicate header output and blank space on some themes. -
header-footer-builder-for-elementor/trunk/assets/css/navigation-menu-hf.css
r3406564 r3437017 22 22 position: relative; 23 23 z-index: 1; 24 } 25 26 /* Smooth transitions for active/hover state to prevent layout jump */ 27 .tahefobu-nav-menu .tahefobu-menu-item, 28 .tahefobu-mobile-nav-menu .tahefobu-mobile-menu-item { 29 transition: color .18s ease, background-color .18s ease, transform .18s ease; 30 box-sizing: border-box; /* prevent padding changes from affecting layout */ 31 display: inline-block; /* stabilize inline menu item widths */ 32 min-width: 0; 24 33 } 25 34 -
header-footer-builder-for-elementor/trunk/assets/css/turbo-footer-template-popup.css
r3368800 r3437017 1 /* //nothing here yet// */ -
header-footer-builder-for-elementor/trunk/header-footer-builder-for-elementor.php
r3428478 r3437017 4 4 * Plugin URI: https://wp-turbo.com/header-footer-builder-for-elementor/ 5 5 * Description: Header Footer Builder for Elementor & WooCommerce. Easy, customizable plugin for headers/footers with display rules, sticky header & include/exclude. 6 * Version: 1.0. 86 * Version: 1.0.9 7 7 * Requires Plugins: elementor 8 8 * Author: turbo addons … … 92 92 define( 'TAHEFOBU_HEADER_FOOTER_BUILDER_FOR_ELEMENTOR_PLUGIN_URL', trailingslashit( plugins_url( '/', __FILE__ ) ) ); 93 93 define( 'TAHEFOBU_HEADER_FOOTER_BUILDER_FOR_ELEMENTOR_PLUGIN_PATH', trailingslashit( plugin_dir_path( __FILE__ ) ) ); 94 define( 'TAHEFOBU_HEADER_FOOTER_BUILDER_FOR_ELEMENTOR_PLUGIN_VERSION', '1.0. 8' );94 define( 'TAHEFOBU_HEADER_FOOTER_BUILDER_FOR_ELEMENTOR_PLUGIN_VERSION', '1.0.9' ); 95 95 } 96 96 … … 204 204 false, // no file, just for inline use 205 205 [], 206 '1.0. 8'206 '1.0.9' 207 207 ); 208 208 wp_enqueue_style( 'tahefobu-frontend' ); 209 209 210 210 // Add your dynamic CSS inline 211 $dynamic_css = '#tahefobu-header:not(.tahefobu-ready) { visibility: hidden; }'; 211 // Start header visually hidden (opacity 0) but present in layout; apply a very short fade when ready. 212 $dynamic_css = '#tahefobu-header { opacity: 0; transform: none; pointer-events: none; } #tahefobu-header.tahefobu-ready { opacity: 1; pointer-events: auto; transition: opacity .25s linear; }'; 212 213 wp_add_inline_style( 'tahefobu-frontend', $dynamic_css ); 213 214 }, 1 ); -
header-footer-builder-for-elementor/trunk/header-footer-template/footer-builder/turbo-footer-render.php
r3369450 r3437017 16 16 } 17 17 18 // Skip rendering/matching during Elementor preview (reviewer-friendly API)18 // Skip rendering/matching during Elementor preview only when previewing our CPTs. 19 19 if ( defined( 'ELEMENTOR_VERSION' ) && \Elementor\Plugin::$instance->preview->is_preview_mode() ) { 20 20 $pid = get_the_ID(); 21 21 22 // Enforce nonce + caps only for our CPT previews23 if ( $pid && in_array( get_post_type( $pid ), [ 'tahefobu_header', 'tahefobu_footer' ], true ) ) {24 $nonce = filter_input( INPUT_GET, 'tahefobu_nonce', FILTER_SANITIZE_FULL_SPECIAL_CHARS );22 // If the preview is for our header/footer CPTs, verify nonce + caps and skip matching/rendering. 23 if ( $pid && in_array( get_post_type( $pid ), [ 'tahefobu_header', 'tahefobu_footer' ], true ) ) { 24 $nonce = filter_input( INPUT_GET, 'tahefobu_nonce', FILTER_SANITIZE_FULL_SPECIAL_CHARS ); 25 25 26 // Fail early if nonce missing/invalid 27 if ( ! $nonce || ! wp_verify_nonce( $nonce, 'tahefobu_preview_' . $pid ) ) { 28 return; 29 } 30 31 // Authorization (nonces aren’t auth) 32 if ( ! is_user_logged_in() || ! current_user_can( 'edit_post', $pid ) ) { 33 return; 34 } 26 // Fail early if nonce missing/invalid 27 if ( ! $nonce || ! wp_verify_nonce( $nonce, 'tahefobu_preview_' . $pid ) ) { 28 return; 35 29 } 36 30 37 // Always skip our footer logic in preview 31 // Authorization (nonces aren’t auth) 32 if ( ! is_user_logged_in() || ! current_user_can( 'edit_post', $pid ) ) { 33 return; 34 } 35 36 // Valid preview of our CPT — skip our matching/rendering to avoid duplication. 38 37 return; 39 38 } 39 40 // For previews of regular pages (editor), allow footer matching/rendering so editor shows the plugin footer when applicable. 41 } 40 42 41 43 $footers = get_posts( [ -
header-footer-builder-for-elementor/trunk/header-footer-template/footer-builder/turbo-footer-template.php
r3374129 r3437017 275 275 276 276 $current_page_id = get_queried_object_id(); 277 // If the page is using Elementor Canvas layout, skip matching footers (Canvas intentionally excludes theme header/footer). 278 if ( $current_page_id ) { 279 $page_settings = get_post_meta( $current_page_id, '_elementor_page_settings', true ); 280 if ( is_array( $page_settings ) && isset( $page_settings['page_layout'] ) && 'elementor_canvas' === $page_settings['page_layout'] ) { 281 return null; 282 } 283 $wp_template = get_post_meta( $current_page_id, '_wp_page_template', true ); 284 if ( ! empty( $wp_template ) && false !== strpos( $wp_template, 'elementor_canvas' ) ) { 285 return null; 286 } 287 } 277 288 $candidates = get_posts([ 278 289 'post_type' => 'tahefobu_footer', -
header-footer-builder-for-elementor/trunk/header-footer-template/header-builder/dummy-header.php
r3426644 r3437017 8 8 * Then our get_header hook outputs the actual header 9 9 */ 10 ?> 10 11 if ( ! defined( 'ABSPATH' ) ) exit; 12 13 ?> -
header-footer-builder-for-elementor/trunk/header-footer-template/header-builder/empty-header.php
r3426644 r3437017 2 2 // Empty header file for Turbo Header Footer Builder 3 3 // This prevents theme's header.php from loading 4 5 6 if ( ! defined( 'ABSPATH' ) ) exit; 7 8 4 9 ?> -
header-footer-builder-for-elementor/trunk/header-footer-template/header-builder/turbo-header-render.php
r3428478 r3437017 20 20 21 21 // Strict handling of Elementor preview param 22 // - If previewing our header/footer CPTs, verify nonce/caps and skip rendering to avoid double-output. 23 // - If previewing a normal page (editing a page in Elementor), allow our header to render so editor shows correct header. 22 24 if ( defined( 'ELEMENTOR_VERSION' ) && \Elementor\Plugin::$instance->preview->is_preview_mode() ) { 23 25 $pid = get_the_ID(); 24 26 25 // Only enforce nonce/caps for our custom CPT previews26 27 if ( $pid && in_array( get_post_type( $pid ), [ 'tahefobu_header', 'tahefobu_footer' ], true ) ) { 27 28 $nonce = isset( $_GET['tahefobu_nonce'] ) ? sanitize_text_field( wp_unslash( $_GET['tahefobu_nonce'] ) ) : ''; … … 36 37 return; 37 38 } 39 40 // When the preview is specifically of our CPT, skip rendering the live header/footer to avoid duplication. 41 return; 38 42 } 39 43 40 // Always skip rendering in preview 41 return; 44 // For previews of regular pages (editor/preview), do NOT early-return — allow our header to render in the editor. 42 45 } 43 46 -
header-footer-builder-for-elementor/trunk/header-footer-template/header-builder/turbo-header-template.php
r3426644 r3437017 261 261 $current_page_id = get_queried_object_id(); 262 262 263 // If the current page uses the Elementor 'Canvas' page layout, do not match headers (Canvas intentionally has no theme header). 264 if ( $current_page_id ) { 265 $page_settings = get_post_meta( $current_page_id, '_elementor_page_settings', true ); 266 if ( is_array( $page_settings ) && isset( $page_settings['page_layout'] ) && 'elementor_canvas' === $page_settings['page_layout'] ) { 267 return null; 268 } 269 $wp_template = get_post_meta( $current_page_id, '_wp_page_template', true ); 270 if ( ! empty( $wp_template ) && false !== strpos( $wp_template, 'elementor_canvas' ) ) { 271 return null; 272 } 273 } 274 263 275 $candidates = get_posts( [ 264 276 'post_type' => 'tahefobu_header', … … 348 360 // Elementor preview gating 349 361 if ( isset( $_GET['elementor-preview'] ) ) { 350 $raw_id = filter_input( INPUT_GET, 'elementor-preview', FILTER_SANITIZE_NUMBER_INT );351 if ( ! $raw_id ) return;362 $raw_id = filter_input( INPUT_GET, 'elementor-preview', FILTER_SANITIZE_NUMBER_INT ); 363 if ( ! $raw_id ) return; 352 364 $pid = absint( $raw_id ); 353 365 $nonce = filter_input( INPUT_GET, 'tahefobu_nonce', FILTER_SANITIZE_FULL_SPECIAL_CHARS ); 354 // Security: Require valid nonce + current_user_can for preview access. Prevents bypass or unauthorized rendering. 355 if ( ! $pid || ! $nonce || ! wp_verify_nonce( $nonce, 'tahefobu_preview_' . $pid ) ) return; 356 if ( ! is_user_logged_in() || ! current_user_can( 'edit_post', $pid ) ) return; 357 // Valid preview → do not mark for render 358 return; 366 367 // If the preview is specifically for one of our CPTs, require nonce + caps and skip marking for render. 368 if ( $pid && in_array( get_post_type( $pid ), [ 'tahefobu_header', 'tahefobu_footer' ], true ) ) { 369 if ( ! $nonce || ! wp_verify_nonce( $nonce, 'tahefobu_preview_' . $pid ) ) return; 370 if ( ! is_user_logged_in() || ! current_user_can( 'edit_post', $pid ) ) return; 371 // Valid preview of our CPT → do not mark for render 372 return; 373 } 374 375 // For previews of normal pages (editor/preview), continue so our header can be matched/rendered inside editor. 359 376 } 360 377 -
header-footer-builder-for-elementor/trunk/widgets/navigation-menu-hf.php
r3406564 r3437017 434 434 ] 435 435 ); 436 //menu item background color 437 $this->add_control( 438 'tahefobu_navmenu_item_background_color', 439 [ 440 'label' => esc_html__('Background Color', 'header-footer-builder-for-elementor'), 441 'type' => Controls_Manager::COLOR, 442 'selectors' => [ 443 '{{WRAPPER}} .tahefobu-nav-menu .tahefobu-menu-item' => 'background-color: {{VALUE}};', 444 ], 445 ] 446 ); 436 447 437 448 $this->add_control( … … 567 578 ] 568 579 ); 580 //border radius 581 $this->add_control( 582 'tahefobu_navmenu_items_border_radius', 583 [ 584 'label' => esc_html__( 'Border Radius', 'header-footer-builder-for-elementor' ), 585 'type' => Controls_Manager::DIMENSIONS, 586 'size_units' => [ 'px', '%', 'em' ], 587 'default' => [ 588 'top' => '0', 589 'right' => '0', 590 'bottom' => '0', 591 'left' => '0', 592 'isLinked' => true, 593 ], 594 'selectors' => [ 595 '{{WRAPPER}} .tahefobu-menu-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', 596 ], 597 ] 598 ); 569 599 570 600 $this->end_controls_tab(); … … 573 603 'tahefobu_navmenu_style_hover_tab', 574 604 [ 575 'label' => esc_html__( ' Hover', 'header-footer-builder-for-elementor' ),605 'label' => esc_html__( 'Active', 'header-footer-builder-for-elementor' ), 576 606 ] 577 607 ); … … 588 618 {{WRAPPER}} .tahefobu-nav-menu .tahefobu-menu-item.tahefobu-active-menu-item, 589 619 {{WRAPPER}} .tahefobu-nav-menu > .menu-item-has-children.current_page_item > .tahefobu-sub-icon' => 'color: {{VALUE}};', 620 ], 621 ] 622 ); 623 //active item background color 624 $this->add_control( 625 'tahefobu_navmenu_item_bg_color_hover', 626 [ 627 'label' => esc_html__( 'Background Color', 'header-footer-builder-for-elementor' ), 628 'type' => Controls_Manager::COLOR, 629 'default' => '', 630 'selectors' => [ 631 '{{WRAPPER}} .tahefobu-nav-menu .tahefobu-menu-item:hover, 632 {{WRAPPER}} .tahefobu-nav-menu .tahefobu-menu-item.tahefobu-active-menu-item' => 'background-color: {{VALUE}};', 590 633 ], 591 634 ] … … 927 970 'default' => 'yes', 928 971 'return_value' => 'yes' 972 ] 973 ); 974 // mobile menu item width 975 $this->add_responsive_control( 976 'tahefobu_navmenu_mobile_menu_width', 977 [ 978 'label' => esc_html__( 'Menu Item Width', 'header-footer-builder-for-elementor' ), 979 'type' => Controls_Manager::SLIDER, 980 'default' => [ 981 'size' => 100, 982 'unit' => '%', 983 ], 984 'range' => [ 985 'px' => [ 986 'min' => 50, 987 'max' => 500, 988 ], 989 '%' => [ 990 'min' => 10, 991 'max' => 100, 992 ], 993 ], 994 'size_units' => [ 'px', '%' ], 995 'selectors' => [ 996 '{{WRAPPER}} .tahefobu-mobile-nav-menu a' => 'width: {{SIZE}}{{UNIT}};', 997 ], 929 998 ] 930 999 );
Note: See TracChangeset
for help on using the changeset viewer.