Current File : /home/inlingua/www/bestbuyind/wp-content/plugins/themehunk-megamenu-plus/inc/walker.php |
<?php
/**
* @package WordPress
* @since 1.0.0
* @uses Walker
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // disable direct access.
}
class ThemeHunk_MegaMenu_Walker extends Walker_Nav_Menu
{
public $item_ID;
public $isMegaMenu;
/**
* ThemeHunk_MegaMenu_Style constructor.
*/
public function ThemeHunk_MegaMenu_Walker_option(){
$themehunk_megamenu_builder_options = get_post_meta( $this->item_ID, 'themehunk_megamenu_builder_options', true );
return $themehunk_megamenu_builder_options;
}
/**)
* Starts the list before the elements are added.
*
* @see Walker::start_lvl()
*
* @since 1.0
*
* @param string $output Passed by reference. Used to append additional content.
* @param int $depth Depth of menu item. Used for padding.
* @param array $args An array of arguments. @see wp_nav_menu() */
public function start_lvl( &$output, $depth = 0, $args = array() ){
$style = '';
$data_alignment = '';
$themehunk_megamenu_endtoend = '';
$stylemegamenu = '';
$st_megamenu ='';
if ( $this->isMegaMenu == 'active' && $depth == 0 ) {
$themehunk_megamenu_builder_options = get_post_meta( $this->item_ID, 'themehunk_megamenu_builder_options', true );
$themehunk_megamenu_width = isset($themehunk_megamenu_builder_options['themehunk_megamenu_width']) ? "width:{$themehunk_megamenu_builder_options['themehunk_megamenu_width']};" : '';
$themehunk_megamenu_bg_color = isset($themehunk_megamenu_builder_options['themehunk_megamenu_bg_color']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_bg_color'] : '';
$themehunk_megamenu_bg_image = isset($themehunk_megamenu_builder_options['themehunk_megamenu_bg_image']) ? "background-image:url({$themehunk_megamenu_builder_options['themehunk_megamenu_bg_image']});" : '';
// mega-menu-option
$mmth_pannel_alignment = isset($themehunk_megamenu_builder_options['mmth_pannel_alignment']) ? $themehunk_megamenu_builder_options['mmth_pannel_alignment']: '';
//pan padding
$themehunk_megamenu_mega_pannel_padding_top = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_padding_top']) ? "padding-top:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_padding_top']}px;":'';
$themehunk_megamenu_mega_pannel_padding_right = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_padding_right']) ? "padding-right:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_padding_right']}px;":'';
$themehunk_megamenu_mega_pannel_padding_bottom = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_padding_bottom']) ? "padding-bottom:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_padding_bottom']}px;":'';
$themehunk_megamenu_mega_pannel_padding_left = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_padding_left']) ? "padding-left:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_padding_left']}px;":'';
//border-color
$themehunk_megamenu_border_color = isset($themehunk_megamenu_builder_options['themehunk_megamenu_border_color']) ? "border-color:{$themehunk_megamenu_builder_options['themehunk_megamenu_border_color']};" : '';
$themehunk_megamenu_mega_pannel_border_top = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_border_top']) ? "border-top-width:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_border_top']}px;":'';
$themehunk_megamenu_mega_pannel_border_right = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_border_right']) ? "border-right-width:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_border_right']}px;":'';
$themehunk_megamenu_mega_pannel_border_bottom = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_border_bottom']) ? "border-bottom-width:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_border_bottom']}px;":'';
$themehunk_megamenu_mega_pannel_border_left = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_border_left']) ? "border-left-width:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_border_left']}px;":'';
// border-radius
$themehunk_megamenu_mega_pannel_raidus_top_left = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_raidus_top_left']) ? "border-top-left-radius:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_raidus_top_left']}px;" : '';
$themehunk_megamenu_mega_pannel_raidus_top_right = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_raidus_top_right']) ? "border-top-right-radius:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_raidus_top_right']}px;" : '';
$themehunk_megamenu_mega_pannel_raidus_bottom_right = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_raidus_bottom_right']) ? "border-bottom-right-radius:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_raidus_bottom_right']}px;" : '';
$themehunk_megamenu_mega_pannel_raidus_bottom_left = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_raidus_bottom_left']) ? "border-bottom-left-radius:{$themehunk_megamenu_builder_options['themehunk_megamenu_mega_pannel_raidus_bottom_left']}px;" : '';
// color
$themehunk_megamenu_themehunk_megamenu_widget_title_color = isset($themehunk_megamenu_builder_options['themehunk_megamenu_themehunk_megamenu_widget_title_color']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_themehunk_megamenu_widget_title_color'] : '';
$themehunk_megamenu_megamenu_widget_text_color = isset($themehunk_megamenu_builder_options['themehunk_megamenu_megamenu_widget_text_color']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_megamenu_widget_text_color'] : '';
$themehunk_megamenu_megamenu_widget_link_color = isset($themehunk_megamenu_builder_options['themehunk_megamenu_megamenu_widget_link_color']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_megamenu_widget_link_color']: '';
$themehunk_megamenu_megamenu_widget_linkhvr_color = isset($themehunk_megamenu_builder_options['themehunk_megamenu_megamenu_widget_linkhvr_color']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_megamenu_widget_linkhvr_color'] : '';
$themehunk_megamenu_widget_content_alignment = isset($themehunk_megamenu_builder_options['themehunk_megamenu_widget_content_alignment']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_widget_content_alignment'] : 'left';
// coloum
$themehunk_megamenu_mega_column_padding_top = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_column_padding_top']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_mega_column_padding_top'] : '';
$themehunk_megamenu_mega_column_padding_right = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_column_padding_right']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_mega_column_padding_right'] : '';
$themehunk_megamenu_mega_column_padding_left = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_column_padding_left']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_mega_column_padding_left'] : '';
$themehunk_megamenu_mega_column_padding_bottom = isset($themehunk_megamenu_builder_options['themehunk_megamenu_mega_column_padding_bottom']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_mega_column_padding_bottom'] : '';
$themehunk_megamenu_themehunk_megamenu_widget_title_color = isset($themehunk_megamenu_builder_options['themehunk_megamenu_themehunk_megamenu_widget_title_color']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_themehunk_megamenu_widget_title_color'] : '';
$data_alignment = $mmth_pannel_alignment;
$themehunk_megamenu_endtoend1= isset($themehunk_megamenu_builder_options['themehunk_megamenu_endtoend']) ? $themehunk_megamenu_builder_options['themehunk_megamenu_endtoend']: '';
$themehunk_megamenu_endtoend = $themehunk_megamenu_endtoend1;
$style = 'style="'. $themehunk_megamenu_width . esc_attr($themehunk_megamenu_bg_image) . esc_attr( $themehunk_megamenu_mega_pannel_padding_top) . esc_attr( $themehunk_megamenu_mega_pannel_padding_right) . esc_attr( $themehunk_megamenu_mega_pannel_padding_bottom) . esc_attr( $themehunk_megamenu_mega_pannel_padding_left) . esc_attr($themehunk_megamenu_border_color) . esc_attr($themehunk_megamenu_mega_pannel_border_top) . esc_attr($themehunk_megamenu_mega_pannel_border_right) . esc_attr($themehunk_megamenu_mega_pannel_border_bottom) . esc_attr($themehunk_megamenu_mega_pannel_border_left) . esc_attr($themehunk_megamenu_mega_pannel_raidus_top_left) . esc_attr($themehunk_megamenu_mega_pannel_raidus_top_right) . esc_attr($themehunk_megamenu_mega_pannel_raidus_bottom_right) . esc_attr($themehunk_megamenu_mega_pannel_raidus_bottom_left) .'"';
$st_megamenu.="#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .mega-sub-menu-themehunk-megamenu.depth-0:before{
content:'';
position:absolute;
top: 0;
left: 0;
width: 100%;
background:{$themehunk_megamenu_bg_color};
}
#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-themehunk-megamenu-col{
padding-top:{$themehunk_megamenu_mega_column_padding_top}px;
padding-bottom:{$themehunk_megamenu_mega_column_padding_bottom}px;
padding-left:{$themehunk_megamenu_mega_column_padding_left}px;
padding-right:{$themehunk_megamenu_mega_column_padding_right}px;
}
#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget .themehunk-megamenu-item-title{
color:{$themehunk_megamenu_themehunk_megamenu_widget_title_color}!important;
}
#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget,#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget p,#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget h1,#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget h2,#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget h3,#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget h4,#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget h5, #themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget h6, #themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget span{
color:{$themehunk_megamenu_megamenu_widget_text_color}!important;
}
#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget a,#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget a span{
color:{$themehunk_megamenu_megamenu_widget_link_color}!important;
}
#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget a:hover,#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget a:hover span{
color:{$themehunk_megamenu_megamenu_widget_linkhvr_color}!important;
}
";
if( $themehunk_megamenu_widget_content_alignment=='left'){
$st_megamenu.="#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget{text-align:left!important}";
}elseif( $themehunk_megamenu_widget_content_alignment=='center'){
$st_megamenu.="#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget{text-align:center!important}";
}elseif( $themehunk_megamenu_widget_content_alignment=='right'){
$st_megamenu.="#themehunk-megamenu-menu-item-$this->item_ID.themehunk-megamenu-is-megamenu .themehunk-megamenu-mmth-type-widget{text-align:right!important}";
}?>
<style type='text/css'>
<?php echo $st_megamenu;?>
</style>
<?php
}
// $this->themehunk_megamenu_megamenu_render_css($stylemegamenu);
$indent = str_repeat("\t", $depth);
$output .= "\n$indent<ul class=\"mega-sub-menu-themehunk-megamenu depth-$depth $data_alignment $themehunk_megamenu_endtoend \" $style >\n";
}
/**
* Ends the list of after the elements are added.
*
* @see Walker::end_lvl()
*
* @since 1.0
*
* @param string $output Passed by reference. Used to append additional content.
* @param int $depth Depth of menu item. Used for padding.
* @param array $args An array of arguments. @see wp_nav_menu()
*/
function end_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "$indent</ul>\n";
}
/**
* Custom walker. Add the widgets into the menu.
*
* @see Walker::start_el()
*
* @since 1.0
*
* @param string $output Passed by reference. Used to append additional content.
* @param object $item Menu item data object.
* @param int $depth Depth of menu item. Used for padding.
* @param array $args An array of arguments. @see wp_nav_menu()
* @param int $id Current item ID.
*/
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
$this->item_ID = $item->ID;
$this->item_layout = get_post_meta( $item->ID, 'themehunk_megamenu_layout', true );
$this->isMegaMenu = get_post_meta( $item->ID, 'themehunk_megamenu_item_megamenu_status', true );
$indent = ($depth) ? str_repeat("\t", $depth) : '';
$li_attributes = '';
$class_names = $value = '';
$classes = empty($item->classes) ? array() : (array) $item->classes;
if ( $this->isMegaMenu == 'active' && $depth == 0 ) {
array_push( $classes, 'is-megamenu' );
array_push( $classes, 'menu-item-has-children' );
}
$class_names = implode(' ', apply_filters('themehunk_megamenu_nav_menu_css_class', array_filter($classes), $item, $args));
// these classes are prepended with 'mega-'
$mega_classes = explode( ' ',$class_names);
$class_names = ' class="'.esc_attr($class_names).'"';
$id = apply_filters('nav_menu_item_id', 'themehunk-megamenu-menu-item-'.$item->ID, $item, $args);
$id = strlen($id) ? ' id="'.esc_attr($id).'"' : '';
$output .= $indent.'<li'.$id.$value.$class_names.$li_attributes.'>';
$attributes = !empty($item->attr_title) ? ' title="'.esc_attr($item->attr_title).'"' : '';
$attributes .= !empty($item->target) ? ' target="'.esc_attr($item->target).'"' : '';
$attributes .= !empty($item->xfn) ? ' rel="'.esc_attr($item->xfn).'"' : '';
$attributes .= !empty($item->url) ? ' href="'.esc_attr($item->url).'"' : '';
$attributes .= ($args->has_children) ? ' class="dropdown-toggle" data-toggle="dropdown"' : '';
$item_output = $args->before;
$item_output = '';
if ( $item->type == 'widget'){
$item_output = $item->output;
}
if ( $item->type != 'widget'){
$mmth_icon = '';
if ( ( $depth == 0 ) && $args->has_children ) {
$themehunk_megamenu_builder_options = get_post_meta( $item->ID, 'themehunk_megamenu_builder_options', true );
$mmth_icon .= isset( $themehunk_megamenu_builder_options['icon'] ) ? "<span class='mmth-selected-icon'><i class='{$themehunk_megamenu_builder_options['icon']}'></i></span>" : '';
}
if ( isset( $atts['class'] ) && strlen( $atts['class'] ) ){
$atts['class'] = $atts['class'] . 'themehunk-megamenu-menu-link';
} else {
$atts['class'] = 'themehunk-megamenu-menu-link';
}
$atts['href'] = ! empty( $item->url ) ? $item->url : '';
if ( is_array( $classes ) && in_array( 'menu-item-has-children', $classes )) {
$atts['aria-haspopup'] = "true"; // required for Surface/Win10/Edge
$atts['aria-expanded'] = "false";
if ( is_array( $mega_classes ) && in_array( 'mega-toggle-on', $mega_classes ) ) {
$atts['aria-expanded'] = "true";
}
}
if ( $depth == 0 ) {
$atts['tabindex'] = "0";
}
if ( isset( $settings['hide_text'] ) && $settings['hide_text'] == 'true' ) {
$atts['aria-label'] = $item->title;
}
$attributes = '';
foreach ( $atts as $attr => $value ) {
if ( strlen( $value ) ) {
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
$attributes .= ' ' . $attr . '="' . $value . '"';
}
}
$item_output = $args->before;
$item_output .= '<a'. $attributes .'>';
$item_output .= ( ( $depth == 0 ) && $args->has_children) ? $mmth_icon : '';
if ( is_array( $classes ) && in_array('icon-top', $classes ) ) {
$item_output .= "<span class='mega-title-below'>";
}
if ( isset( $settings['hide_text'] ) && $settings['hide_text'] == 'true' ) {
/** This filter is documented in wp-includes/post-template.php */
} else if ( property_exists( $item, 'mega_description' ) && strlen( $item->mega_description ) ) {
$item_output .= '<span class="mega-description-group"><span class="mega-menu-title">' . $args->link_before . apply_filters( 'themehunk_megamenu_the_title', $item->title, $item->ID ) . $args->link_after . '</span><span class="mega-menu-description">' . $item->description . '</span></span>';
} else {
$item_output .= $args->link_before . apply_filters( 'themehunk_megamenu_the_title', $item->title, $item->ID ) . $args->link_after;
}
if ( is_array( $classes ) && in_array( 'icon-top', $classes ) ) {
$item_output .= "</span>";
}
if ( is_array( $classes ) && in_array( 'menu-item-has-children', $classes ) ) {
$item_output .= '<span class="mega-indicator"></span>';
}
$item_output .= '</a>';
$item_output .= $args->after;
if ( is_array( $classes ) && ( in_array( "menu-column", $classes ) || in_array( "menu-row", $classes ) ) ) {
$item_output = "";
}
}
$item_output .= $args->after;
$output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args);
}
/**
* Ends the element output, if needed.
*
* @see Walker::end_el()
*
* @since 1.7
*
* @param string $output Passed by reference. Used to append additional content.
* @param object $item Page data object. Not used.
* @param int $depth Depth of page. Not Used.
* @param array $args An array of arguments. @see wp_nav_menu()
*/
public function end_el( &$output, $item, $depth = 0, $args = array() ) {
$output .= "</li>"; // remove new line to remove the 4px gap between menu items
}
/**
* Traverse elements to create list from elements.
*
* Display one element if the element doesn't have any children otherwise,
* display the element and its children. Will only traverse up to the max
* depth and no ignore elements under that depth. It is possible to set the
* max depth to include all depths, see walk() method.
*
* This method should not be called directly, use the walk() method instead.
*
* @since 2.5.0
*
* @param object $element Data object.
* @param array $children_elements List of elements to continue traversing (passed by reference).
* @param int $max_depth Max depth to traverse.
* @param int $depth Depth of current element.
* @param array $args An array of arguments.
* @param string $output Used to append additional content (passed by reference).
*/
public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
if (!$element) {
return;
}
$id_field = $this->db_fields['id'];
$id = $element->$id_field;
//display this element
if (is_array($args[0])) {
$args[0]['has_children'] = !empty($children_elements[$id]);
} elseif (is_object($args[0])) {
$args[0]->has_children = !empty($children_elements[$id]);
}
$cb_args = array_merge(array(&$output, $element, $depth), $args);
call_user_func_array(array(&$this, 'start_el'), $cb_args);
// descend only when the depth is right and there are childrens for this element
if (($max_depth == 0 || $max_depth > $depth + 1) && isset($children_elements[$id])) {
foreach ($children_elements[ $id ] as $child) {
if (!isset($newlevel)) {
$newlevel = true;
//start the child delimiter
$cb_args = array_merge(array(&$output, $depth), $args);
call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
}
$this->display_element($child, $children_elements, $max_depth, $depth + 1, $args, $output);
}
unset($children_elements[ $id ]);
}
if (isset($newlevel) && $newlevel) {
//end the child delimiter
$cb_args = array_merge(array(&$output, $depth), $args);
call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
}
//end this element
$cb_args = array_merge(array(&$output, $element, $depth), $args);
call_user_func_array(array(&$this, 'end_el'), $cb_args);
}
}