wechselnde classn auf wp_list_pages

Ich versuche, alternierende classn in der Liste zu haben, die von wp_list_pages erstellt wurde.

Zur Zeit habe ich die Walker_page-class erweitert, indem ich die start_el-function wie folgt aktualisiere:

class Sidebar_walker extends Walker_page { var $alternate = 'background_1'; function start_el( &$output, $page, $depth, $args, $current_page = 0 ) { if ( $depth ) $indent = str_repeat("\t", $depth); else $indent = ''; extract($args, EXTR_SKIP); $css_class = array('page_item', 'page-item-'.$page->ID); $alternate = ($alternate != 'background_1') ? 'background_1' : 'background_2'; $css_class[] = $alternate; if ( !empty($current_page) ) { $_current_page = get_post( $current_page ); if ( in_array( $page->ID, $_current_page->ancestors ) ) $css_class[] = 'current_page_ancestor'; if ( $page->ID == $current_page ) $css_class[] = 'current_page_item'; elseif ( $_current_page && $page->ID == $_current_page->post_parent ) $css_class[] = 'current_page_parent'; } elseif ( $page->ID == get_option('page_for_posts') ) { $css_class[] = 'current_page_parent'; } $css_class = implode( ' ', apply_filters( 'page_css_class', $css_class, $page, $depth, $args, $current_page ) ); $output .= $indent . '
  • ID) . '">' . $link_before . apply_filters( 'the_title', $page->post_title, $page->ID ) . $link_after . ''; if ( !empty($show_date) ) { if ( 'modified' == $show_date ) $time = $page->post_modified; else $time = $page->post_date; $output .= " " . mysql2date($date_format, $time); } } }
  • Nur Hintergrund_1 wird gedruckt. Wie bekomme ich $ alternate um tatsächlich zu aktualisieren.

    Solutions Collecting From Web of "wechselnde classn auf wp_list_pages"

    Betrachten Sie dies als eine Ergänzung zu der Lösung von toscho.

    Ich glaube das …

     $this->alternate = ($this->alternate != 'background_1') ? 'background_1' : 'background_2'; $css_class[] = $this->alternate; 

    … wird tun, was Sie wollen.

    Der Unterschied besteht darin, dass die Lösung von toscho mit dem Schlüsselwort static diese Variable für jede Instanziierung dieses Laufers statisch macht – das heißt, alle Instanzen teilen denselben Wert. Wenn Sie zwei Geher instanziieren, wird die Sekunde dort fortgesetzt, wo die letzte unterbrochen wurde. Das mag sein, was du willst, oder vielleicht nicht. Wenn $this wird, wird dies auf die eine Instanz des Walker beschränkt.

    Jedes Mal, start_el() die Methode start_el() aufgerufen wird, beginnt sie bei start_el() und weiß nichts über frühere Aufrufe. Um sich an frühere Zustände zu erinnern, verwenden Sie das Schlüsselwort static :

     function start_el( &$output, $page, $depth, $args, $current_page = 0 ) { static $alternate = 'background_1'; 

    Jetzt wird der letzte Zustand von $alternate für alle Anrufe beibehalten.