返回

WordPress 子分类分页难题彻底解决,告别分页烦恼

php

WordPress 子分类分页:彻底解决分页难题

问题剖析

随着网站内容的不断增加,分页成为一个至关重要的功能,让用户可以轻松浏览大量信息。然而,在 WordPress 中对子分类进行分页时,我们经常遇到一些问题:

  • 分页导航不正常,点击“下一页”时仅刷新页面,内容未改变
  • 分页 URL 不会更新,始终显示 "/page/2" 等固定链接
  • 上一页导航可能指向不存在的页面或显示错误信息

解决之道

要解决这些问题,我们需要重新审视 WordPress 分页机制的实现。以下是一种行之有效的分页解决方案:

1. 获取子分类列表

首先,我们需要获取待分页的子分类列表。我们可以使用 get_categories() 函数,并指定 child_of 参数来获取特定父分类下的所有子分类:

$descendant = array('child_of' => 1);
$cats = get_categories($descendant);

2. 设置分页参数

接下来,我们定义一些分页参数,包括每页显示的子分类数量、总子分类数量、总页数以及当前页码:

$limit = 5; // 每页显示的子分类数量
$total = count($cats); // 子分类总数
$pages = ceil($total / $limit); // 总页数
$current = isset($_GET['paged']) ? $_GET['paged'] : 1; // 当前页码

3. 计算偏移量

偏移量用于确定从列表中提取哪些子分类用于当前页面。它是通过将当前页码减去 1,再乘以每页显示的子分类数量计算出来的:

$offset = ($current - 1) * $limit;

4. 获取当前页面的子分类

使用 array_slice() 函数,我们可以从子分类列表中提取当前页面的子分类:

$cats = array_slice($cats, $offset, $limit);

5. 输出子分类

现在,我们可以循环输出当前页面的子分类,并显示它们的名称和文章数量:

foreach ($cats as $cat) { ?>
    <div>
        <a href="<?php echo esc_url(get_category_link($cat->term_id)); ?>"><?php echo $cat->name; ?></a>

        <?php $query = $cat->count; ?>
        <?php if ($query == 1) $query .= " Post"; else $query .= " Posts"; echo '('.$query.')'; // Posts Count ?>
    </div>
    <?php } ?>

6. 输出分页导航

最后,我们创建分页导航,以便用户可以浏览所有页面:

<br>
<?php echo "<p>(Page: ". $current . " of " . $pages .")</p>"; ?>
<br>

<? if($previous): ?>
    <a href="<?php home_url(); ?>?paged=<?= $previous ?>">Previous</a>
<? endif ?>
<? if($next) : ?>
    <a href="<?php home_url(); ?>?paged=<?= $next ?>">Next</a>
<? endif ?>

完整代码示例

将以上步骤整合在一起,得到完整的分页代码示例:

<?php
    $descendant= array('child_of'=>1);
    $cats = get_categories($descendant);

    $limit = 5;

    $total = count($cats);
    $pages = ceil($total / $limit);

    $current = isset($_GET['paged']) ? $_GET['paged'] : 1;
    $offset = ($current - 1) * $limit;
    $cats = array_slice($cats, $offset, $limit);
?>

<div class="container">
    <?php foreach ($cats as $cat) { ?>
        <div>

        <a href="<?php echo esc_url( get_category_link( $cat->term_id ) ); ?>"><?php echo $cat->name; ?></a>

        
        <?php $query = $cat->count; ?>
        <?php if ($query == 1) $query .= " Post"; else $query .=" Posts"; echo '('.$query.')'; //Posts Count ?>
        </div>
        <?php } ?>
        <br>
    <?php echo "<p>(Page: ". $current . " of " . $pages .")</p>"; ?>
    <br>


    <? if($current > 1): ?>
        <a href="<?php home_url(); ?>?paged=<?= $current-1 ?>">Previous</a>
    <? endif ?>
    <? if($current < $pages) : ?>
        <a href="<?php home_url(); ?>?paged=<?= $current+1 ?>">Next</a>
    <? endif ?>
</div>

结论

通过实施这种经过验证的解决方案,你可以有效地为 WordPress 子分类创建分页导航。这种方法提供了更直观的用户体验,让访问者可以轻松地浏览大量子分类,并找到他们感兴趣的内容。

常见问题解答

1. 如何调整每页显示的子分类数量?

修改 $limit 变量即可调整每页显示的子分类数量。

2. 如何自定义分页导航的外观?

你可以使用 CSS 样式来定制分页导航的样式和布局。

3. 如何将分页添加到特定的分类页面?

在分类页面模板文件中包含分页代码,并使用 query_posts() 函数来获取特定分类的子分类。

4. 为什么我的分页导航显示“404 页面未找到”?

确保分页代码中使用的 URL 正确无误,并且在你的 .htaccess 文件中启用了分页重写规则。

5. 如何在 Ajax 驱动的网站上实现分页?

使用 JavaScript 和 Ajax 技术,你可以实现异步分页,无需重新加载整个页面。