如何获取一个帖子分页中的页数?

时间:2018-05-08 作者:Edogawa Kudo

有没有办法查询分页的单个帖子的页数/最后一页<!--nextpage--> 在wordpress上?

function count_post_pages($post_id) {
    $the_post = get_post($post_id);
    return count(explode(\'<!--nextpage-->\', $the_post->post_content));
}
我不确定这是否是正确的做法,但有人能帮我。。。

3 个回复
最合适的回答,由SO网友:gmazzap 整理而成

循环内部,如michael pointed out 你可以参考$numpages 全局变量。

在循环之外,您的代码几乎很好。

作为页数<!--nextpage--> + 1,可以通过执行以下操作保存函数调用:

$numOfPages = 1 + substr_count($the_post->post_content, \'<!--nextpage-->\');
作为一个快速而不是肮脏的解决方案,这是完全好的。

然而,该代码不会考虑过滤器和其他次要因素(例如。<!--nextpage--> 在文章的一开始,内容被忽略)。

因此,为了与核心代码完全兼容,您的函数应该类似于:

function count_post_pages($post_id) {
    $post = get_post($post_id);
    if (!$post) {
       return -1;
    }

    global $numpages;
    $q = new WP_Query();
    $q->setup_postdata($post);

    $count = $numpages;

    $q->reset_postdata();

    return $count;
}
这与核心代码完全兼容,但也更“昂贵”,并且触发的钩子比您实际需要的要多(可能有意外的副作用)。

第三种解决方案是:

function count_post_pages($post_id) {
    $post = get_post($post_id);
    if (!$post) {
       return -1;
    }

    $content = ltrim($post->post_content);
    // Ignore nextpage at the beginning of the content
    if (strpos($content, \'<!--nextpage-->\') === 0) {
         $content = substr($content, 15);
    }

    $pages = explode(\'<!--nextpage-->\', $content);
    $pages = apply_filters(\'content_pagination\', $pages, $post);

    return count($pages);
}
此解决方案相对“便宜”,而且完全符合核心要求<实际上,目前这段代码存在的问题是,它复制了一些可能在未来版本中更改的代码(例如,“content\\u pagination”过滤器是在4.4版中添加的,所以最近才添加)。

SO网友:Michael

看看https://codex.wordpress.org/Global_Variables#Inside_the_Loop_variables

在循环中,与<!--nextpage--> 标签包括:

$page - 实际子页,

$multipage - (布尔)=1(如果使用下一页)

$numpages - 子页面总数

SO网友:huykon225

WordPress使用这样的分页时,有一个查询变量$paged 钥匙在上面。所以第1页是$paged=1 第15页是$paged=15.

可以使用以下代码获取此变量的值:

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;获取总页数有点棘手。首先,您必须统计数据库中的所有帖子。然后筛选发布帖子的依据(相对于草稿、计划、垃圾等)。然后,您必须将此计数除以您希望在每个页面上显示的帖子数:

$total_post_count = wp_count_posts(); $published_post_count = $total_post_count->publish; $total_pages = ceil( $published_post_count / $posts_per_page );我还没有测试过,但你可能需要$posts_per_page 和你拿的一样$paged (使用get_query_var()).

结束

相关推荐

Pagination reset problem

我需要修复此网页。如果您想查看代码,请附上此页。当用户做出选择时,每个选项卡上的分页不会重置为1。这需要在他们单击选项卡时重置,如果要返回结果,分页显示为1。用户必须仍然能够通过url直接访问页面,即:http://thedemonsjumble.com/pcdev/archives/category/uncategorised/page/3/#latest有没有人对如何着手解决这个问题有什么想法。任何hep都将不胜感激。亲切的问候更改选项卡的链接:<div class=\"container\"&