有没有办法有图像菜单和自定义navwalker?

时间:2015-02-16 16:30:57

标签: php wordpress

我正在尝试创建一个包含图像,标题和说明的菜单。

到目前为止,解密和标题工作得很好,所以,我找到了这个插件

https://wordpress.org/plugins/menu-image/

效果非常好并显示图像+标题,但不显示描述。

所以,我想我需要以某种方式显示描述而不会丢失图像。

我创建了一个自定义的navwalk,但似乎我不能只调用附加的图像。查看插件的代码无法找到任何有用的东西。

有什么想法吗?有没有人这样做过?

到目前为止,我的导航员看起来像这样:

<?php 
class Ext_Walker extends Walker {

    var $tree_type = array('post_type', 'taxonomy', 'custom');
    var $db_fields = array('parent' => 'menu_item_parent', 'id' => 'db_id');

    function start_el(&$output, $object, $depth = 0, $args = array(), $current_object_id = 0) {

        $classes = "";
        foreach ($object->classes as $cl){
            $classes.=" $cl";
        }

        $output .="<div class='col-lg-15 bottom-pad'>
                    <div class='vertical_item'>
                        <div class='col-lg-60'>
                            <div class='$classes'></div>
                        </div>
                        <div class='clear'></div>
                        <div class='desc_vertical'>
                            <h2 class='vertical_title'>{$object->title}</h2>";
                        if($object->post_content != ""){
                            $output .="<p class='item_description'>{$object->post_content}</p>";    
                        }else{

                        }   
        $output         .="</div>"; 
        $output .="<a href=".$object->url."><button class='btn btn-link'>View More</button></a>";
    }

    function end_el(&$output, $object, $depth = 0, $args = array()) {
        $output.='</div></div>';
    }

}
?>

1 个答案:

答案 0 :(得分:1)

当WordPress创建菜单时,它正在创建包含

形式链接的菜单项
<a>Some Title</a>

沃克通过&#34; the_title&#34;过滤。你引用的插件做同样的事情。

因此,如果不开发自己的Walker扩展程序,至少有两种可能性可以实现:

1)扩展插件

由于插件使用的是the_title过滤器,您可以添加该类型的过滤器来添加描述(插件已添加图像)。所以

function add_description( $title, $id ) {
    if ( 'nav_menu_item' == get_post_type( $id ) ) {
        $title = '<span class="title">' . $title . '</span>;
        $title .= '<span class="desc">' . description from wherever you get it . '</span>;
    }

    return $title;
}
add_filter( 'the_title', 'add_description', 10, 2 );

这会将内部文本更改为链接标题和说明。您可能需要检查帖子类型,因为在其他情况下也会调用过滤器。

2)仅使用过滤器

您可以使用上述过滤器的变体来添加图像和描述,从而避免使用插件。例如:

function add_img_and_desc( $title, $id ) {
    if ( 'nav_menu_item' == get_post_type( $id ) ) {
        // Get the image for the menu item (say in $img)
        $title = $img . '<span class="title">' . $title . '</span>;
        $title .= '<span class="desc">' . description from wherever you get it . '</span>;
    }

    return $title;
}
add_filter( 'the_title', 'add_img_and_desc', 10, 2 );

如何获得图像将取决于您的方法。例如,它可以像基于标题的switch语句一样简单。