单父帖子列出带有分页的子帖子

时间:2012-03-11 作者:turbonerd

我想在this answer 因此,我可以合并分页和其他一些功能。

我们的词汇表中有1600多个词条,因此某些字母的词条远远超过20个(我的最多帖子/页)。

如果用户单击“a”或访问“/dev/glossary/a”,我希望他们看到父级为“a”的所有条目的列表。

我还想:

要按字母顺序排列的列表要显示在页面顶部的父级条目数要分页的列表我已经尝试过使用$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1; 以及paged 中的参数WP_Query, 但是我的next_posts_link 甚至不显示。

我不太确定从何处开始,因此非常感谢您的指导。

3 个回复
最合适的回答,由SO网友:Dave Hunt 整理而成

类似这样的操作应该可以实现按标题排序和使用分页的技巧:

    global $wp_rewrite, $wp_query;
    if ( have_posts() ) : while ( have_posts() ) : the_post();  ?>

    <header class="entry-header">
        <h1 class="entry-title"><?php the_title(); ?></h1>
    </header><!-- .entry-header -->

    <?php   //If top level, find children
        if($post->post_parent == 0):
            $children = new WP_Query(array(
                \'post_type\'=>\'page\',
                \'post_parent\'=>$post->ID,
                \'paged\' => $paged,
                \'posts_per_page\' => 20,
                \'orderby\' => \'title\',
                \'order\' => ASC
            ));

            if($children->have_posts()): ?>
                <ul>
                <?php while ( $children->have_posts() ) : $children->the_post(); ?>
                    <li> <?php the_title();?> </li>
                <?php endwhile; ?>
                </ul>

                $wp_query->query_vars[\'paged\'] > 1 ? $current = $wp_query->query_vars[\'paged\'] : $current = 1;

                $pagination = array(
                    \'base\' => @add_query_arg(\'paged\',\'%#%\'),
                    \'total\' => $wp_query->max_num_pages,
                    \'current\' => $current
                );

                if( $wp_rewrite->using_permalinks() )
                    $pagination[\'base\'] = user_trailingslashit( trailingslashit( remove_query_arg( \'s\', get_pagenum_link( 1 ) ) ) . \'page/%#%/\', \'paged\' );

                if( !empty($wp_query->query_vars[\'s\']) )
                    $pagination[\'add_args\'] = array( \'s\' => get_query_var( \'s\' ) ); ?>

                <?php echo paginate_links( $pagination ); ?>

            <?php else: ?>
                <?php echo \'No children\';?>
            <?php endif; ?>

            <?php wp_reset_postdata(); ?>
        <?php else://Not top level, display normal post ?>
            <?php the_content(); ?>
        <?php endif;?>

    <?php endwhile; // end of the loop. ?>
<?php endif; ?>
您可以将paginate\\u links函数移动到要分页的任何位置。

至于显示条目的总数,可以在循环中使用$wp\\U查询变量。

<?php echo $wp_query->found_posts; ?>
<小时>

SO网友:helgatheviking

我写了一篇关于从帖子标题创建自定义“词汇表”分类法的文章。这并不完美,但可能与此相关:

http://www.kathyisawesome.com/424/alphabetical-posts-glossary/

它是自动的,但如果自动生成的字母工作得不够好,没有理由不能添加元盒。

从那以后,我可能会使用pre\\u get\\u posts()钩子强制每页20篇文章和按字母顺序排列的orderby(真不敢相信我还没有orderby…可能会在某个时候更新我的教程)。

SO网友:turbonerd

感谢@DaveHunt的回答以及this excellent answer, 我已经能够将以下代码组合在一起。

It\'s important to note that because the page is_single(), the paged variable will always be set to 1. 由于我的疏忽,我在这方面花了很多时间!

if($post->post_parent == 0):

    if ( get_query_var( \'tpage\' ) > 0 )
        $paged = get_query_var( \'tpage\' );
    else
        $paged = 1;

    $base = trailingslashit( get_permalink( $post->ID ) );

    $children = new WP_Query( array(
        \'post_type\'=>\'glossary\',
        \'post_parent\'=>$post->ID,
        \'paged\' => $paged,
        \'posts_per_page\' => 20,
        \'orderby\' => \'title\',
        \'order\' => ASC
    ) );

    if ( $children->have_posts() ) : ?>

        <?php while ( $children->have_posts() ) : $children->the_post(); ?>
            <?php get_template_part( \'list\', \'glossary\' ); ?>
        <?php endwhile; ?>

        <?php

            $links = array(
                \'base\' => $base . \'tpage/%#%\',
                \'total\' => $children->max_num_pages,
                \'current\' => $paged
            );

        ?>

        <div class="navigation">
            <?php echo paginate_links( $links ); ?>
        </div>

    <?php else: ?>
        Sorry, there are no entries in our glossary for this letter.
    <?php endif; ?>

    <?php wp_reset_postdata(); ?>

<?php else : ?>
希望这能帮助其他遇到类似问题的用户。

结束

相关推荐

The pagination doesn't work

我已经创建了一个新的WordPress主题,我完成了。。但我有一个问题。我无法进行分页。我使用“wp paginate”插件,并在索引中添加了以下代码。php:<?php if(function_exists(\'wp_paginate\')) { wp_paginate(); } ?> 但这对我的网站不起作用。前端和标记中仍然没有任何内容。我能做什么?这是我的索引。php: <?php get_header(); ?>