Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 自定义Walker菜单和菜单图标_Wordpress_Plugins_Menu_Icons - Fatal编程技术网

Wordpress 自定义Walker菜单和菜单图标

Wordpress 自定义Walker菜单和菜单图标,wordpress,plugins,menu,icons,Wordpress,Plugins,Menu,Icons,目前,我正在为我的Wordpress主题构建一个自定义菜单,但有一件事让我有点为难。我正在使用walkerclass,这样我就可以为我的不同菜单元素添加更多细节。除此之外,我还使用自定义图标,我使用一个名为菜单图标()的插件来显示这些图标 但我现在对我的元素控制不够。我使用当前代码获得以下HTML导出: <div class="menuwrapper"> <ul class="menu"> <li class="menuitem>

目前,我正在为我的Wordpress主题构建一个自定义菜单,但有一件事让我有点为难。我正在使用walkerclass,这样我就可以为我的不同菜单元素添加更多细节。除此之外,我还使用自定义图标,我使用一个名为菜单图标()的插件来显示这些图标

但我现在对我的元素控制不够。我使用当前代码获得以下HTML导出:

<div class="menuwrapper">
     <ul class="menu">
          <li class="menuitem>
               <a class="page" href="#">
                    <div class="menu-title">
                         <h3>
                         <span>Menu Title here</span>
                         <img src="homeicon.svg" />
                         </h3>
                    </div>
               </a>
          </li>
     </ul>
</div>

为了实现第一个结果,我使用以下walker类:

<?php
    class Description_Walker extends Walker_Nav_Menu{
        function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
            $indent = str_repeat("\t", $depth);
            $attributes  = '';

            ! empty ( $item->attr_title )
            and $item->attr_title !== $item->title
            and $attributes .= ' title="' . esc_attr( $item->attr_title ) .'"';

            ! empty ( $item->url )
            and $attributes .= ' href="' . esc_attr( $item->url ) .'"';

            $attributes  = trim( $attributes );
            $title       = apply_filters( 'the_title', $item->title, $item->ID );
            $item_output = "$args->before<a class=\"page\" $attributes><div><h3>$args->link_before$title</h3></div></a>"
                         . "$args->link_after$args->after";

            $output .= $indent . "<li class=\"menuitem\">";

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

我现在想的是插件正在菜单的$title中添加图标。这就是为什么我不能把它们分开。我已经在浏览插件文件,看看是否可以覆盖某些内容。但我还没有找到解决办法。如果有人能给我指出正确的方向,那就太好了。也许有人已经有了一些插件的经验

亲切问候,


我已经解决了这个问题。我找到了将标题与图标结合在一起的代码。我在该函数中创建了一些自定义类

它位于菜单图标插件的type-image.php文件中

旧代码:

$title = sprintf(
        '%s%s%s',
        'before' === $values['position'] ? '' : $title,
        $this->get_icon_markup( $icon->ID, $values, $i_attrs ),
        'after' === $values['position'] ? '' : $title
    );
新代码:

$title = sprintf(
        '%s%s%s',
        'before' === $values['position'] ? '' : "<div><h3>" . $title . "</h3></div>",
        "<span class=\"icon-wrap\">" . $this->get_icon_markup( $icon->ID, $values, $i_attrs ) . "</span>",
        'after' === $values['position'] ? '' : "<div><h3>" . $title . "</h3></div>"
    );
$title=sprintf(
“%s%s%s”,
'在'==$values['position']之前?'':.$title.'',
“.$this->get_icon\u markup($icon->ID,$values,$i_attrs)。”,
'在'=$values['position']之后?'':.$title'.'
);

只需对其进行一些功能覆盖。我知道这不是最好、最干净的方法,但它确实有效。

也有同样的问题。请说,你是如何获得标题中的图像的?我有类似的
apply_filters()
call,但是没有图标出现在这个菜单项的标题图标中。我想这个插件已经更新了。我在github上发布了一条关于它的评论,他说他将在下一个版本中集成它。否则,您必须重写插件type-image.php中的函数。不必对上述代码进行任何更改。它会自动抓取标题。哦,现在我看到
$title=apply\u过滤器('the\u title',$item->title,$item->ID)似乎才是真正需要的(而不是“walker\u nav\u menu\u start\u el”
filter)。我有更复杂的情况,因为我需要在不同的菜单中使用不同的图标标记。因此,我将尝试找到一个解决方案:)是的,你是对的。但我仍然不能为不同的步行者使用不同的图标输出覆盖功能,这是一个真正的问题。无论如何,我已经解决了一个肮脏但有效的解决方案,它使用
$GLOBALS
。但这是一个单独回答的主题:)
$title = sprintf(
        '%s%s%s',
        'before' === $values['position'] ? '' : "<div><h3>" . $title . "</h3></div>",
        "<span class=\"icon-wrap\">" . $this->get_icon_markup( $icon->ID, $values, $i_attrs ) . "</span>",
        'after' === $values['position'] ? '' : "<div><h3>" . $title . "</h3></div>"
    );