自定义帖子类型(页面)的动态导航

时间:2010-10-24 作者:George Wiscombe

我有一组自定义的帖子类型capability_type 参数设置为\'page\'

我想把这些包括在wp_list_pages() 或类似的,以便我可以使用动态类(例如.current_page_item 等等)。

我读过this post 但我不确定这正是我想要的,有人能帮我提供一个代码示例/更深入的解释吗。

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

这个wp_list_pages() 函数调用get_pages(), 无法用其他post类型轻松覆盖。下面是对调用get_posts() 相反这与wp_list_pages, 还有一个:*post\\U type*(设置为您的post类型的名称)。

function wp_list_post_types( $args ) {
    $defaults = array(
        \'numberposts\'  => -1,
        \'offset\'       => 0,
        \'orderby\'      => \'menu_order, post_title\',
        \'order\'      => \'ASC\',
        \'post_type\'    => \'page\',
        \'depth\'        => 0,
        \'show_date\'    => \'\',
        \'date_format\'  => get_option(\'date_format\'),
        \'child_of\'     => 0,
        \'exclude\'      => \'\',
            \'include\'      => \'\',
        \'title_li\'     => __(\'Pages\'),
        \'echo\'         => 1,
        \'link_before\'  => \'\',
        \'link_after\'   => \'\',
        \'exclude_tree\' => \'\' );

    $r = wp_parse_args( $args, $defaults );
    extract( $r, EXTR_SKIP );

    $output = \'\';
    $current_page = 0;

    // sanitize, mostly to keep spaces out
    $r[\'exclude\'] = preg_replace(\'/[^0-9,]/\', \'\', $r[\'exclude\']);

    // Allow plugins to filter an array of excluded pages (but don\'t put a nullstring into the array)
    $exclude_array = ( $r[\'exclude\'] ) ? explode(\',\', $r[\'exclude\']) : array();
    $r[\'exclude\'] = implode( \',\', apply_filters(\'wp_list_post_types_excludes\', $exclude_array) );

    // Query pages.
    $r[\'hierarchical\'] = 0;
    $pages = get_posts($r);

    if ( !empty($pages) ) {
        if ( $r[\'title_li\'] )
            $output .= \'<li class="pagenav">\' . $r[\'title_li\'] . \'<ul>\';

        global $wp_query;
        if ( ($r[\'post_type\'] == get_query_var(\'post_type\')) || is_attachment() )
            $current_page = $wp_query->get_queried_object_id();
        $output .= walk_page_tree($pages, $r[\'depth\'], $current_page, $r);

        if ( $r[\'title_li\'] )
            $output .= \'</ul></li>\';
    }

    $output = apply_filters(\'wp_list_pages\', $output, $r);

    if ( $r[\'echo\'] )
        echo $output;
    else
        return $output;
}
注意:它的大部分副本都是从源粘贴的。当然,还有一些论点没有起到任何作用,可能还有一些我没有想到的用例会破坏它。然而,令人惊讶的是,它适用于分级和非分级帖子类型,尽管。。。

SO网友:Camilo Delvasto

@goldenapples:很好的帖子!我在找这个,然后到了这里。我注意到orderby工作不正常,通过在默认参数中添加以下行来修复它:

\'order\' => \'ASC\',
谢谢,卡米洛

结束

相关推荐