Advertisement
Konark

Menu Elementor

Jul 12th, 2019
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.49 KB | None | 0 0
  1. public function handle_link_classes( $atts, $item, $args, $depth ) {
  2.         $classes = $depth ? 'elementor-sub-item' : 'elementor-item';
  3.         $is_anchor = false !== strpos( $atts['href'], '#' );
  4.  
  5.         if ( ! $is_anchor && in_array( 'current-menu-item', $item->classes ) ) {
  6.             $classes .= ' elementor-item-active';
  7.         }
  8.  
  9.         if ( $is_anchor ) {
  10.             $classes .= ' elementor-item-anchor';
  11.         }
  12.  
  13.         if ( empty( $atts['class'] ) ) {
  14.             $atts['class'] = $classes;
  15.         } else {
  16.             $atts['class'] .= ' ' . $classes;
  17.         }
  18.  
  19.         return $atts;
  20.     }
  21.  
  22.     public function handle_sub_menu_classes( $classes ) {
  23.         $classes[] = 'cmsmasters_nav_menu--dropdown';
  24.  
  25.         return $classes;
  26.     }
  27.    
  28.     protected $nav_menu_index = 1;
  29.  
  30.     protected function get_nav_menu_index() {
  31.         return $this->nav_menu_index++;
  32.     }
  33.    
  34.     protected function render() {
  35.         $available_menus = $this->get_available_menus();
  36.  
  37.         if ( ! $available_menus ) {
  38.             return;
  39.         }
  40.  
  41.         $settings = $this->get_active_settings();
  42.  
  43.         $args = [
  44.             'echo' => false,
  45.             'menu' => $settings['nav_menu'],
  46.             'menu_class' => 'cmsmasters_nav_menu',
  47.             'menu_id' => 'menu-' . $this->get_nav_menu_index() . '-' . $this->get_id(),
  48.             'fallback_cb' => '__return_empty_string',
  49.             'container' => '',
  50.         ];
  51.  
  52.         if ( 'vertical' === $settings['layout'] ) {
  53.             $args['menu_class'] .= ' sm-vertical';
  54.         }
  55.  
  56.         // Add custom filter to handle Nav Menu HTML output.
  57.         add_filter( 'nav_menu_link_attributes', [ $this, 'handle_link_classes' ], 10, 4 );
  58.         add_filter( 'nav_menu_submenu_css_class', [ $this, 'handle_sub_menu_classes' ] );
  59.         add_filter( 'nav_menu_item_id', '__return_empty_string' );
  60.  
  61.         // General Menu.
  62.         $menu_html = wp_nav_menu( $args );
  63.  
  64.         // Dropdown Menu.
  65.         $args['menu_id'] = 'menu-' . $this->get_nav_menu_index() . '-' . $this->get_id();
  66.         $dropdown_menu_html = wp_nav_menu( $args );
  67.  
  68.         // Remove all our custom filters.
  69.         remove_filter( 'nav_menu_link_attributes', [ $this, 'handle_link_classes' ] );
  70.         remove_filter( 'nav_menu_submenu_css_class', [ $this, 'handle_sub_menu_classes' ] );
  71.         remove_filter( 'nav_menu_item_id', '__return_empty_string' );
  72.  
  73.         if ( empty( $menu_html ) ) {
  74.             return;
  75.         }
  76.  
  77.         $this->add_render_attribute( 'menu-toggle', 'class', [
  78.             'elementor-menu-toggle',
  79.         ] );
  80.  
  81.         // if ( Plugin::elementor()->editor->is_edit_mode() ) {
  82.         //  $this->add_render_attribute( 'menu-toggle', [
  83.         //      'class' => 'elementor-clickable',
  84.         //  ] );
  85.         // }
  86.  
  87.         if ( 'dropdown' !== $settings['layout'] ) :
  88.             $this->add_render_attribute( 'main-menu', 'class', [
  89.                 'cmsmasters_nav_menu--main',
  90.                 'cmsmasters_nav_menu__container',
  91.                 'cmsmasters_nav_menu--layout-' . $settings['layout'],
  92.             ] );
  93.  
  94.             if ( $settings['pointer'] ) :
  95.                 $this->add_render_attribute( 'main-menu', 'class', 'e--pointer-' . $settings['pointer'] );
  96.  
  97.                 foreach ( $settings as $key => $value ) :
  98.                     if ( 0 === strpos( $key, 'animation' ) && $value ) :
  99.                         $this->add_render_attribute( 'main-menu', 'class', 'e--animation-' . $value );
  100.  
  101.                         break;
  102.                     endif;
  103.                 endforeach;
  104.             endif; ?>
  105.             <nav <?php echo $this->get_render_attribute_string( 'main-menu' ); ?>><?php echo $menu_html; ?></nav>
  106.             <?php
  107.         endif;
  108.         ?>
  109.         <div <?php echo $this->get_render_attribute_string( 'menu-toggle' ); ?>>
  110.             <i class="eicon" aria-hidden="true"></i>
  111.             <span class="elementor-screen-only"><?php _e( 'Menu', 'elementor-pro' ); ?></span>
  112.         </div>
  113.         <nav class="cmsmasters_nav_menu--dropdown cmsmasters_nav_menu__container"><?php echo $dropdown_menu_html; ?></nav>
  114.         <?php
  115.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement