【问题标题】:Wordpress paginated list of terms showing wrong number of pages?Wordpress 分页的术语列表显示错误的页数?
【发布时间】:2014-01-05 04:47:42
【问题描述】:

我为自定义分类创建了一个分页的术语列表,但分页显示不正确。不管我每页设置多少帖子,只输出两页。

所以有 6 个帖子并设置为每页 6 个,我看到两页,第二页是空白的。每页有 6 个帖子和 2 个帖子,我看到两页,没有第三页(我尝试在 url 栏中输入 /page/3/ 并且找不到该页面,所以这不仅仅是分页按钮的问题但似乎是 Wordpress 输出的页数有问题)。

谁能明白为什么会这样?如何让分页正常工作?

如果有人可以建议一种使此分页正常工作的方法,我已经为这个问题添加了赏金。


19/12 更新:

我是解决这个问题的一部分。我发现部分问题似乎与 WP 中的阅读设置有关。我将阅读设置设置为每页 6 个,这就是为什么无论我在模板文件中的 $posts_per_page 中设置什么,我都只能得到 2 页的输出。

现在,如果我确保阅读设置与模板文件中设置的数字相匹配,我可以让 Wordpress 输出所有页面和分页链接,但我总是从 for 循环中获得额外的输出,导致 div 为空.这在某些情况下会导致额外的页面,具体取决于最后一页上的帖子数量。我在最后一页上也没有分页链接。


archive-prints.php 的代码摘录:

$posts_per_page = 6;

$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$offset = ( $page - 1 );

$categories = get_terms('prints_cat');

for( $i = $offset * $posts_per_page; $i < ( $offset + 1 ) * $posts_per_page; $i++ ) {
    $category = $categories[$i];
    echo '<div class="cat-preview"><a href="';
    echo get_term_link($category->slug, 'prints_cat');
    echo '"><h2>';
    echo $category->name;
    echo '</h2></a></div>';
}
unset( $category );

custom_page_navi();

我的 custom_page_navi() 函数的代码,来自我的 functions.php 文件:

function custom_page_navi() {
global $wp_query;
$bignum = 999999999;
if ( $wp_query->max_num_pages <= 1 )
return;

echo '<nav class="pagination">';

    echo paginate_links( array(
        'base'          => str_replace( $bignum, '%#%', esc_url( get_pagenum_link($bignum) ) ),
        'format'        => '',
        'current'       => max( 1, get_query_var('paged') ),
        'total'         => $wp_query->max_num_pages,
        'prev_text'     => 'Prev',
        'next_text'     => 'Next',
        'type'          => 'list',
        'show_all'      => false,
        'end_size'      => 2,
        'mid_size'      => 0
    ) );

echo '</nav>';

}

【问题讨论】:

  • 您在哪里添加代码,您是否添加了带有自定义模板的页面?还是您添加了taxonomy-{taxonomy}.php 文件?
  • 我已经编辑了上面的问题以澄清。我正在使用自定义帖子类型的存档模板 - archive-{taxonomy}.php

标签: wordpress pagination custom-taxonomy


【解决方案1】:

您可以使用以下代码创建自定义页面模板文件tpl_list.php

<?php
/**
 * Template Name: Paginated list of terms for a custom taxonomy
 *
 */

// Edit:
$taxonomy = 'prints_cat';
$number   = 3; // number of terms to display per page

// Setup:
$page         = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$offset       = ( $page > 0 ) ?  $number * ( $page - 1 ) : 1;
$totalterms   = wp_count_terms( $taxonomy, array( 'hide_empty' => TRUE ) ); 
$totalpages   = ceil( $totalterms / $number );

// Debug:
// printf( 'taxonomy: %s - number: %s - page: %s - offset: %s - totalterms %s - totalpages: %s' , $taxonomy, $number, $page, $offset, $totalterms, $totalpages );

// Here I list all the available paramters to get_terms():
$args = array(
    'orderby'       => 'name', 
    'order'         => 'ASC',
    'hide_empty'    => true, 
    'exclude'       => array(), 
    'exclude_tree'  => array(), 
    'include'       => array(),
    'number'        => $number, 
    'fields'        => 'all', 
    'slug'          => '', 
    'parent'         => '',
    'hierarchical'  => true, 
    'child_of'      => 0, 
    'get'           => '', 
    'name__like'    => '',
    'pad_counts'    => false, 
    'offset'        => $offset, 
    'search'        => '', 
    'cache_domain'  => 'core'
); 

$terms = get_terms( $taxonomy, $args );

foreach ( $terms as $term )
{
    printf( '<div class="cat-preview"><h2><a href="%s">%s</a></h2></div>',
            get_term_link($term->slug, 'country'),
            $term->name,
            $term->name 
        );
}

// Show custom page navigation
printf( '<nav class="pagination">%s</nav>', 
            custom_page_navi( $totalpages, $page, 3, 0 ) 
          );

在哪里

function custom_page_navi( $totalpages, $page, $end_size, $mid_size )
{
    $bignum = 999999999;

    if ( $totalpages <= 1 || $page > $totalpages ) return;

    return paginate_links( array(
        'base'          => str_replace( $bignum, '%#%', esc_url( get_pagenum_link( $bignum ) ) ),
        'format'        => '',
        'current'       => max( 1, $page ),
        'total'         => $totalpages,
        'prev_text'     => 'Prev',
        'next_text'     => 'Next',
        'type'          => 'list',
        'show_all'      => false,
        'end_size'      => $end_size,
        'mid_size'      => $mid_size
    ) );
}

创建一个页面(例如名为prints)并选择上面的页面模板。

然后就可以访问了:

   example.com/prints/
   example.com/prints/page/2/
   example.com/prints/page/3/

如果你取消注释调试行,你会得到例如:

taxonomy: prints_cat - 
number: 3 - 
page: 2 - 
offset: 3 - 
totalterms 6 - 
totalpages: 2

【讨论】:

    【解决方案2】:

    你的价值

    'end_size' =&gt; 2, 'mid_size' =&gt; 0

    与codex中提到的默认值不同,你可以尝试将它们更改为

    'end_size' => 1, 'mid_size' => 2

    【讨论】:

    • 我已经尝试了这些设置的各种值,包括默认值,但它似乎不会影响问题。 (还是)感谢你的建议。请参阅上面已编辑的问题以获取更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多