現在のページ番号を取得する


14

1ページあたり20件の投稿がある状況。下部にいくつかの素敵なページリンクを作成するために、現在のページ番号を取得したいと思います。現在のページを取得するにはどうすればよいですか。私はこれを試しました

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

すべてのページで1 of 1と表示されています。

何か案は、

素晴らしい

回答:


22

WordPressがこのようなページネーションを使用し$pagedている場合、キーとなるクエリ変数があります。したがって、ページ1は$paged=115ページです$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たのと同じ方法でフェッチする必要がある場合があります。$pagedget_query_var()


8
なぜ使用しないの$wp_query->max_num_pagesですか?
t31os 2011年

1
それは健全な代替案です。$wp_query私の一部が完全に忘れていた:-/
EAMann

@EAMann BTW:found_posts「現在のクエリパラメータに一致する見つかった投稿の総数」というプロパティもあり、wp_count_posts()は一種のオーバーヘッドです。
jave.web 2017年

8

1行のコードでそれを行うこともできますが、繰り返しになりますが、他の場所にコードを追加したい場合があるので、通常は関数の方が便利です。

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"メッセージを表示したい場所で関数を呼び出すだけです。

<?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
私があなただったら$var、クエリかどうかを確認しif( is_a( $var, 'WP_Query' ) )ます。クエリオブジェクトの場合はtrueを返します。
John P Bloch、

はい、それは実際には非常に賢明なアイデアです。
t31os 2011


0

私のすべてのアーカイブページで機能する1つのオプションは次のとおりです。

$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に。最初に1ページ以上の場合、次にelseページングされません。これは、このタイプの私のarchive.phpまたはテンプレートに入ります。それは生成します:

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

または

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.