File: //home/globfdxw/www/wp-content/plugins/ubermenu/includes/menuitems/UberMenuItem.class.php
<?php
/**
* Parent Class
*/
abstract class UberMenuItem
{
protected $type = 'unknown'; //Item Type getType() default, dynamic_term, dynamic_post,
protected $ID = 0; //Menu Item ID getID()
protected $source_id = 0;
protected $output;
protected $item;
protected $depth;
protected $args;
// protected $id;
protected $walker;
protected $settings;
protected $submenu_advanced;
protected $submenu_tag = 'ul';
protected $submenu_classes = array();
protected $item_classes = array(0 => ''); //Put in an empty entry to mimic the custom class used by real items, for when we have a dummy item
protected $item_atts = array();
protected $auto_child = '';
protected $prev_auto_child = '';
protected $alter_structure = false;
protected $has_children = false;
protected $submenu_type = false;
protected $drop_sub = false;
protected $closable_sub = false;
protected $is_dummy = false;
protected $is_tab = false;
protected $predetermined_submenu_type = false;
//protected $branch_prefix = '';
/*
protected $detached = false;
protected $detached_submenu = false;
protected $parent_detached_context = 0;
protected $passed_content = '';
*/
function __construct(&$output, &$item, $depth = 0, &$args = array(), $id = 0, &$walker = null, $has_children = false)
{
$this->output = &$output;
$this->item = &$item;
$this->depth = $depth;
$this->args = &$args;
// $this->id = $id;
$this->walker = &$walker;
$this->has_children = $has_children;
$this->ID = $this->item->ID;
//up( $this->ID );
//Setup dummy
if (isset($this->item->is_dummy) && $this->item->is_dummy) {
$this->is_dummy = true;
}
// Setup Source ID
$this->source_id = $this->item->db_id;
if (isset($this->item->object) && ($this->item->object == 'ubermenu-custom')) {
//echo 'set source_id ' . $this->item->object_id;
$this->source_id = $this->item->object_id;
}
//Setup settings
$this->settings = $this->get_settings();
//New filter in 4.4 - 'nav_menu_item_args'
//Since this filter is most likely going to just break the menu, it is disabled by default, but can be enabled by adding
//define( 'UBERMENU_ALLOW_NAV_MENU_ITEM_ARGS_FILTER' , true );
//in the wp-config.php
if (UBERMENU_ALLOW_NAV_MENU_ITEM_ARGS_FILTER)
$this->args = apply_filters('nav_menu_item_args', $this->args, $this->item);
$this->init();
//$this->initialize_submenu();
//Only check if necessary (Advanced submenu set to auto)
if ($this->getSetting('submenu_advanced') == 'auto') {
if ($this->item->classes == null) {
//echo '<h3>[['.$this->item->title.']]</h3>';
//up( $this->item );
}
if (is_array($this->item->classes)) {
if (in_array('advanced-sub', $this->item->classes)) {
$this->submenu_advanced = true;
$this->submenu_tag = 'div';
}
}
} else if ($this->getSetting('submenu_advanced') == 'enabled') {
$this->submenu_advanced = true;
$this->submenu_tag = 'div';
}
}
/* Allows subclasses to hook in */
function init()
{
}
function get_item()
{
return $this->item;
}
function get_branch_prefix()
{
return $this->branch_prefix;
}
// function get_id(){
// return $this->ID;
// }
function getID()
{
return $this->ID;
}
function setID($id)
{
$this->ID = $id;
}
function set_source_id($id)
{
$this->source_id = $id;
}
function get_transient_key($prefix)
{
return 'ubertk_' . $prefix . $this->walker->unique_path_key($this->getID());
}
function get_depth()
{
return $this->depth;
}
function is_tab()
{
return $this->is_tab;
}
function display_on()
{
if ($this->getSetting('disable_on_mobile') == 'on') {
if (ubermenu_is_mobile('disable_on_mobile')) {
return false;
}
}
if ($this->getSetting('disable_on_desktop') == 'on') {
if (!ubermenu_is_mobile('disable_on_desktop')) {
return false;
}
}
return true;
}
function disable_children()
{
$this->has_children = false;
$_item = $this->item;
if (($key = array_search('menu-item-has-children', $_item->classes)) !== false) {
unset($_item->classes[$key]);
}
//Possibly remove menu item parent/menu item ancestor classes as well
}
function create_reference($source_id, &$children, $reference_index = '')
{
if ($reference_index == '') {
$reference_index = '_ref_' . $source_id;
}
if (!$this->walker->feed_trash_collector($reference_index)) {
if (isset($children[$source_id]) && !empty($children[$source_id])) {
$children[$reference_index] = $children[$source_id];
}
}
return $reference_index;
}
function replicate_children($new_parent_id, $source_parent_id, &$children, $id_prefix = '', $replicated_source_ids = [])
{
// uberp( "Replicate Children [new_parent_id: $new_parent_id] [source_parent_id: {$source_parent_id}] [id_prefix: {$id_prefix}]");
// Get the children to replicate
$sourcekids = $children[$source_parent_id];
$newkids = [];
foreach ($sourcekids as $sourcekid) {
// uberp( "replicated: $sourcekid->ID" );
$replicated_source_ids[] = $sourcekid->ID;
// uberp( "Replicate: $sourcekid->title");
$newkid = clone $sourcekid;
// $newkid->set_source_id($sourcekid->ID);
// uberp_details('Clone ' . $sourcekid->ID, $newkid);
// TODO check item type and don't override prefix for certain item types, like dynamics
// uberp( "Set ID {$id_prefix}__{$sourcekid->ID}");
// uberp( $sourcekid );
if ($id_prefix && !in_array($sourcekid->type_label, ['[UberMenu Dynamic Terms]', '[UberMenu Dynamic Posts]'])) {
$newkid->ID = "{$id_prefix}__{$sourcekid->ID}";
// $newkid->db_id = "{$id_prefix}__{$sourcekid->db_id}";
$newkid->duplicate = true;
}
// if( in_array( $sourcekid->type_label , ['[UberMenu Dynamic Terms]','[UberMenu Dynamic Posts]'] ) ){
// uberp($newkid->ID);
// $newkid->duplicate = true;
// }
// uberp( "Created $newkid->ID as child of $new_parent_id" );
$newkids[] = $newkid;
// If this child also had children, repeat
if (isset($children[$sourcekid->ID])) {
// uberp( "Recursive $sourcekid->ID" );
$ref_id = $this->create_reference($sourcekid->ID, $children);
// $children[$newkid->ID] =
$replicated_source_ids = $this->replicate_children($newkid->ID, $ref_id, $children, $newkid->ID, $replicated_source_ids);
}
// else{
// uberp( "No kids for $sourcekid->ID");
// }
}
$children[$new_parent_id] = $newkids;
return $replicated_source_ids;
}
// function prefix_child_ids( $prefix, $children ){
// uberp($children,2);
// $new = [];
// foreach( $children as $orginal_id => $child ){
// $new_id = "{$prefix}__{$original_id}";
// uberp('hi');
// $new[$new_id] = $child;
// }
// uberp($new);
// return $new;
// }
/* If this item models a term, return its ID */
function get_term_id()
{
return false;
}
/* If this item models a post, return its ID */
function get_post_id()
{
return false;
}
function dynamic_alter($tab_id, $source_id, $umitem, &$children)
{
return false;
}
function get_settings()
{
if (isset($this->settings))
return $this->settings;
$item_id = $this->source_id ? $this->source_id : $this->item->ID;
$settings = get_post_meta($item_id, UBERMENU_MENU_ITEM_META_KEY, true);
// if ($this->type === 'tabs') {
// uberp_details('get_settings ' . $this->source_id . '[Type: ' . $this->type . '][Item ID: ' . $item_id . ']', $settings);
// }
if (!$settings)
$settings = array();
//Allow dummy settings to override source item settings
if ($this->is_dummy && isset($this->item->settings)) {
if (!is_array($settings))
$settings = array();
foreach ($this->item->settings as $key => $val) {
$settings[$key] = $val;
}
}
$settings = apply_filters('ubermenu_item_settings', $settings, $this->ID);
return $settings;
}
function get_menu_op($op)
{
//Determine menu instance
//$instance = 'main'; //TODO
//$instance = $this->args[0]->uber_instance;
$instance = $this->get_config_id();
return ubermenu_op($op, $instance);
}
function get_config_id()
{
return $this->args->uber_instance;
}
function alter_structure()
{
return $this->alter_structure;
}
function alter(&$children)
{
}
function get_submenu_tag()
{
return $this->submenu_tag;
}
function pass_content($content)
{
$this->passed_content .= $content;
}
function getAutoChild()
{
return $this->auto_child;
}
function getType()
{
return $this->type;
}
function getSetting($key)
{
if (isset($this->settings[$key])) {
$val = $this->settings[$key];
} else { //} if( isset( $this->walker->setting_defaults[$key] ) ){
$val = $this->walker->setting_defaults[$key];
}
return $val;
}
//1
function start_el()
{
$this->output .= apply_filters('walker_nav_menu_start_el', $this->get_start_el(), $this->item, $this->depth, $this->args);
}
//4
function end_el()
{
$this->output .= $this->get_end_el();
}
//2
function start_lvl()
{
$this->output .= $this->get_submenu_wrap_start();
}
//3
function end_lvl()
{
$this->output .= $this->get_submenu_wrap_end();
}
//Detached content
function detach()
{
$this->detached_submenu = true;
$this->walker->detach($this->ID);
//echo 'detached ' . $this->ID . '<br/>';
}
function undetach()
{
$this->detached_submenu = false;
$this->walker->undetach();
}
function complete_detachment()
{
} //do nothing by default
abstract function get_start_el();
function get_end_el()
{
$item_output = "</li>"; //<!-- end ".$this->item->ID."-->\n";
return $item_output;
}
function get_submenu_type($submenu_type = false)
{
if (!$this->has_children)
return false;
//If already cached, don't reprocess
if ($this->submenu_type)
return $this->submenu_type;
//If not passed, grab setting
if (!$submenu_type)
$submenu_type = $this->getSetting('submenu_type');
//echo $this->item->title . ' : '. $submenu_type ." : $this->depth <br/>";
if ($submenu_type == 'auto') {
//$classes[] = 'ubermenu-submenu-type-auto';
//figure it out
if ($this->depth == 0) {
$submenu_type = 'mega';
} else if ($this->depth >= 1) {
$parent = $this->walker->parent_item();
if ($parent && $parent->type == 'row') {
$parent = $this->walker->grandparent_item();
}
//up( $parent );
//echo 'Parent of '.$this->item->title . ' is ' . $parent->getSetting( 'submenu_type_calc' ) .'<br/>';
$parent_submenu = $parent->getSetting('submenu_type_calc');
//echo ' -- ' .$this->item->title . ' : ' . $parent_submenu . '<br/>';
switch ($parent_submenu) {
case 'mega':
case 'block':
case 'tab-content-panel':
case 'toggles-content-panel':
$submenu_type = 'stack';
break;
case 'flyout':
$submenu_type = 'flyout';
break;
default:
//inherit parent
$submenu_type = $parent_submenu;
break;
}
}
}
$this->submenu_type = $submenu_type;
return $submenu_type;
}
function get_submenu_id()
{
return 'ubermenu-submenu-' . $this->getID();
}
function initialize_submenu()
{
//Standard WordPress Classes
$this->submenu_classes[] = 'ubermenu-submenu';
$this->submenu_classes[] = 'ubermenu-submenu-id-' . $this->item->ID;
//Submenu Type
$submenu_type = $this->getSetting('submenu_type');
if ($submenu_type == 'auto') {
$this->submenu_classes[] = 'ubermenu-submenu-type-auto';
$submenu_type = $this->get_submenu_type($submenu_type);
}
$submenu_type = apply_filters('ubermenu_submenu_type', $submenu_type, $this->item, $this->depth, $this->args);
$this->settings['submenu_type_calc'] = $submenu_type;
$this->submenu_classes[] = 'ubermenu-submenu-type-' . $submenu_type;
if (in_array($submenu_type, array('mega', 'flyout'))) {
$this->drop_sub = true;
$this->submenu_classes[] = 'ubermenu-submenu-drop';
}
if ($this->drop_sub || $submenu_type == 'tab-content-panel') {
$this->closable_sub = true;
}
$this->submenu_type = $submenu_type;
}
function predetermine_submenu_type()
{
if ($this->predetermined_submenu_type) {
return $this->predetermined_submenu_type;
}
$submenu_type = $this->getSetting('submenu_type');
if ($submenu_type == 'auto') {
$submenu_type = $this->get_submenu_type($submenu_type);
}
if (in_array($submenu_type, array('mega', 'flyout'))) {
$this->drop_sub = true;
}
if ($this->drop_sub || $submenu_type == 'tab-content-panel') {
$this->closable_sub = true;
}
$this->predetermined_submenu_type = $submenu_type;
}
function get_submenu_wrap_start()
{
$this->initialize_submenu();
$classes = $this->submenu_classes;
$submenu_type = $this->submenu_type;
//Mega menu submenu alignment
if ($submenu_type == 'mega') {
$classes[] = 'ubermenu-submenu-align-' . $this->getSetting('submenu_position');
} else if ($submenu_type == 'flyout') {
$classes[] = 'ubermenu-submenu-align-' . $this->getSetting('flyout_submenu_position');
}
//Menu menu submenu content alignment
$submenu_content_align = $this->getSetting('submenu_content_align');
if ($submenu_content_align && $submenu_content_align != 'default') {
$classes[] = 'ubermenu-submenu-content-align-' . $submenu_content_align;
}
//Autoclear
$submenu_col_default = $this->getSetting('submenu_column_default');
if ($this->getSetting('submenu_column_autoclear') == 'on' && $submenu_col_default != 'auto' && $submenu_col_default != 'natural') {
$classes[] = 'ubermenu-autoclear';
}
//Padding
if ($this->getSetting('submenu_padded') == 'on') {
$classes[] = 'ubermenu-submenu-padded';
}
//Background Image
if ($this->getSetting('submenu_background_image')) { //Not 'on', image URL
$classes[] = 'ubermenu-submenu-bkg-img';
}
//Submenu Grid
if ($this->getSetting('submenu_grid') == 'on') {
$classes[] = 'ubermenu-submenu-grid';
}
//Indent
if ($this->getSetting('submenu_indent') == 'on') {
$classes[] = 'ubermenu-submenu-indent';
}
//Retractors
$retractor_top = $this->closable_sub && ubermenu_display_retractors() && (ubermenu_op('display_retractor_top', $this->args->uber_instance) == 'on');
if ($retractor_top)
$classes[] = 'ubermenu-submenu-retractor-top';
//Close Button
$close_button = $this->closable_sub && (ubermenu_op('display_submenu_close_button', $this->args->uber_instance) == 'on');
if ($close_button) {
if ($retractor_top)
$classes[] = 'ubermenu-submenu-retractor-top-2';
else
$classes[] = 'ubermenu-submenu-retractor-top';
}
$class = 'class="' . implode(' ', $classes) . '"';
//Inline styles
$_styles = array();
//Explicit width (should be moved)
/*$submenu_width = $this->getSetting( 'submenu_width' );
if( $submenu_width != '' ){
if( is_numeric( $submenu_width ) ) $submenu_width.= 'px';
$_styles['width'] = $submenu_width;
}
*/
//Create inline styles string if necessary
$styles = '';
if (count($_styles) > 0) {
$styles .= 'style="';
foreach ($_styles as $property => $val) {
$styles .= "$property:$val;";
}
$styles .= '"';
}
$aria = '';
if (ubermenu_op('aria_hidden', 'general') == 'on') {
$this->predetermine_submenu_type();
if ($this->drop_sub) {
$aria = 'aria-hidden="true"';
}
}
//Add an ID we want to use aria-controls
$id = '';
if (ubermenu_op('aria_controls', 'general') == 'on') {
$id = 'id="' . $this->get_submenu_id() . '"';
}
$item_output = "<$this->submenu_tag $id $class $styles $aria>";
// $retractor_icon_tag = $this->get_menu_op( 'icon_tag' );
// if( !$retractor_icon_tag ) $retractor_icon_tag = 'i';
//Retractor Top
if ($retractor_top) {
$retractor_tag = $this->submenu_tag == 'ul' ? 'li' : 'div';
$retractor_label = ubermenu_op('retractor_label', $this->args->uber_instance);
if (!$retractor_label)
$retractor_label = __('Close', 'ubermenu');
$item_output .= '<' . $retractor_tag . ' class="ubermenu-retractor ubermenu-retractor-mobile">' . $this->get_close_icon_tag() . ' ' . $retractor_label . '</' . $retractor_tag . '>';
}
//Close button
if ($close_button) {
$retractor_tag = $this->submenu_tag == 'ul' ? 'li' : 'div';
$item_output .= '<' . $retractor_tag . ' class="ubermenu-retractor ubermenu-retractor-desktop">' . $this->get_close_icon_tag() . '</' . $retractor_tag . '>';
}
return $item_output;
}
function get_submenu_wrap_end()
{
$html = '';
//Footer Content
$footer_content = $this->getSetting('submenu_footer_content');
if ($footer_content) {
$fc_tag = 'li';
if ($this->submenu_tag != 'ul')
$fc_tag = 'div';
$html .= '<' . $fc_tag . ' class="ubermenu-submenu-footer ubermenu-submenu-footer-id-' . $this->ID . '">' . $footer_content . '</' . $fc_tag . '>';
}
//'tab-content-panel'
//Retractor Bottom
if ($this->closable_sub && ubermenu_display_retractors() && (ubermenu_op('display_retractor_bottom', $this->args->uber_instance) == 'on')) {
$retractor_tag = $this->submenu_tag == 'ul' ? 'li' : 'div';
$retractor_label = ubermenu_op('retractor_label', $this->args->uber_instance);
if (!$retractor_label)
$retractor_label = __('Close', 'ubermenu');
$html .= '<' . $retractor_tag . ' class="ubermenu-retractor ubermenu-retractor-mobile">' . $this->get_close_icon_tag() . ' ' . $retractor_label . '</' . $retractor_tag . '>';
}
$html .= "</$this->submenu_tag>";
return $html;
}
function get_close_icon_tag()
{
if (ubermenu_op('use_core_svgs', 'general') === 'on') {
return ubermenu_get_essential_icon('times');
} else {
$retractor_icon_tag = $this->get_menu_op('icon_tag');
if (!$retractor_icon_tag)
$retractor_icon_tag = 'i';
return '<' . $retractor_icon_tag . ' class="fas fa-times"></' . $retractor_icon_tag . '>';
}
}
function getVirtualDepth()
{
return $this->depth;
}
function add_class_item_defaults()
{
//$this->item_classes = empty( $this->item->classes ) ? array() : (array) $this->item->classes;
if (is_array($this->item->classes)) {
$this->item_classes = array_merge($this->item_classes, $this->item->classes);
//Disable Current Menu Item Classes (do this first for efficiency)
if (
($this->getSetting('disable_current') == 'on') ||
(ubermenu_op('scrollto_disable_current', 'general') !== 'off' && $this->getSetting('scrollto'))
) {
$remove_current = array('current-menu-item', 'current-menu-parent', 'current-menu-ancestor');
foreach ($this->item_classes as $k => $c) {
if (in_array($c, $remove_current)) {
unset($this->item_classes[$k]);
}
}
$this->item_classes[] = 'nocurrent';
}
}
}
function add_class_id()
{
$this->item_classes[] = 'menu-item-' . $this->item->ID;
}
function prefix_classes()
{
//uberp( $this->item_classes );
//if( $this->type == 'tabs' ) uberp( $this->item_classes );
$k = 0;
$found = false;
foreach ($this->item_classes as $i => $class) {
//if( $class == 'menu-item' ) $classes[$i] = 'ubermenu-item';
//The first class is custom, so ignore it
//if( $k == 0 ){ $k++; continue; }
//menu-item marks the first class we want to preix, so ignore everything before that
if (!$found && $class == 'menu-item')
$found = true;
if (!$found)
continue;
if ($class) {
if (substr($class, 0, 4) == 'menu') {
$this->item_classes[$i] = 'uber' . $class;
} else
$this->item_classes[$i] = 'ubermenu-' . $class;
//add to end if using both
}
}
}
function add_class_item_display()
{
$this->settings['item_display_calc'] = '';
//Item Display
if ($this->depth > 0) {
$item_display = $this->getSetting('item_display');
$this->item_classes[] = 'ubermenu-item-' . $item_display;
//Determine auto
if ($item_display == 'auto') {
$parent_type = $this->walker->parent_item()->getType();
switch ($parent_type) {
//For items inside a content panel, act like a mega sub
case 'toggle_content_panel':
$item_display = 'header';
break;
//For terms inside a content panel, look to the grandparent
case 'dynamic_posts':
case 'dynamic_terms':
if ($this->walker->grandparent_item()) {
if ($this->walker->grandparent_item()->getType() == 'toggle_content_panel') {
$item_display = 'header';
}
//echo '//'.$this->walker->grandparent_item()->getType().'//<br/>';
}
break;
//case 'column':
// $item_display = 'normal';
// break;
}
//Still auto?
if ($item_display == 'auto') {
$in_sub = $this->walker->parent_item()->getSetting('submenu_type_calc');
switch ($in_sub) {
case 'mega':
if ($this->depth == 1) {
$item_display = 'header';
} else if ($this->depth > 1 && $this->walker->parent_item()->getVirtualDepth() == 1) {
$item_display = 'header';
} else if ($this->walker->parent_item()->getType() == 'row') {
$item_display = 'header';
} else if (
$this->walker->parent_item()->getType() == 'menu_segment' &&
$this->walker->grandparent_item()->getType() == 'row'
) {
$item_display = 'header';
} else if ($this->depth > 1 && $this->walker->grandparent_item()->getSetting('submenu_type_calc') == 'flyout') {
$item_display = 'header';
} else {
//For items that are in the submenu but yet undetermined
if ($this->depth > 1) {
//If it's parent wasn't a header, but the sub of the parent was a mega, this should probably be a header
if ($this->walker->parent_item()->getSetting('item_display_calc') != 'header') {
$item_display = 'header';
}
} else
$item_display = 'normal';
}
break;
case 'flyout':
$item_display = 'normal';
break;
case 'stack':
$item_display = 'normal';
break;
case 'block':
$item_display = 'header';
break;
case 'tabs-group':
case 'toggles-group':
//Ignore, use 'ubermenu-toggle' instead
$item_display = '';
break;
case 'tab-content-panel':
case 'toggles-content-panel':
$item_display = 'header';
break;
/*
case 'dynamic-terms':
$item_display = 'header';
break;*/
default:
$item_display = 'unknown-[' . $in_sub . ']';
break;
}
}
if ($item_display) {
$this->item_classes[] = 'ubermenu-item-' . $item_display;
// $this->settings['item_display_calc'] = $item_display;
}
}
$this->settings['item_display_calc'] = $item_display;
}
}
function add_class_level()
{
$this->item_classes[] = 'ubermenu-item-level-' . $this->getVirtualDepth(); //$this->depth;
}
function get_inherited_submenu_column_default()
{
return $this->walker->parent_item()->getSetting('submenu_column_default');
}
function add_class_layout_columns()
{
if ($this->depth > 0) {
$parent_submenu_type = $this->walker->parent_item()->getSetting('submenu_type_calc');
if ($parent_submenu_type == 'flyout')
return; //no columns in flyouts
}
//if( $this->depth > 1 ){
$cols = $this->getSetting('columns');
if ($this->depth > 0) {
//Widgets are full width if Columns set to Auto
if (
($this->getSetting('widget_area') || $this->getSetting('auto_widget_area'))
&& $cols == 'auto'
) {
$cols = 'full';
}
//If set to auto, apply submenu column default from parent item
else if ($cols == 'auto') {
$cols = $this->get_inherited_submenu_column_default();
//if( $parent )
// if( $this->ID === '1025-term-23' ) uberp( $this->walker->parent_item() ); //uberp( "cols: $cols" );
}
}
$this->item_classes[] = 'ubermenu-column ubermenu-column-' . $cols;
//New Row
if ($this->getSetting('clear_row') == 'on') {
$this->item_classes[] = 'ubermenu-clear-row';
}
//if( $this->walker->parent_item()->getSetting)
}
function add_class_alignment()
{
$align = $this->getSetting('item_align');
if ($align && $align != 'auto') {
$this->item_classes[] = 'ubermenu-align-' . $align;
}
}
function add_class_mini_item()
{
if ($this->getSetting('mini_item') == 'on') {
$this->item_classes[] = 'ubermenu-item-mini';
}
}
function add_class_rtl_sub()
{
if (($this->get_submenu_type() == 'mega') && ($this->getSetting('submenu_position') == 'right_edge_item')) {
$this->item_classes[] = 'ubermenu-submenu-rtl';
} else if ($this->depth >= 1 && ($this->get_submenu_type() == 'mega') && ($this->getSetting('submenu_position') == 'left_edge_item')) {
$this->item_classes[] = 'ubermenu-submenu-flyout-mega-left'; //special flag in case flyout > mega goes left
} else if (($this->get_submenu_type() == 'flyout') && ($this->getSetting('flyout_submenu_position') == 'right_edge_item')) {
$this->item_classes[] = 'ubermenu-submenu-rtl';
$this->item_classes[] = 'ubermenu-submenu-reverse';
}
}
function add_class_responsive()
{
if ($this->getSetting('hide_on_mobile') == 'on') {
$this->item_classes[] = 'ubermenu-hide-mobile';
}
if ($this->getSetting('hide_on_desktop') == 'on') {
$this->item_classes[] = 'ubermenu-hide-desktop';
}
}
function add_class_submenu()
{
$submenu_type = $this->get_submenu_type();
if ($submenu_type) {
if (in_array($submenu_type, array('mega', 'flyout'))) {
$this->item_classes[] = 'ubermenu-has-submenu-drop';
//Show current
if (
($this->getSetting('show_current') == 'on') &&
(in_array('ubermenu-current-menu-ancestor', $this->item_classes) ||
in_array('ubermenu-current-menu-item', $this->item_classes)
)
) {
$this->item_classes[] = 'ubermenu-active';
}
//Show Default
if ($this->getSetting('show_default') == 'on') {
$this->item_classes[] = 'ubermenu-active';
}
}
$this->item_classes[] = 'ubermenu-has-submenu-' . $submenu_type;
}
if (
($this->getSetting('submenu_position') == 'vertical_parent_item') ||
($this->getSetting('flyout_submenu_position') == 'vertical_parent_item')
) {
$this->item_classes[] = 'ubermenu-relative';
}
if ($submenu_type == 'flyout' && $this->getSetting('flyout_submenu_position') == 'vertical_full_height') {
$this->item_classes[] = 'ubermenu-flyout-full-height';
}
}
function add_class_disable_padding()
{
$disable_padding = $this->getSetting('disable_padding');
if ($disable_padding == 'on') {
$this->item_classes[] = 'ubermenu-disable-padding';
}
}
function filter_item_classes()
{
/**
* Filter the CSS class(es) applied to a menu item's <li>.
*
* @since 3.0.0
*
* @param array $classes The CSS classes that are applied to the menu item's <li>.
* @param object $item The current menu item.
* @param array $args An array of arguments. @see wp_nav_menu()
*/
$class_names = join(' ', apply_filters('nav_menu_css_class', array_filter($this->item_classes), $this->item, $this->args, $this->depth));
$class_names = $class_names ? ' class="' . esc_attr($class_names) . '"' : '';
return $class_names;
}
function filter_item_id()
{
/**
* Filter the ID applied to a menu item's <li>.
*
* @since 3.0.1
*
* @param string The ID that is applied to the menu item's <li>.
* @param object $item The current menu item.
* @param array $args An array of arguments. @see wp_nav_menu()
*/
$id = apply_filters('nav_menu_item_id', 'menu-item-' . $this->item->ID, $this->item, $this->args, $this->depth);
$id = $id ? ' id="' . esc_attr($id) . '"' : '';
return $id;
}
function filter_item_atts()
{
return apply_filters('ubermenu_item_atts', $this->item_atts, $this->item->ID, $this->item, $this->args, $this->depth);
}
function setup_trigger()
{
$trigger = $this->getSetting('item_trigger');
if ($trigger && $trigger != 'auto') {
$this->item_atts['data-ubermenu-trigger'] = $trigger;
}
}
function get_url()
{
return $this->item->url;
}
function set_url($url)
{
$this->item->url = $url;
}
/**
* Get the attributes for the anchor, including class, title, target, rel, href
* Filterable with 'nav_menu_link_attributes'
* @return array An array of attributes with attribute names as keys and attribute values as values i.e. $key="$val"
*/
function anchor_atts()
{
$atts = array();
$atts['class'] = 'ubermenu-target'; //add UberMenu specific meta
$atts['title'] = !empty($this->item->attr_title) ? $this->item->attr_title : '';
$atts['target'] = !empty($this->item->target) ? $this->item->target : '';
$atts['rel'] = !empty($this->item->xfn) ? $this->item->xfn : '';
$atts['href'] = !empty($this->item->url) ? $this->item->url : '';
if ($this->depth == 0) {
$atts['tabindex'] = 0;
}
/**
* Filter the HTML attributes applied to a menu item's <a>.
*
* @since 3.6.0
*
* @param array $atts {
* The HTML attributes applied to the menu item's <a>, empty strings are ignored.
*
* @type string $title The title attribute.
* @type string $target The target attribute.
* @type string $rel The rel attribute.
* @type string $href The href attribute.
* }
* @param object $item The current menu item.
* @param array $args An array of arguments. @see wp_nav_menu()
*/
$atts = apply_filters('nav_menu_link_attributes', $atts, $this->item, $this->args, $this->depth);
return $atts;
}
/**
* Get the Anchor and its contents
* @param array $atts An array of attributes to add to the anchor
* @return string The HTML for the anchor
*/
function get_anchor($atts)
{
if ($this->item->title == '--divide--') {
return '<div class="ubermenu-divider"><hr/></div>';
}
$a = '';
$tag = 'a';
$parent_item = false;
if ($this->depth >= 1)
$parent_item = $this->walker->parent_item();
//Highlight
if ($this->getSetting('highlight') == 'on') {
$atts['class'] .= ' ubermenu-highlight';
}
//Image
$image = $this->get_image();
if ($image)
$atts['class'] .= ' ubermenu-target-with-image';
//Icon
$icon = '';
$icon_val = $this->getSetting('icon'); // may be the classes for FA, or a group_id::icon_id identifier
// New system {group_id}::{icon_id}
if (strpos($icon_val, '::')) {
$atts['class'] .= ' ubermenu-target-with-icon';
$icon_classes = apply_filters('ubermenu_icon_custom_class', '', $this->ID, isset($this->settings['icon_custom_class']) ? $this->settings['icon_custom_class'] : ''); // icon_custom_class Setting is from icons extension
$icon_atts = ['class' => $icon_classes];
//Accessibility
$icon_title = $this->getSetting('icon_title');
if ($icon_title) {
$icon_atts['title'] = $icon_title;
}
$icon = ubermenu_generate_icon_markup($icon_val, $icon_atts);
}
// Old FA5
else {
if ($icon_val)
$icon_val = ubermenu_fa5_convert($icon_val, true); // Convert FA4 to FA5 if needed
// uberp( $this->ID .'::'. $icon_val );
$icon_classes = apply_filters('ubermenu_icon_custom_class', $icon_val, $this->ID, isset($this->settings['icon_custom_class']) ? $this->settings['icon_custom_class'] : ''); // icon_custom_class Setting is from icons extension
if ($icon_classes) {
$atts['class'] .= ' ubermenu-target-with-icon';
$icon_tag = $this->get_menu_op('icon_tag');
if (!$icon_tag)
$icon_tag = 'i';
//Accessibility
$aria = '';
$icon_title = $this->getSetting('icon_title');
if ($icon_title) {
$icon_title = ' title="' . $icon_title . '"';
//Font Awesome JS takes care of aria hidden if there's a title
} else if (ubermenu_op('aria_hidden_icons', 'general') == 'on') { //TODO deprecate
$aria = 'aria-hidden="true"';
}
$icon = '<' . $icon_tag . ' class="ubermenu-icon ' . $icon_classes . '" ' . $aria . $icon_title . '></' . $icon_tag . '>';
}
}
//Layout
$layout = $this->getSetting('item_layout');
//If there is no image, don't allow image layout
if (!$image && (0 === strpos($layout, 'image')))
$layout = 'default';
$atts['class'] .= ' ubermenu-item-layout-' . $layout;
//Content Align
$content_align = $this->getSetting('content_alignment');
//Check inherit from parent
if ($content_align == 'default') {
//if( $this->id == 604 ) echo $this->item->title;
//if( $parent_item && $parent_item->getType() == 'menu_segment' ) echo '<br/>['.$parent_item->getType();
if ($this->depth >= 1 && $submenu_item_content_alignment = $parent_item->getSetting('submenu_item_content_alignment')) {
if ($submenu_item_content_alignment !== 'default') {
$content_align = $submenu_item_content_alignment;
}
}
//if( $parent_item && $parent_item->getType() == 'menu_segment' ) echo ']';
}
//If a content alignment has been set on this item or the parent, set the class
if ($content_align != 'default') {
$atts['class'] .= ' ubermenu-content-align-' . $content_align;
}
if ($layout == 'default') {
//If the layout for the individual item is set to default, and this is a child item, check the parent item's setting
if ($this->depth >= 1 && $submenu_item_layout = $parent_item->getSetting('submenu_item_layout')) {
if ($submenu_item_layout !== 'default') {
$layout = $submenu_item_layout;
}
}
//If the layout hasn't been determined yet, and we're using an image, check to see if there's a default image layout
if ($layout == 'default' && $image) {
$layout = $this->get_menu_op('image_layout_default');
if (!$layout)
$layout = 'image_left';
}
//If there's an icon, use the default icon layout
else if ($icon) {
if (function_exists('ubermenu_icon_layout_default')) {
$layout = ubermenu_icon_layout_default($this);
} else
$layout = 'icon_left';
}
//If nothing else has claimed it, we default to text_only
else if ($layout == 'default') {
$layout = 'text_only';
}
$atts['class'] .= ' ubermenu-item-layout-' . $layout;
}
$layout_order = ubermenu_get_item_layouts($layout);
if (!$layout_order) {
ubermenu_admin_notice(__('Unknown layout order:', 'ubermenu') . ' ' . $layout . ' [' . $this->item->title . '] (' . $this->ID . ')');
}
//No wrap
if ($this->getSetting('no_wrap') == 'on') {
$atts['class'] .= ' ubermenu-target-nowrap';
}
//Disabled Link (change tag)
$disable_link = false;
if ($this->getSetting('disable_link') == 'on') {
$tag = 'span';
$disable_link = true;
unset($atts['href']);
}
//Disable Submenu Indicator
$disable_submenu_indicator = false;
if ($this->getSetting('disable_submenu_indicator') == 'on') {
$disable_submenu_indicator = true;
$atts['class'] .= ' ubermenu-noindicator';
}
//Global Submenu Indicators
// $display_submenu_indicators = $this->get_menu_op('display_submenu_indicators') === 'on' ? true : false; /// moved to own function
//ScrollTo
$scrollTo = $this->getSetting('scrollto');
if ($scrollTo) {
$atts['data-ubermenu-scrolltarget'] = $scrollTo;
}
//Target ID
$target_id = $this->getSetting('target_id');
if ($target_id) {
$atts['id'] = $target_id;
}
//Target Class
$target_class = $this->getSetting('target_class');
if ($target_class) {
$atts['class'] .= ' ' . $target_class;
}
//Note: anchor atts used to be here
//Title
$title = '';
if ($this->getSetting('disable_text') == 'off') {
$_title = $this->item->title;
if ($this->get_menu_op('allow_shortcodes_in_labels') == 'on') {
$_title = do_shortcode($_title);
}
$title .= '<span class="ubermenu-target-title ubermenu-target-text">';
$title .= apply_filters('the_title', $_title, $this->item->ID);
//$title .= $_title;
$title .= '</span>';
} else {
//Flag items with disabled text
$atts['class'] .= ' ubermenu-item-notext';
}
//Description
$description = '';
//if( $this->getSetting( 'disable_text' ) == 'off' ){
if ($this->item->description) {
if (
(($this->depth == 0) && ($this->get_menu_op('descriptions_top_level') == 'on')) ||
(($this->depth > 0) && ($this->getSetting('item_display_calc') == 'header') && ($this->get_menu_op('descriptions_headers') == 'on')) ||
(($this->depth > 0) && ($this->getSetting('item_display_calc') == 'normal') && ($this->get_menu_op('descriptions_normal') == 'on')) ||
(($this->depth > 0) && ($this->type == 'tab') && $this->get_menu_op('descriptions_tab') == 'on')
) {
$_desc = $this->item->description;
if ($this->get_menu_op('allow_shortcodes_in_labels') == 'on') {
$_desc = do_shortcode($_desc);
}
//Divider
$divider = $this->get_menu_op('target_divider');
if ($title && $divider)
$description .= '<span class="ubermenu-target-divider">' . $divider . '</span>';
$description .= '<span class="ubermenu-target-description ubermenu-target-text">';
$description .= $_desc;
$description .= '</span>';
}
}
//ARIA controls
//$title = $title . ( $this->drop_sub ? 'drop' : 'nodrop' );
if ($this->has_children && ubermenu_op('aria_controls', 'general') == 'on') {
$atts['aria-controls'] = $this->get_submenu_id();
}
//ShiftNav Toggle
if ($this->getSetting('shiftnav_target')) {
$atts['data-shiftnav-target'] = $this->getSetting('shiftnav_target');
$atts['class'] .= ' shiftnav-toggle';
}
//Filter attributes
$atts = apply_filters('ubermenu_anchor_attributes', $atts, $this->item->type, $this->ID /* Menu Item ID */ , $this->item->object /* object type */ , $this->item->object_id /* Post ID */);
//Anchor Attributes
$attributes = '';
foreach ($atts as $attr => $value) {
if (!empty($value) || $value === 0) {
$value = ('href' === $attr) ? esc_url($value) : esc_attr($value);
if ($attr === 'href' && ($custom_url = $this->getSetting('custom_url'))) {
$value = do_shortcode($custom_url);
}
$attributes .= ' ' . $attr . '="' . $value . '"';
}
}
//Check if we still have something to print
if (!$title && !$description && !$image && !$icon) {
return '';
}
//Build the Layout
//Get custom pieces
$custom_pieces = array();
extract(apply_filters('ubermenu_custom_item_layout_data', $custom_pieces, $layout, $this->ID, $this->item->object_id));
//Gather all the pieces in the layout order into an array
$layout_pieces = compact($layout_order);
//Output the anchor
if (isset($this->args->before))
$a .= $this->args->before;
$a .= '<' . $tag . $attributes . '>';
if (isset($this->args->link_before))
$a .= $this->args->link_before;
//Add pieces based on layout order
foreach ($layout_pieces as $piece) {
$a .= $piece;
}
// Badge
$badge = $this->get_badge();
if ($badge) {
$a .= $badge;
}
//Submenu indicator
$a .= $this->get_submenu_indicator($disable_submenu_indicator);
//Display mobile close toggle - do in JS?
// if( in_array( $submenu_type , array( 'mega' , 'flyout' , 'tab-content-panel' ) ) ){
// $a.= '<span class="ubermenu-sub-indicator-close"><i class="fas fa-times"></i></span>';
// }
if (isset($this->args->link_after))
$a .= $this->args->link_after;
$a .= '</' . $tag . '>';
if (isset($this->args->after))
$a .= $this->args->after;
return $a;
}
function get_submenu_indicator($disable_submenu_indicator)
{
$html = '';
$submenu_type = $this->get_submenu_type();
$display_submenu_indicators = $this->get_menu_op('display_submenu_indicators') === 'on' ? true : false;
if ($display_submenu_indicators && !$disable_submenu_indicator && $submenu_type && in_array($submenu_type, array('mega', 'flyout', 'tab-content-panel'))) {
if (ubermenu_op('use_core_svgs', 'general') === 'on') {
$html .= '<span class="ubermenu-sub-indicator">' . ubermenu_get_essential_icon('angle') . '</span>';
} else {
$indicator_tag = $this->get_menu_op('icon_tag');
if (!$indicator_tag)
$indicator_tag = 'i';
$html .= "<$indicator_tag class='ubermenu-sub-indicator fas fa-angle-down'></$indicator_tag>";
}
}
return $html;
}
/**
* Get the HTML for the image attached to this menu item
*
* Any set img ID will override image src filtering
*
* @return string img HTML
*/
function get_image()
{
//Ignore mobile?
if (($this->get_menu_op('disable_images_mobile') == 'on') && ubermenu_is_mobile('disable_images_mobile')) {
return '';
}
//Image
$img = apply_filters('ubermenu_item_image', '', $this);
if ($img)
return $img;
//Allow ID filtering
$img_id = apply_filters('ubermenu_item_image_id', $this->getSetting('item_image'), $this);
//Allow src filtering
$img_src = apply_filters('ubermenu_item_image_src', '', $this);
$thumb_id = false;
//Inherit featured image dynamically
if ($this->getSetting('inherit_featured_image') == 'on') {
// Posts
if ($this->item->type == 'post_type') {
$thumb_id = get_post_thumbnail_id($this->item->object_id);
}
// WooCommerce Product Category Images
else if ($this->item->type === 'taxonomy' && $this->item->object === 'product_cat') { //'$this->ID == 854 ){
$thumb_id = ubermenu_get_woocommerce_product_category_image_id($this->item->object_id);
}
// Dynamic Terms - WooCommerce Product Category Images
else if ($this->item->type === 'custom' && $this->item->custom_type === 'dynamic_term_item') {
if ($this->term)
$thumb_id = ubermenu_get_woocommerce_product_category_image_id($this->term->term_id);
}
if ($thumb_id)
$img_id = $thumb_id;
}
if ($img_id || $img_src) {
$atts = array();
$img_srcset = $img_sizes = '';
$atts['class'] = 'ubermenu-image';
//Determine size of image to get
$img_size = $this->getSetting('image_size');
if ($img_size == 'inherit') {
$img_size = $this->get_menu_op('image_size');
}
//echo '['.$img_size.']';
$atts['class'] .= ' ubermenu-image-size-' . $img_size;
//If the img_id is set, get the right image src file
if ($img_id) {
$img_src = wp_get_attachment_image_src($img_id, $img_size);
// If this image ID isn't valid, the above function returns false.
// In that case, bail and just return a string saying this image is invalid
if ($img_src === false) {
return "<!-- Image ID [$img_id] invalid -->";
}
if (function_exists('wp_get_attachment_image_srcset')) {
$img_srcset = wp_get_attachment_image_srcset($img_id, $img_size);
$img_sizes = wp_get_attachment_image_sizes($img_id, $img_size);
}
}
//Lazy Load
if ($this->depth > 0 && $this->get_menu_op('lazy_load_images') == 'on') {
$atts['class'] .= ' ubermenu-image-lazyload';
$atts['data-src'] = $img_src[0];
if ($img_srcset) {
$atts['data-srcset'] = $img_srcset;
if ($img_sizes)
$atts['data-sizes'] = $img_sizes;
}
}
//Normal Load
else {
$atts['src'] = $img_src[0];
if ($img_srcset) {
$atts['srcset'] = $img_srcset;
if ($img_sizes)
$atts['sizes'] = $img_sizes;
}
}
//Determine dimensions
$img_w = '';
$img_h = '';
$dimensions = $this->getSetting('image_dimensions');
switch ($dimensions) {
//Custom Dimensions use Menu Item Settings
case 'custom':
$img_w = $this->getSetting('image_width_custom');
$img_h = $this->getSetting('image_height_custom');
break;
//Inherit settings from main Menu Settings
case 'inherit':
$img_w = $this->get_menu_op('image_width');
$img_h = $this->get_menu_op('image_height');
break;
//Add width and height atts for natural width
case 'natural':
//Done below
break;
default:
break;
}
//Apply natural dimensions if not already set
if ($this->get_menu_op('image_set_dimensions')) {
if ($img_w == '' && $img_h == '') {
$img_w = $img_src[1];
$img_h = $img_src[2];
}
}
//Add dimensions as attributes, with pixel units if missing
if ($img_w) {
//if( is_numeric( $img_w ) ) $img_w.='px'; //Should always be numeric only, no units
$atts['width'] = $img_w;
}
if ($img_h) {
//if( is_numeric( $img_h ) ) $img_h.='px'; //Should always be numeric only, no units
$atts['height'] = $img_h;
}
//Add 'alt' & 'title'
if ($img_id) {
$meta = get_post_custom($img_id);
$alt = isset($meta['_wp_attachment_image_alt']) ? $meta['_wp_attachment_image_alt'][0] : ''; //Alt field
$title = '';
if ($alt == '' && $this->get_menu_op('image_alt_autofill') == 'on') {
$title = get_the_title($img_id);
$alt = $title;
}
$atts['alt'] = $alt;
if ($this->get_menu_op('image_title_attribute') == 'on') {
if ($title == '')
$title = get_the_title($img_id);
$atts['title'] = $title;
}
}
//Build attributes string
$atts = apply_filters('ubermenu_item_image_attributes', $atts, $this);
$attributes = '';
foreach ($atts as $name => $val) {
$attributes .= $name . '="' . esc_attr($val) . '" ';
}
$img = "<img $attributes />";
//$img = "<span class='ubermenu-image'><img $attributes /></span>";
}
return $img;
}
function get_custom_content()
{
$html = '';
$custom_content = $this->getSetting('custom_content');
if ($custom_content) {
if (ubermenu_op('disable_custom_content', 'general') === 'on') {
return "<!-- Custom Content Areas currently disabled $this->ID -->";
}
//Pad the custom content wrapper?
$pad_custom_content = $this->getSetting('pad_custom_content') == 'on' ? ' ubermenu-custom-content-padded' : '';
//Add a custom class to the custom content wrapper?
$custom_class = $this->getSetting('custom_content_class');
if ($custom_class)
$custom_class = ' ' . sanitize_html_class($custom_class);
$html .= '<div class="ubermenu-content-block ubermenu-custom-content' . $pad_custom_content . $custom_class . '">';
$html .= do_shortcode($custom_content);
$html .= '</div>';
}
return $html;
}
function get_badge()
{
$html = '';
$badge_content = apply_filters('ubermenu_badge_content', $this->getSetting('badge_content'), $this->ID, $this->item);
if ($badge_content) {
$atts = array(
'class' => ubermenu_classNames(
array(
'ubermenu-badge' => true,
'ubermenu-badge-' . $this->getSetting('badge_position') => true,
)
)
);
$html .= '<span ' . ubermenu_html_atts($atts) . '>' . do_shortcode($badge_content) . '</span>';
}
return $html;
}
function get_widget_area()
{
$html = '';
$widget_area_id = $this->getSetting('widget_area');
if ($this->getSetting('auto_widget_area')) {
if (ubermenu_op('disable_widget_areas', 'general') === 'on') {
return "<!-- Widget Areas currently disabled $this->ID -->";
}
$custom_area_id = 'umitem_' . $this->ID;
if (is_active_sidebar($custom_area_id)) {
$widget_area_id = $custom_area_id;
} else {
$notice = __('The widget area is empty.', 'ubermenu');
$notice .= ' <a target="_blank" href="' . admin_url('widgets.php') . '">' . __('Assign a widget', 'ubermenu') . '</a>';
global $wp_registered_sidebars;
if (isset($wp_registered_sidebars[$custom_area_id])) {
$sidebar = $wp_registered_sidebars[$custom_area_id];
$notice .= ' to <strong>' . $sidebar['name'] . '</strong>';
}
$html .= ubermenu_admin_notice($notice, false);
return $html;
}
}
//If this is a top level widget and that setting is not enabled, show an admin message
if ($this->depth == 0 && $widget_area_id && ubermenu_op('allow_top_level_widgets', 'general') != 'on') {
$msg = '<strong>[Menu Item: ' . $this->item->title . ']</strong> ' . __('You have assigned a widget area to a top level menu item. If you want the widget to appear in a submenu, please attach it to a child menu item. If you want the widget to appear in the menu bar (always visible), please enable the setting in the UberMenu Control Panel > General Settings > Widgets > Allow Top Level Widgets', 'ubermenu');
ubermenu_admin_notice($msg, true); //Deliberately printed BEFORE the menu rather than within it because the message is so long.
//$html.= ubermenu_admin_notice( $msg , true );
return $html;
}
if ($widget_area_id && is_active_sidebar($widget_area_id)) {
global $wp_registered_sidebars;
global $wp_registered_widgets;
//global $_wp_sidebars_widgets;
$sidebars_widgets = wp_get_sidebars_widgets();
$num_widgets = count($sidebars_widgets[$widget_area_id]);
//Evenly divided
$cols = 'ubermenu-column-1-' . $num_widgets;
if ($num_widgets == 1) {
$cols = 'ubermenu-column-full';
}
//If col number is set
$widget_area_columns = $this->getSetting('widget_area_columns');
if (is_numeric($widget_area_columns)) {
if ($widget_area_columns == 1) {
$cols = 'ubermenu-column-full';
} else
$cols = 'ubermenu-column-1-' . $widget_area_columns;
}
foreach ($sidebars_widgets[$widget_area_id] as $widget_id) {
if (isset($wp_registered_widgets[$widget_id])) {
$wp_registered_widgets[$widget_id]['classname'] .= ' ' . $cols;
}
}
//ob_flush();
ob_start();
dynamic_sidebar($widget_area_id);
$widget_area = ob_get_contents();
//$widget_area = ob_get_clean(); //ob_get_contents();
ob_end_clean();
$html .= '<ul class="ubermenu-content-block ubermenu-widget-area ubermenu-autoclear">'; //ubermenu-row
$html .= $widget_area;
$html .= '</ul>';
}
//No widgets
else if ($widget_area_id) {
global $wp_registered_sidebars;
$notice = __('The widget area is empty. ', 'ubermenu');
$notice .= '<a target="_blank" href="' . admin_url('widgets.php') . '">' . __('Assign a widget', 'ubermenu') . '</a>';
if (isset($wp_registered_sidebars[$widget_area_id])) {
$sidebar = $wp_registered_sidebars[$widget_area_id];
$notice .= ' to <strong>' . $sidebar['name'] . '</strong>';
}
$html .= ubermenu_admin_notice($notice, false);
return $html;
} else {
//Nothing assigned - fine if a normal menu item, but if this is a Widget Area menu item, stop the presses.
if ($this->type == 'widget_area') {
$notice = __('Please enter a name for your Custom Widget Area, or assign a Reusable Widget Area to this menu item.', 'ubermenu');
$notice .= ' <strong>Item ID: ' . $this->ID . ' ' . $this->item->title . '</strong>';
$html .= ubermenu_admin_notice($notice, false);
}
}
return $html;
}
}
/* A Horizontal Rule */
class UberMenuItemDivider extends UberMenuItem
{
function get_start_el()
{
return '<li class="ubermenu-divider"><hr/>';
}
}