我正在尝试在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部分,那么我必须进入菜单并在每次创建时添加任何新类别。
从上面来看,我不知道如何解决这个事实,即我只需要显示一些“页面”(主页,关于,联系),但显示所有包含帖子的“类别”(并且显示的格式如图所示)在我的代码中。)
任何意见都会受到赞赏。
谢谢, 詹姆斯
答案 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>";
}
}
}