zur Navigation

olaf-bosch.de

Belastung der Datenbank durch „Fold page list“ vermeiden

Das an sich gut gemeinte Plugin „Collapsable, Foldable, Expandable Page Menus for WordPress: The Fold Page List Plugin“ von Lam Pak Kud (WebspaceWorks) ist nur sinnvoll einzusetzen in Blogs in denen mit nur wenigen statischen Seiten gearbeitet wird. Da WordPress als CMS immer mehr Bedeutung erlangt ist eine Funktion wie es diese Plugin bietet durchaus sinnvoll, leider bietet WordPress von Hause aus nichts derartiges an. Auf WordPress-Installationen mit vielen statischen Seiten steigt die Anzahl der Anfragen an die Datenbank dynamisch an sobald man das Plugin einsetzt. Je mehr Seiten in tieferen Ebenen liegen desto schlimmer wird es. Befindet man sich in der 4. Ebene um das vierfache der 1. Ebene!!! Mehr in der unteren Aufstellung.

Bisher hatte ich dieses Plugin sehr gern eingesetzt, das hat nun ein Ende. Heute hatte ich die Muße mich mit den Möglichkeiten der WordPress-Standard-Funktion „wp_list_pages“ zu beschäftigen. Vorgenommen hatte ich mir eine CSS zu schreiben die mit den ausgegebenen Klassen (sind ja einige ;)) so hinzukommen, dass immer nur Unterseiten der aktiven Seite sichtbar sind, also genauso wie das Plugin Fold Page List dies tut. Der Rest sollte per „display:none;“ einfach ausgeblendet werden. Nach 3h gab ich auf, ich fand einfach keine Möglichkeit die CSS-Eigenschaft erst zu vergeben und dann bei Bedarf wieder zu überschreiben. Also noch mal kurz Google bemüht, nichts brauchbares gefunden. Ich staune das sich damit noch niemand beschäftigt hat. Irgendwer dazu was gelesen? Bitte kommentieren!

Blieb mir also nur die Funktion „wp_list_pages“ genauer anzuschauen. In wp-includes/classes.php werden die ganzen Klassen in der Funktion „start_el(…)“ vergeben. Meine Idee war bei den Elementen ohne Klassen (current_xxx) eine zusätzliche Klasse einzufügen. Das gelang mir auch gleich, in der CSS kam ich damit aber auch nicht viel weiter. Dann kam mir die Idee mit Ebenen (Tiefe der Verschachtelung) zu arbeiten, es stand auch eine Variable ($depth) zur Verfügung, also haben jetzt alle LIs die nicht aktiv sind die Klasse hide-TIEFE bekommen. Damit gelang es mir dann auch recht zügig die erforderlichen Angaben in der CSS umzusetzen. Ich denk das Ergebnis kann sich sehen lassen:

URL Vorher → Nacher

Bei www.akitafreund.de mit 208 statischen Seiten in 4 Ebenen sieht das so aus:
akitafreund.de/kat/news/ 676 → 20
akitafreund.de/i-wurf/ 86 → 23
akitafreund.de/i-wurf/ian-dino-ruede-male/ 117 → 32
akitafreund.de/jane/h-wurf/hakuro/hakuro-2009/ 367 → 38

Bei ohorn.info mit 72 statischen Seiten in 3 Ebenen sieht das so aus:
ohorn.info/ 252 → 48
ohorn.info/ueber-ohorn/ 201 → 49
ohorn.info/ueber-ohorn/heimatbuch/ 455 → 53
ohorn.info/ueber-ohorn/heimatbuch/vorwort/ 463 → 58

Anleitung zum nachbauen gibt’s natürlich auch. Öffne wp-includes/classes.php, suche Zeile 1186 danach einfügen:

// olaf Navigation mit deep class
if ( ($page->ID != get_option('page_for_posts')) && ($page->ID != $current_page) && ($page->ID != $_current_page->post_parent) ) {
  $css_class[] = 'hide-'.$depth;
}

In theme/sidebar.php ersetze:

wswwpx_fold_page_list('PARAMETER');
zu
wp_list_pages('PARAMETER');

Ergänze in deiner CSS:

#menu li.hide-1,
#menu li.hide-1 li.hide-2,
#menu li.current_page_ancestor li.current_page_item li.hide-3,
#menu li.current_page_ancestor li.hide-3{
display:none;
}
#menu li.current_page_item li.hide-1,
#menu li.current_page_ancestor li.hide-1,
#menu li.current_page_ancestor li.current_page_ancestor li.hide-2,
#menu li.current_page_ancestor li.current_page_ancestor li.current_page_item li.hide-3,
#menu li.current_page_ancestor li.current_page_ancestor li.current_page_ancestor li.hide-3{
display:block;
}

Wobei #menu durch einen angepassten Selektor ersetzt werden muss, z.B. #sidebar
Das müsste in jedem WordPress so klappen bis in tiefe 4 verschachtelte Listen/Navigationen.

Bitte beachtet, die Änderung an der classes.php muss bei jedem Update wiederholt werden.

4 Kommentare zu “Belastung der Datenbank durch „Fold page list“ vermeiden”

  1. Ich hab das Plugin auch mal genutzt und ich finde es ist voll der Reinfall.

  2. Seltsam, jetzt paar Jahre nach deinem Artikel gibt es immer noch keine gute Lösung dafür. Suche auch noch konstant nach guten Menü bzw. Navi Plugins. Kann aber nix zufriedenstellendest finden.

  3. Naja…das Plugin erfüllt seinen Zweck nicht wirklich und die Datenbank ist immer noch stark belastet, vor allem, wenn man viele User hat. Kann das Problem irgendwie anders gelöst werden?

  4. Tja, Clemens, genau darum geht es in dem Artikel…

Einen Kommentar schreiben

top