我已经为自定义分类创建了一个分页的术语列表,但分页没有正确显示。无论我设置的每页有多少帖子,都只输出两页。
因此,对于6个帖子并设置为每页6个,我看到两个页面,第二个是空白。有6个帖子,每页2个,我看到两个页面,没有第三页(我尝试在网址栏中输入/ 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();
我的functions.php文件中的custom_page_navi()函数的代码:
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>';
}
答案 0 :(得分:3)
您可以使用以下代码创建自定义页面模板文件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
答案 1 :(得分:0)
的价值
'end_size' => 2, 'mid_size' => 0
与codex中提到的默认值不同,您可以尝试将它们更改为
'end_size' => 1,
'mid_size' => 2