带自定义查询的分页(不使用帖子)

时间:2014-02-18 作者:Zeno Kapitein

我已经研究这个问题好几个星期了,经常遇到同样的问题。这是一个有点复杂的设置:

我有一个category 称为“档案”。我还有一个custom taxonomy “档案”,用于对关于同一新闻事件或故事的帖子进行分组。当有人创建帖子时,他们可以将帖子分配给特定的档案,然后将其放入“档案”类别。这样,所有档案贴都在同一个类别下归档,同时仍然可以将故事彼此分离。

我需要category page 对于“档案”类别,显示所有custom taxonomy terms 在分类学“档案”中。反过来,这些链接到他们自己的特定档案列表。我创建了分类档案。php文件,它取代了默认的类别页面,所以这不再是一个问题。

使用其他论坛帖子,特别是this one, 我已经解决了大部分问题。“类别”页面显示所有分类术语、链接和所有内容,并可以将它们拆分为多个页面。(这有点骇人,因为WordPress通常不使用术语作为主要内容块,而是使用帖子)。

我现在唯一的问题是让第二页、第三页等工作正常。在第一页之外,它只显示默认索引。我的主题的php文件。

这是完整的模板页面。有人能找出它的毛病吗?我试了又试,但似乎找不到问题所在。

<?php get_header(); ?>

<?php get_sidebar (); ?>

<section class="articles grid main-content category">
    <header class="grid-header">
            <h2><?php single_cat_title();?></h2>
    </header>
        <?php

            if ( get_query_var( \'paged\' ) ) {
                $paged = get_query_var(\'paged\');
                }
            else if ( get_query_var( \'page\' ) ) {
                $paged = get_query_var( \'page\' );
                }
            else {
                $paged = 1;
                }

            $per_page    = 9;
            $number_of_terms = count( get_terms( "dossiers") );
            $offset      = $per_page * ( $paged - 1) ;

            // Setup the arguments to pass in
            $args = array(
                \'order\'     => \'ASC\',
                \'orderby\'      => \'menu_order\',
                \'offset\'    => $offset,
                \'paged\'    => $per_page
            );

            // Gather the terms
            $terms = get_terms("dossiers", $args);

            $count = count($terms);
            if ( $count > 0 ){
                echo "<ul>";
                foreach ( $terms as $term ) {?>
                    <li class="article">
                        <a href="<?php echo get_term_link( $term ); ?>">
                            <?
                                if ( get_field(\'banner\', $term->taxonomy._.$term->term_id) ) { // check if the post has a Banner Image assigned to it.
                                    $image = get_field(\'banner\', $term->taxonomy._.$term->term_id);
                                    echo \'<img class="wp-post-image" src="\'.$image[sizes][\'thumbnail\'].\'" />\';
                                }
                                else {
                                    echo \'<img class="wp-post-image" src="\' . get_bloginfo( \'stylesheet_directory\' ) . \'/img/missing-thumbnail.png" />\';
                                }
                            ?>
                            <div class="meta-info" />
                                <div class="caption" data-category="<?php $category = get_the_category(); echo $category[0]->slug; ?>"><?php echo $term->name; ?> </div>
                            </div>
                        </a>
                    </li>
                 <?}
                 echo "</ul>";
             }
        ?>
</section>

<nav class="pagination">

    <?php 

            if($terms) {

                    $big = 999999999; // need an unlikely integer
                    echo paginate_links( array(
                        \'base\'    => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
                        \'format\'  => \'/page/%#%\',
                        \'current\' => $paged,
                        \'total\'   => ceil( $number_of_terms / $per_page ), // 9 items per page
                        \'type\' => \'list\',
                        \'mid_size\' => 5
                    ) );

            }
?>
    </nav>

<?php get_footer(); ?>

1 个回复
SO网友:Steven Jones

看起来你想用get_terms() 以同样的方式使用WP_Query() 这是你做不到的。

\'paged\'    => $per_page
这不是要传递给的有效参数get_terms()

此外,每个帖子类型都有一个允许分页的重写规则,例如/2/,但是这与terms不同,因此WP将404它(它只显示index.php,因为您没有404)。

除非您想创建自己的分页(使用重写规则),否则循环的焦点必须是某种帖子,而不是一个术语——因此,最好考虑是否有更好的方法来实现这一点。

结束

相关推荐

Pagination for user list

我使用get_user() 作用但我需要把结果分页。我试了很多,但没有成功。下面是代码,它没有按预期工作:$args = array( \'meta_query\' => array( array( \'key\' => \'ib_s2member_custom_fields\', \'value\' => trim($_GET[\"country\"]), \'compare\' => \