2017-09-18 3 views
2

Ist es möglich, ein Elternteil und seine Kinder in ein anderes Element zu wickeln, wenn Sie Walker und wp_list_pages verwenden, also könnte ich sie als Block betreiben?Wrapping eines Elternteils und seiner Kinder mit Wordpress Walker

Derzeit verwende ich Code

die

<a href="#116" class="list-title-item">Parent 1</a> 
<nav class="list"> 
    <a href="#118" class="list-item">Child 1.1</a> 
    <a href="#120" class="list-item">Child 1.2</a> 
    <a href="#122" class="list-item">Child 1.3</a> 
</nav> 
<a href="#125" class="list-title-item">Parent 2</a> 
<nav class="list"> 
    <a href="#127" class="list-item">Child 2.1</a> 
    <a href="#132" class="list-item">Child 2.2</a> 
</nav> 

produziert Was ich möchte, bekommen, ist

<div id="title-116" class="list-title"> 
    <a href="#116" class="list-title-item">Parent 1</a> 
    <nav class="list"> 
    <a href="#118" class="list-item">Child 1.1</a> 
    <a href="#120" class="list-item">Child 1.2</a> 
    <a href="#122" class="list-item">Child 1.3</a> 
    </nav> 
</div> 
<div id="title-125" class="list-title"> 
    <a href="#125" class="list-title-item">Parent 2</a> 
    <nav class="list"> 
    <a href="#127" class="list-item">Child 2.1</a> 
    <a href="#132" class="list-item">Child 2.2</a> 
    </nav> 
</div> 

Ich rufe wp_list_pages mit dem Code

wp_list_pages(array(
    'child_of' => $page_id, 
    'post_status' => 'publish', 
    'order' => 'asc', 
    'depth' => 2, 
    'walker' => new My_Walker, 
)); 

Antwort

1

Versuchen Sie, die <div> zu den Methoden start_el und end_el hinzuzufügen, nur für Top-Level-Elemente. (d. h. Tiefe = 0)

public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { 
    $class = 'list-item'; 
    if ($args['has_children']) { 
     $class ='list-title-item'; 
    } 

    $divopen = ''; 
    if (0 === $depth) { 
     $divopen = "<div id=\"title-{$item->ID}\" class=\"list-title\">"; 
    } 

    $output .= "$divopen\r\n<a href=\"#$item->ID\" class=\"$class\">$item->post_title</a>\n"; 
} 

public function end_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { 
    ... 
    // Whatever else output is, plus: 
    if (0 === $depth) { 
     $output .= "</div>"; 
    } 
} 
Verwandte Themen