自定义WordPress沃克 - 需要的建议

时间:2014-06-12 09:24:44

标签: php wordpress

我正在尝试在WordPress中创建一个将在特定结构中显示类别的walker。我是PHP / WordPress Walkers的新手,所以我需要一些关于walker是否是最符合我需求的选项以及你能提供的任何代码示例的输入。

我想要创建的结构如下:

<ul class="nav">
    <li class="normal-link"<a href="/">Home</a>
    <li class="parent-category">
        <a href="#">Parent Category</a>
        <div class="sub-categories">
            <span>Parent Category</span>
            <ul class="sub-nav">
                <li class="subcategory">Subcategory 1</li>
                <li class="subcategory">Subcategory 2</li>
            </ul>
        </div>
    </li>
    <li class="normal-link"><a href="/about">About Us</a>
    <li class="normal-link"><a href="/contact">Contact Us</a>
</ul>

上面的结构允许我将页面链接(我硬编码到我的菜单中)与顶级菜单中的父类别链接一起放置。然后,我将使子类别div成为一个下拉列表,它将在一个范围中显示父类别名称,后跟属于该父项的所有子类别的列表。

我的问题是我不打算使用WordPress的外观&gt;菜单部分。相反,我正在寻找创建一个在我的header.php文件中硬编码的菜单。我的主要原因是,如果我添加的任何新类别分配了帖子,则会自动显示。根据我的理解,如果我使用WP Admin中的Appearance&gt; Menus部分,那么我必须进入菜单并在每次创建时添加任何新类别。

从上面来看,我不知道如何解决这个事实,即我只需要显示一些“页面”(主页,关于,联系),但显示所有包含帖子的“类别”(并且显示的格式如图所示)在我的代码中。)

任何意见都会受到赞赏。

谢谢, 詹姆斯

1 个答案:

答案 0 :(得分:0)

对于任何想要实现这一目标的人,我使用下面的代码创建了我的助行器。我已经从上面的示例菜单结构中更改了一些类名,在span中添加了一个类,并将类别slug作为一个类添加到每个父列表元素中(因此我可以为每个父级及其子级设置不同颜色等)

class Navigation_Catwalker extends Walker_Category {

// Configure the start of each level
function start_lvl(&$output, $depth = 0, $args = array()) {
    $output .= "";
}

// Configure the end of each level
function end_lvl(&$output, $depth = 0, $args = array()) {
    $output .= "";
}

// Configure the start of each element
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0) {

    // Set the category name and slug as a variables for later use
    $cat_name = esc_attr( $category->name );
    $cat_name = apply_filters( 'list_cats', $cat_name, $category );
    $cat_slug = esc_attr( $category->slug );

    // Configure the output for the top list element and its URL
    if ( $depth === 0 ) {
        $link = '<a class="parent-category-dropdown" href="' . esc_url( get_term_link($category) ) . '"' . '>' . $cat_name . '</a>';
        $indent = str_repeat("\t", $depth);
        $output .= "\t<li class='parent-category " . $cat_slug . "'>$link\n<div class='category-dropdown'>\n<span class='parent-category-title'>" . $cat_name . "</span>\n$indent<ul class='submenu'>\n";
    }

    // Configure the output for lower level list elements and their URL's
    if ( $depth > 0 ) {
        $link = '<a href="' . esc_url( get_term_link($category) ) . '"' . '>' . $cat_name . '</a>';
        $output .= "\t<li class='sub-category'>$link\n";
    }

}

// Configure the end of each element
function end_el(&$output, $page, $depth = 0, $args = array() ) {
    if ( $depth === 0 ) {
        $indent = str_repeat("\t", $depth);
        $output .= "$indent</ul>\n</div>\n";
    }
    if ( $depth > 0 ) {
        $output .= "</li>";
    }

}

}