【问题标题】:Pagination doesn't work when offset is set in WordPress在 WordPress 中设置偏移量时分页不起作用
【发布时间】:2021-01-24 01:57:58
【问题描述】:

谁能解释一下为什么我的分页不起作用?
请看下面的代码

<?php

$args = array(
    'post_type' => 'post',
    'offset' => '1',
    'page' => $page,
    'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1),
);

query_posts($args);
$i = 1;
if (have_posts()) :
    while (have_posts()) : the_post(); 

?>

当我评论或删除 'offset' =&gt; '1' 时分页有效。
有没有替代的offset方式?

任何帮助将不胜感激。
谢谢。

【问题讨论】:

标签: php wordpress pagination wordpress-theming


【解决方案1】:
<?php
    $current_page = get_query_var('paged');
    $current_page = max( 1, $current_page );
    $per_page = 2;
    $offset_start = 1;
    $offset = ( $current_page - 1 ) * $per_page + $offset_start;

    $args = array(  
        'post_type' => 'podcast',
        'post_status' => 'publish',
        'posts_per_page' => $per_page,
        'offset' => $offset,
        'paged' => $current_page,
    );
    $query = new WP_Query( $args );
    $total_rows = max( 0, $query->found_posts - $offset_start );
    $total_pages = ceil( $total_rows / $per_page );
?>

<?php if($query->have_posts()): ?>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>

    <?php endwhile; ?>
    <?php
        echo paginate_links(array(
            'total'   => $total_pages,
            'current' => $current_page,
            'next_text'=> "Next",
            'prev_text'=> "Prev",
        ));
    ?>
<?php endif; wp_reset_query(); ?>

这对我有用。

【讨论】:

  • 请添加 cmets 并解释你的答案。
【解决方案2】:

This 文章解释了如何在查询中使用 WordPress 的 offset 值而不破坏 WordPress 的内置分页。

您需要编写一些额外的代码来手动处理分页;你需要检测一个循环是否有额外的页面,然后为当前页面动态计算适当的偏移量。

您将使用 WordPress 中内置的 pre_get_posts 挂钩。请参阅Codex。

【讨论】:

    猜你喜欢
    • 2013-04-28
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2012-09-26
    • 1970-01-01
    相关资源
    最近更新 更多