Wp_list_ages上的交替类

时间:2013-04-30 作者:jppower175

我正在尝试在wp\\U list\\U页面创建的列表上设置交替类。

目前,我已经扩展了Walker\\u page类,更新了start\\u el函数,如下所示:

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 . \'<li class="\' . $css_class . \'"><a href="\' . get_permalink($page->ID) . \'">\' . $link_before . apply_filters( \'the_title\', $page->post_title, $page->ID ) . $link_after . \'</a>\';

    if ( !empty($show_date) ) {
        if ( \'modified\' == $show_date )
            $time = $page->post_modified;
        else
            $time = $page->post_date;

        $output .= " " . mysql2date($date_format, $time);
    }
}
}
只有background\\u 1正在打印。如何获取$alternate以实际更新。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

将此视为toscho解决方案的补充。

我相信。。。

$this->alternate = ($this->alternate != \'background_1\') ? \'background_1\' : \'background_2\';
$css_class[] = $this->alternate;
。。。会做你想做的事。

区别在于toscho的解决方案,使用static 关键字,将使该变量对于该walker的任何实例都是静态的——也就是说,所有实例将共享相同的值。如果实例化两个Walker,第二个将在最后一个停止的地方继续。这可能是你想要的,也可能不是。使用$this 将仅限于walker的一个实例。

SO网友:fuxia

每次该方法start_el() 它从零开始,对以前的调用一无所知。要记住早期的州,请使用static 关键词:

function start_el( &$output, $page, $depth, $args, $current_page = 0 ) {
    static $alternate = \'background_1\';
现在是$alternate 将保留所有通话。

结束

相关推荐

将动态内容添加到Walker类中的end_lvl

我试图在每个下拉菜单(子菜单)的末尾添加唯一的内容。我已经成功地编辑了walker类的end\\u lvl函数,将div添加到每个子菜单的末尾,但现在我迷失了下一步:基于父菜单id创建一个条件语句以响应不同的内容。有什么想法/建议吗?这就是我所拥有的(我知道它显然不起作用,因为我试图使用项数组,但使用菜单父id)。很明显,我不太明白这一点。function start_lvl( &$output, $depth = 0, $args = array() ) { $indent =