循环内部,如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版中添加的,所以最近才添加)。