PageRenderTime 26ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/blog/wp-content/plugins/menubar-widgets/inc/walker_menubar_start_el.php

https://gitlab.com/relacilia/cakra
PHP | 112 lines | 68 code | 17 blank | 27 comment | 11 complexity | acb899a523e3de360836fe3644e3fb4e MD5 | raw file
  1. <?php
  2. function walker_menubar_start_el( $item_output, $item, $depth, $args ){
  3. global $wp_registered_widgets, $wp_registered_sidebars;
  4. $icon_classes = array_map(function( $css ){
  5. $is_math = preg_match("|(menu-item[a-z-_0-9]*)+|i", $css, $mathes );
  6. if( !$is_math ){
  7. return $css;
  8. }
  9. }, (array) $item->classes );
  10. $icon_classes = implode(" ", array_unique( $icon_classes ) );
  11. $menu_icon = "<i class='{$icon_classes}'></i>";
  12. # Template %%menu_icon%% for add '<i class="custom-css-classes" ></i>' to navigation menu .
  13. # eg: wp_nav_menu(array('link_before' => '%%menu_icon%%')); ===output==> <li><a href="url"><i class="fa fa-facebook-square"></i>Facebook</a></li>
  14. # or: wp_nav_menu(array('link_after' => '%%menu_icon%%')); ===output==> <li><a href="url">Facebook<i class="fa fa-facebook-square"></i></a></li>
  15. # You can to add your custom classes by 'Css Classes' field in Edit Menus section.
  16. $icon_depth = apply_filters("mbw_menu_item_icon_depth", 1, $depth);
  17. if( strpos($item_output, "%%menu_icon%%") ){
  18. // At default for all menu items
  19. if( $icon_depth ){
  20. $item_output = str_replace("%%menu_icon%%", $menu_icon, $item_output);
  21. }else{
  22. $item_output = str_replace("%%menu_icon%%", "", $item_output);
  23. }
  24. }else{
  25. # Default example:
  26. # <li><a href="url">Facebook</a>
  27. # <i class="fa fa-facebook-square"></i></li>
  28. if( $icon_depth ){
  29. $item_output .= $menu_icon;
  30. }
  31. }
  32. # Template %%menu_desc%% for add '<p class='menu-item-description' >description</p>' to navmenu
  33. # Just like %%menu_icon%% template.
  34. $menu_desc = "<span class='menu-item-description' >" . trim($item->description , " ") . "</span>" ;
  35. $desc_depth = apply_filters("mbw_menu_item_desc_depth", 1, $depth);
  36. if( strpos($item_output, "%%menu_desc%%") ){
  37. // At default for all menu items
  38. if( $desc_depth ){
  39. $item_output = str_replace("%%menu_desc%%", $menu_desc, $item_output);
  40. }else{
  41. $item_output = str_replace("%%menu_desc%%", "", $item_output);
  42. }
  43. }else{
  44. # Default example: description with icon-font:
  45. # <li><a href="url">Facebook</a>
  46. # <i class="fa fa-facebook-square"></i>
  47. # <p class='menu-item-description' >description</p></li>
  48. if( $desc_depth ){
  49. $item_output .= $menu_desc;
  50. }
  51. }
  52. $db_widgets = ( $w=get_post_meta( $item->ID, "_menubar_widgets", true ) )? $w : array() ;
  53. if( $db_widgets ):
  54. $menubar_widgets_output = "";
  55. foreach( $db_widgets as $widget_id ){
  56. if( !isset( $wp_registered_widgets[$widget_id] ) ){ break; }
  57. $widget = $wp_registered_widgets[$widget_id] ;
  58. ob_start();
  59. $menubar = $wp_registered_sidebars["menubar_widgets"];
  60. $original_params = array_merge(
  61. array( array_merge( $menubar, array('widget_id' => $widget_id, 'widget_name' => $widget['name']) ) ),
  62. (array) $widget['params']
  63. );
  64. $params = $original_params;
  65. $classname = str_replace("_", "-", $widget["classname"] );
  66. $wid = $widget['params'][0]['number'];
  67. $params[0]['before_widget'] = sprintf($params[0]['before_widget'], "menubar_widget_{$wid}", "{$classname} {$widget_id}" );
  68. $params = apply_filters("dynamic_menubar_widgets_params", $params, $original_params, $item, $widget );
  69. do_action("dynamic_menubar_widgets", $widget, $original_params, $item);
  70. if ( is_callable( $widget['callback'] ) ) {
  71. call_user_func_array( $widget['callback'], $params );
  72. }
  73. $menubar_widgets_output .= ob_get_contents();
  74. ob_end_clean();
  75. }
  76. if( $menubar_widgets_output ){
  77. /*** Change the <ul/><li/> tags to the <div/> tags, useful for different navigation menus ****
  78. For example :
  79. 1. wp_nav_menu(array('widgets_wrap'=>'<div id="your-menubar-widgets %1$s" class="sub-menu your-menubar-class %2$s" >%3$s</div>'));
  80. 2. add_action('dynamic_menubar_widgets_params', function( $params, $o_params, $i, $widget ){
  81. if( $widget['callback'][0]['id_base'] != 'your-widget-id' ){ // or calendar, archives, ...
  82. return $params;
  83. }
  84. $params[0]['before_widget'] = '<div id="%1$s" class="your-menubar-widget %2$s">';
  85. $params[0]['after_widget'] = '</div>';
  86. return $params;
  87. }, 1, 4);
  88. ***/
  89. $widgets_wrap = isset( $args->widgets_wrap )? $args->widgets_wrap : '<ul id="%1$s" class="sub-menu menubar-widgets %2$s" >%3$s</ul>';
  90. $item_output .= sprintf( $widgets_wrap, "wp-menubar-widgets-{$item->ID}", "menubar-item-{$item->ID} menubar-item-{$classname}", $menubar_widgets_output );
  91. }
  92. endif; # if( $db_widgets ):
  93. return $item_output;
  94. }
  95. ?>