每页有20条帖子的情况。我想获取当前页码,以便在底部进行一些漂亮的页面链接。您如何获得当前页面。我尝试过

<?php echo '(Page '.$page.' of '.$numpages.')'; ?>


它在每个页面上只显示1页,共1页。 >奇妙

#1 楼

当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()

评论


为什么不使用$ wp_query-> max_num_pages?

– t31os
2011-3-18在15:47

这是一个不错的选择。我完全忘记的$ wp_query的一部分在那儿:-/

–EAMann
2011-3-18在17:49

@EAMann顺便说一句:还有found_posts属性“找到与当前查询参数匹配的帖子总数”,wp_count_posts()有点麻烦。

–jave.web
17年3月13日在14:31

#2 楼

您可以只用一行代码来完成此操作,但是再一次,您可能想在其他地方添加代码,因此通常使用一个函数更为有用。

function current_paged( $var = '' ) {
    if( empty( $var ) ) {
        global $wp_query;
        if( !isset( $wp_query->max_num_pages ) )
            return;
        $pages = $wp_query->max_num_pages;
    }
    else {
        global $$var;
            if( !is_a( $$var, 'WP_Query' ) )
                return;
        if( !isset( $$var->max_num_pages ) || !isset( $$var ) )
            return;
        $pages = absint( $$var->max_num_pages );
    }
    if( $pages < 1 )
        return;
    $page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
    echo 'Page ' . $page . ' of ' . $pages;
}


注意:代码可以进入函数文件。

只需在要显示“ Page x of y”消息的地方调用函数,例如

/>
如果您需要代码来使用自定义查询,即您使用WP_Query创建的查询,然后只需将保存查询的变量名传递给函数。

不存在的查询示例:

<?php current_paged(); ?>


使用先前发布的功能获取自定义查询的当前页面。您正在寻找单线飞机,那么应该这样做。.

$fred = new WP_Query;
$fred->query();
if( $fred->have_posts() ) 
... etc..


希望有帮助.. :)

评论


如果是我,我将检查$ var是否为查询:if(is_a($ var,'WP_Query'))如果是查询对象,则将返回true。

– John P Bloch
2011-3-18 14:30



是的,这实际上是一个非常明智的想法!

– t31os
2011年4月16日在10:18

#3 楼

如上所述,一种获取最大页面数的简单方法是:

 global $wp_query

$wp_query->max_num_pages

 


#4 楼

适用于我所有存档页面的一个选项是:

$paged_maxnum = $GLOBALS['wp_query']->max_num_pages;

if ( $paged_maxnum > 1 ) {

    $paged_current_page = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
    $title_page_nrs = 'page nr ' . $paged_current_page . ' of ' . $paged_maxnum;

    echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Your Website Name</title>';

} else {

    echo '<title>' . get_the_archive_title( '', false ) . ' | Your Website Name</title>'; 

}


首先查询此wp_query中是否有多个页面,然后通过$paged_current_page将标题与当前页面连接起来和总页数为$title_page_nrs。最后echo它。如果第一页以上,则如果未分页,则为else。这进入我的archive.php或此类模板。它产生:

<title>Taxonomy title - page nr 1 of 4 | Your Website Name</title>

<title>Taxonomy title | Your Website Name</title>