it-swarm.com.de

Wählen Sie das erste untergeordnete Element/Unterseitenelement auf den Seiten der WP-Liste aus

Diese Frage knüpft an eine Frage an, die ich zuvor gestellt habe .

Ok, der HTML-Code, den ich ausgeben möchte, ist derselbe wie die vorherige Frage - hier :

Der aktuell ausgegebene HTML-Code lautet:

<div id="nav">  
        <ul id="drop-nav">          
            <li><a href="#">About Us</a>
            <div class="subnav">
                    <div class="subnavTop">
                        <ul class="subnavContent">
                            <li>
                                <dl>
                                    <dd><a href="#">Child of About</a></dd> <!-- Child Item | Depth = 1 -->
                                    <dd><a href="#">Grandchild of About</a></dd> <!-- GrandChild Item | Depth = 2 -->
                                </dl>
                            </li>
                        </ul>
                    </div>
                </div>
            </li>
            <li><a href="#">Talk to us</a></li>
        </ul>
<br style="clear: left" />
</div>

Hier ist der Code, den ich in der Datei header.php verwende, um die HTML-/Menüelemente zu generieren:

<div id="nav">  
    <ul id="drop-nav">  
    <?php
    // Query the database for all top-level page IDs, and store them in the $menuPages array under the [ID] sub-array
    $menuPages = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_parent=0 AND post_type='page' AND post_status='publish' ORDER BY menu_order ASC");

    // For each element in the $menuPages array, get the value from the [ID]-subarray to create the top-level menu and it's children
    foreach($menuPages as $menuItem){
        $menuItemTitle = get_the_title($menuItem->ID);          
        $menuItemClass = strtolower(trim($menuItemTitle));                  
        $menuItemClass = preg_replace('/[^a-z0-9-]/', '-', $menuItemClass);
        $menuItemClass = preg_replace('/-+/', "-", $menuItemClass);             
        $menuItemPermalink = get_permalink($menuItem->ID);
            if (isset($menuItemTitle) && $menuItemTitle != 'Home'){                 
                _e('<li class="'.$menuItemClass.'">'.PHP_EOL);
                _e('<a href="'.$menuItemPermalink.'">'.$menuItemTitle.'</a>'.PHP_EOL);

            // Run wp_list_pages to fetch any children, and put the HTML <LI> list results into $menuItemChildren as a string
                $menuItemChildren = wp_list_pages('title_li=&echo=0&sort_column=menu_order&child_of='.$menuItem->ID);                   

                $menuItemChildren = preg_replace('%<li class=".*">%U', '', $menuItemChildren);
                $menuItemChildren = str_replace('</li>', '', $menuItemChildren);
                $menuItemChildren = str_replace('<a', '<dd><a', $menuItemChildren);
                $menuItemChildren = str_replace('</a>', '</a></dd>', $menuItemChildren);
                $menuItemChildren = str_replace('<ul class=\'children\'>', '', $menuItemChildren);
                $menuItemChildren = str_replace('</ul>', '', $menuItemChildren);            

            // If results were returned, $menuItemChildren is now a string with HTML in it, so create a drop-down and echo out the HTML
                if($menuItemChildren){                      
                    _e('<div class="subnav">'.PHP_EOL);
                    _e('<div class="subnavTop">'.PHP_EOL);
                    _e('<ul class="subnavContent">'.PHP_EOL);       
                    _e('<li>'.PHP_EOL);
                    echo '<dl>' .$menuItemChildren. '</dl>' . PHP_EOL;
                    _e('</li>'.PHP_EOL);
                    _e('</ul>'.PHP_EOL);
                    _e('</div>'.PHP_EOL);
                    _e('</div>'.PHP_EOL);                       
                }
                _e('</li>'.PHP_EOL);            
            }
        }
    ?>
    </ul>
    <br style="clear: left" />
    </div>

Ich weiß, dass dies wahrscheinlich eine sehr schlechte Methode ist, aber es scheint den größten Teil der Arbeit in Ordnung zu machen.

Das Einzige, was jetzt noch aussteht, ist, die untergeordneten Elemente/Unterseiten in Ebene/Tiefe 1 von "dd's" in "dt's" zu ändern und alle Seiten darunter als dd's zu belassen. Ich denke, ich brauche einen Code, der das erste Element/Kind nimmt und ihm "dt" -Tags gibt, dann alles andere "dd" -Tags, aber ich kann es für mein Leben nicht herausfinden.

Hoffe, das macht Sinn und jede Hilfe sehr geschätzt, S.

(Und ich habe mir die Walker-Klassenmethode angesehen: ()

1
sta777

Siehe meine Antwort auf Ihre andere Frage ... Ich denke, Sie sind besser dran mit einem benutzerdefinierten Walker.

Bearbeiten: Ich sollte hier vielleicht explizit erwähnen, dass ich versucht habe, einen Wanderer für Sie zu schreiben. Schauen Sie sich also die andere Frage an, um sie zu finden.

1
wyrfel