回答:
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
私の一部が完全に忘れていた:-/
found_posts
「現在のクエリパラメータに一致する見つかった投稿の総数」というプロパティもあり、wp_count_posts()は一種のオーバーヘッドです。
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; ?>
それが役に立てば幸い.. :)
$var
、クエリかどうかを確認しif( is_a( $var, 'WP_Query' ) )
ます。クエリオブジェクトの場合はtrueを返します。
上記のように、最大ページ数を取得する簡単な方法は次のとおりです。
global $wp_query
$wp_query->max_num_pages
私のすべてのアーカイブページで機能する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>
$wp_query->max_num_pages
ですか?