严格标准错误自举导航器

时间:2013-08-25 作者:Chris

我很难理解这个错误,我以前从来没有遇到过,请有人帮忙吗?

Strict Standards: Declaration of wp_bootstrap_navwalker::start_lvl() should be compatible with Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array) in .../wp-content/themes/flat-portfolio/wp_bootstrap_navwalker.php on line 143
wp\\U bootstrap\\U navwalker。php代码如下:

<?php

/**
 * Class Name: wp_bootstrap_navwalker
 * GitHub URI: https://github.com/twittem/wp-bootstrap-navwalker
 * Description: A custom WordPress nav walker class to implement the Twitter Bootstrap 2.3.2 navigation style in a custom theme using the WordPress built in menu manager.
 * Version: 1.4.3
 * Author: Edward McIntyre - @twittem
 * License: GPL-2.0+
 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
 */

class wp_bootstrap_navwalker extends Walker_Nav_Menu {

    /**
     * @see Walker::start_lvl()
     * @since 3.0.0
     *
     * @param string $output Passed by reference. Used to append additional content.
     * @param int $depth Depth of page. Used for padding.
     */
    function start_lvl( &$output, $depth ) {
        $indent = str_repeat( "\\t", $depth );
        $output    .= "\\n$indent<ul class=\\"dropdown-menu\\">\\n";        
    }

    /**
     * @see Walker::start_el()
     * @since 3.0.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 int $current_page Menu item ID.
     * @param object $args
     */

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        global $wp_query;
        $indent = ( $depth ) ? str_repeat( "\\t", $depth ) : \'\';

        /**
         * Dividers & Headers
         * ==================
         * Determine whether the item is a Divider, Header, 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 (strcasecmp($item->title, \'divider\') == 0) {
            // Item is a Divider
            $output .= $indent . \'<li class="divider">\';
        } else if (strcasecmp($item->title, \'divider-vertical\') == 0) {
            // Item is a Vertical Divider
            $output .= $indent . \'<li class="divider-vertical">\';
        } else if (strcasecmp($item->title, \'nav-header\') == 0) {
            // Item is a Header
            $output .= $indent . \'<li class="nav-header">\' . esc_attr( $item->attr_title );
        } else {

            $class_names = $value = \'\';
            $classes = empty( $item->classes ) ? array() : (array) $item->classes;
            $classes[] = ($item->current) ? \'active\' : \'\';
            $classes[] = \'menu-item-\' . $item->ID;
            $class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item, $args ) );

            if ($args->has_children && $depth > 0) {
                $class_names .= \' dropdown-submenu\';
            } else if($args->has_children && $depth === 0) {
                $class_names .= \' dropdown\';
            }

            $class_names = $class_names ? \' class="\' . esc_attr( $class_names ) . \'"\' : \'\';

            $id = apply_filters( \'nav_menu_item_id\', \'menu-item-\'. $item->ID, $item, $args );
            $id = $id ? \' id="\' . esc_attr( $id ) . \'"\' : \'\';

            $output .= $indent . \'<li\' . $id . $value . $class_names .\'>\';

            $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)        ? \' data-toggle="dropdown" data-target="#" class="dropdown-toggle"\' : \'\';

            $item_output = $args->before;

            /**
             * Glyphicons
             * ===========
             * 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 )){
                $item_output .= \'<a\'. $attributes .\'><i class="\' . esc_attr( $item->attr_title ) . \'"></i>&nbsp;\';
            } else {
                $item_output .= \'<a\'. $attributes .\'>\';
            }

            $item_output .= $args->link_before . apply_filters( \'the_title\', $item->title, $item->ID ) . $args->link_after;
            $item_output .= ($args->has_children && $depth == 0) ? \' <span class="caret"></span></a>\' : \'</a>\';
            $item_output .= $args->after;

            $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
        }
    }

    /**
     * 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
     *
     * @param object $element Data object
     * @param array $children_elements List of elements to continue traversing.
     * @param int $max_depth Max depth to traverse.
     * @param int $depth Depth of current element.
     * @param array $args
     * @param string $output Passed by reference. Used to append additional content.
     * @return null Null on failure with no changes to parameters.
     */

    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);
    }
}

?>
我通过在标题中输入以下代码来调用walker。php

<?php 
    wp_nav_menu( array(
        \'menu\'       => \'top_menu\',
        \'depth\'      => 2,
        \'container\'  => false,
        \'menu_class\' => \'nav\',
        \'fallback_cb\' => \'wp_page_menu\',
        //Process nav menu using our custom nav walker
        \'walker\' => new wp_bootstrap_navwalker())
    );
?>
以及在函数中注册函数。php:

// Register Custom Navigation Walker
require_once(\'wp_bootstrap_navwalker.php\');

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

这意味着start_lvl 中的方法wp_bootstrap_navwalker 应与中的方法声明相匹配Walker_Nav_Menu. 事实并非如此。

function start_lvl( &$output, $depth ) {
VS。

function start_lvl( &$output, $depth = 0, $args = array() ) {
让参数精确匹配,你应该会没事的。

您可能不应该使用wp_ 前缀as yours不是核心代码。

SO网友:davidcondrey

您的类定义行是:

class description_walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args)
应修改以包括新的$id字段(并为其他方法参数指定默认值:

class description_walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args, $id = 0)
您还需要更新应用筛选器行以包括新的$id字段:

apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args, $id);

SO网友:PxDsgn Co

我不知道你是否找到了解决方案,但我也有一个错误,我所做的与此完全不同。我的解决方案非常简单(虽然不确定它是否是传统的)。

Step #1

导航“wp\\u bootstrap\\u navwalker.php”文件的第172行(如下所示)

function fallback( $args ) {
    if ( current_user_can( \'manage_options\' ) ) {

Step #2

用下面的代码更改该行,您应该有一个工作导航菜单

public static function fallback( $args ) {
    if ( current_user_can( \'manage_options\' ) ) {
就是这样。。。我真的希望它对你有用!

结束

相关推荐

WP_PAGE_MENU_ARGS过滤器中的Walker_Nav_Menu不起作用

我需要从菜单中隐藏某些导航项目(基于密码保护功能),而我的自定义助行器无法正常工作。事实上,当我通过过滤器添加标准Walker\\u Nav\\u菜单时,我甚至无法让它工作。我创建了一个插件,如下所示:<?php function myplugin_page_menu_args( $args ) { $args[\'walker\'] = new Walker_Nav_Menu; return $args; } add_filter(