获取当前页码


15

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

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

它仅在每页上显示第1页,共1页。

有任何想法吗,

奇妙

Answers:


23

当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())进行获取。


8
为什么不使用$wp_query->max_num_pages
t31os 2011年

1
这是一个不错的选择。部分$wp_query我完全忘了在那里: - /
EAMann

@EAMann BTW:还有一个found_posts属性“找到的与当前查询参数匹配的帖子总数”,wp_count_posts()有点麻烦。
jave.web

8

您可以用一行代码来完成此操作,但是再一次,您可能希望将代码添加到其他位置,因此函数通常更有用。

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;
}

注意:代码可以进入您的功能文件。

只需在要显示“ y的第x页”消息的位置调用该函数,例如。

<?php current_paged(); ?>

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

示例不存在的查询:

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

使用先前发布的功能为定制查询获取当前页面。

<?php current_paged( 'fred' ); ?>

如果您只是想完全忘记自定义查询支持,而您正在寻找单行代码,那么应该这样做。

<?php echo 'Page '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' of ' . $wp_query->max_num_pages; ?>

希望有帮助.. :)


1
如果我是我,我将检查if是否$var是一个查询:if( is_a( $var, 'WP_Query' ) )如果它是一个查询对象,则将返回true。
John P Bloch

是的,这实际上是一个非常明智的想法,完成了!
t31os 2011年


0

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

$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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.