在wp_list_ages菜单的标题下列出所有帖子

时间:2014-04-21 作者:Joseph Gregory

我目前使用wordpress的默认页面导航(wp\\u list\\u pages),我已将主页设置为“主页”,将博客设置为“事件”,但我想在“事件”子项下列出最近的10篇文章。

我试图使用以下代码对其进行黑客攻击,但它到处都是内容,并删除了标记:

add_filter(\'wp_list_pages\', \'add_forum_link\');
function add_forum_link($output) {
        $output .= \'<li><a href="#">Blog</a><ul>\';

        query_posts(\'showposts=10\');
        while ( have_posts() ){ the_post();

        $output .= \'<li><a href="\'.the_permalink().\'">\'.the_title().\'</a></li>\';
        }

        $output .= \'</ul></li>\';
        echo $output;
}
此外,我还创建了一个名为“事件”的新链接,所以效果不太好。

有没有一个选项可以让Wordpress找到我设置为我的帖子的页面,并在该标题下显示最后10篇博客帖子?

任何帮助都会很好!!

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

然而,你的想法是对的;

不要使用query_posts, use get_posts instead使用wp_list_pages 过滤器只会使用模板标记将列表添加到末尾,如the_permalink() 将回显输出,因此您不能在中使用它string concatenation您需要使用custom walker (用于生成层次结构内容的类家族),这将允许您在帖子页面之后插入列表:

/**
 * Add 10 most recent posts as a child list of the posts page.
 * 
 * @link https://wordpress.stackexchange.com/q/141929/1685
 */
class WPSE_141929_Walker extends Walker_Page {
    function start_el( &$output, $page, $depth = 0, $args = array(), $current_page = 0 ) {
        parent::start_el( $output, $page, $depth, $args, $current_page );
        if ( $page->ID == get_option( \'page_for_posts\' ) ) {
            $posts = get_posts(
                array(
                    \'posts_per_page\' => 10,
                )
            );

            if ( $posts ) {
                $output .= \'<ul class="children">\';     
                foreach ( $posts as $post ) {
                    $output .= \'<li><a href="\' . get_permalink( $post->ID ) . \'">\' .get_the_title( $post->ID ) . \'</a></li>\';
                }
                $output .= \'</ul>\';
            }
        }
    }
}
使用中:

wp_list_pages(
    array(
        \'walker\' => new WPSE_141929_Walker,
    )
);

结束

相关推荐