热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php一个自定义的WordPress导航助手类,使用我内置的WordPress在自定义主题中完全实现Bootstrap3.0+导航样式

本文由编程笔记#小编为大家整理,主要介绍了php一个自定义的WordPress导航助手类,使用我内置的WordPress在自定义主题中完全实现Bootstrap3.0+导航样式相关的知识,希望对你
本文由编程笔记#小编为大家整理,主要介绍了php 一个自定义的WordPress导航助手类,使用我内置的WordPress在自定义主题中完全实现Bootstrap 3.0+导航样式相关的知识,希望对你有一定的参考价值。




/**
* WP Bootstrap Navwalker
*
* @package WP-Bootstrap-Navwalker
*/
/*
* Class Name: WP_Bootstrap_Navwalker
* Plugin Name: WP Bootstrap Navwalker
* Plugin URI: https://github.com/wp-bootstrap/wp-bootstrap-navwalker
* Description: A custom WordPress nav walker class to implement the Bootstrap 3 navigation style in a custom theme using the WordPress built in menu manager.
* Author: Edward McIntyre - @twittem, WP Bootstrap
* Version: 2.0.5
* Author URI: https://github.com/wp-bootstrap
* GitHub Plugin URI: https://github.com/wp-bootstrap/wp-bootstrap-navwalker
* GitHub Branch: master
* License: GPL-3.0+
* License URI: http://www.gnu.org/licenses/gpl-3.0.txt
*/
/* Check if Class Exists. */
if ( ! class_exists( 'WP_Bootstrap_Navwalker' ) ) {
/**
* WP_Bootstrap_Navwalker class.
*
* @extends Walker_Nav_Menu
*/
class WP_Bootstrap_Navwalker extends Walker_Nav_Menu {
/**
* Start Level.
*
* @see Walker::start_lvl()
* @since 3.0.0
*
* @access public
* @param mixed $output Passed by reference. Used to append additional content.
* @param int $depth (default: 0) Depth of page. Used for padding.
* @param array $args (default: array()) Arguments.
* @return void
*/
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat( "\t", $depth );
$output .= "\n$indent

    \n";
    }
    /**
    * Start El.
    *
    * @see Walker::start_el()
    * @since 3.0.0
    *
    * @access public
    * @param mixed $output Passed by reference. Used to append additional content.
    * @param mixed $item Menu item data object.
    * @param int $depth (default: 0) Depth of menu item. Used for padding.
    * @param array $args (default: array()) Arguments.
    * @param int $id (default: 0) Menu item ID.
    * @return void
    */
    public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
    /**
    * Dividers, Headers or Disabled
    * =============================
    * Determine whether the item is a Divider, Header, Disabled or regular
    * menu item. To prevent errors we use the strcasecmp() function to so a
    * comparison that is not case sensitive. The strcasecmp() function returns
    * a 0 if the strings are equal.
    */
    if ( 0 === strcasecmp( $item->attr_title, 'divider' ) && 1 === $depth ) {
    $output .= $indent . '
  • ';
    $atts = array();
    if ( empty( $item->attr_title ) ) {
    $atts['title'] = ! empty( $item->title ) ? strip_tags( $item->title ) : '';
    } else {
    $atts['title'] = $item->attr_title;
    }
    $atts['target'] = ! empty( $item->target ) ? $item->target : '';
    $atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
    // If item has_children add atts to a.
    if ( $args->has_children && 0 === $depth ) {
    $atts['href'] = '#';
    $atts['data-toggle'] = 'dropdown';
    $atts['class'] = 'dropdown-toggle';
    $atts['aria-haspopup'] = 'true';
    } else {
    $atts['href'] = ! empty( $item->url ) ? $item->url : '';
    }
    $atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args );
    $attributes = '';
    foreach ( $atts as $attr => $value ) {
    if ( ! empty( $value ) ) {
    $value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
    $attributes .= ' ' . $attr . '="' . $value . '"';
    }
    }
    $item_output = $args->before;
    /*
    * Glyphicons/Font-Awesome
    * ===========
    * Since the the menu item is NOT a Divider or Header we check the see
    * if there is a value in the attr_title property. If the attr_title
    * property is NOT null we apply it as the class name for the glyphicon.
    */
    if ( ! empty( $item->attr_title ) ) {
    $pos = strpos( esc_attr( $item->attr_title ), 'glyphicon' );
    if ( false !== $pos ) {
    $item_output .= ' ';
    } else {
    $item_output .= ' ';
    }
    } else {
    $item_output .= '';
    }
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
    $item_output .= ( $args->has_children && 0 === $depth ) ? ' ' : '';
    $item_output .= $args->after;
    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    } // End if().
    }
    /**
    * 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.
    *
    * This method shouldn't be called directly, use the walk() method instead.
    *
    * @see Walker::start_el()
    * @since 2.5.0
    *
    * @access public
    * @param mixed $element Data object.
    * @param mixed $children_elements List of elements to continue traversing.
    * @param mixed $max_depth Max depth to traverse.
    * @param mixed $depth Depth of current element.
    * @param mixed $args Arguments.
    * @param mixed $output Passed by reference. Used to append additional content.
    * @return null Null on failure with no changes to parameters.
    */
    public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
    if ( ! $element ) {
    return; }
    $id_field = $this->db_fields['id'];
    // Display this element.
    if ( is_object( $args[0] ) ) {
    $args[0]->has_children = ! empty( $children_elements[ $element->$id_field ] ); }
    parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
    }
    /**
    * Menu Fallback
    * =============
    * If this function is assigned to the wp_nav_menu's fallback_cb variable
    * and a menu has not been assigned to the theme location in the WordPress
    * menu manager the function with display nothing to a non-logged in user,
    * and will add a link to the WordPress menu manager if logged in as an admin.
    *
    * @param array $args passed from the wp_nav_menu function.
    */
    public static function fallback( $args ) {
    if ( current_user_can( 'edit_theme_options' ) ) {
    /* Get Arguments. */
    $cOntainer= $args['container'];
    $container_id = $args['container_id'];
    $container_class = $args['container_class'];
    $menu_class = $args['menu_class'];
    $menu_id = $args['menu_id'];
    if ( $container ) {
    echo &#39;<&#39; . esc_attr( $container );
    if ( $container_id ) {
    echo &#39; id="&#39; . esc_attr( $container_id ) . &#39;"&#39;;
    }
    if ( $container_class ) {
    echo &#39; class="&#39; . sanitize_html_class( $container_class ) . &#39;"&#39;; }
    echo &#39;>&#39;;
    }
    echo &#39; if ( $menu_id ) {
    echo &#39; id="&#39; . esc_attr( $menu_id ) . &#39;"&#39;; }
    if ( $menu_class ) {
    echo &#39; class="&#39; . esc_attr( $menu_class ) . &#39;"&#39;; }
    echo &#39;>&#39;;
    echo &#39;
  • &#39; . esc_attr( &#39;Add a menu&#39;, &#39;&#39; ) . &#39;
  • &#39;;
    echo &#39;
&#39;;
if ( $container ) {
echo &#39;&#39;; }
}
}
}
} // End if().


推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
author-avatar
菲菲不停2502898155
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有