WordPressは4.1.0からthe_posts_navigation
関数を持っています。しかし、私はwp_query
やget_posts
と一緒に使う方法がわかりません。次のコードはpageのテンプレートファイルにあります。
wp_queryメソッド:
<?php
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} else if ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
$get_posts=new wp_query('post_type=case&posts_per_page=2&paged='.$paged);
while($get_posts->have_posts()):$get_posts->the_post();
the_title();
endwhile;
the_posts_pagination( array(
'prev_text' => __( 'Previous page', 'cm' ),
'next_text' => __( 'Next page', 'cm' ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'cm' ) . ' </span>',
) );
?>
get_postsメソッド:
<?
while(have_posts()):the_post();
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} else if ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
$case_posts=get_posts('post_type=case&posts_per_page=2&paged='.$paged);
echo '<pre>';
print_r($case_posts);
echo '</pre>';
foreach($case_posts as $case_post){
echo $case_post->post_title;
}
endwhile;
// Previous/next page navigation.
the_posts_pagination( array(
'prev_text' => __( 'Previous page', 'cm' ),
'next_text' => __( 'Next page', 'cm' ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'cm' ) . ' </span>',
) );
?>
それらは機能せず、ページ付けを表示しますが、アドレスバーに http://127.0.0.1/gdboer /?page_id = 74&page = 2 を手動で入力すると機能します。誰が私を助けることができる、どうもありがとう!
the_posts_navigation()
は単純に get_the_posts_navigation()
のラッパー関数で、これは単にpaginate_links
のラッパー関数です。最初の2つの関数は、paginate_links
で使用されているものとまったく同じパラメーターを使用し、実際には後者の関数にも渡します。
get_the_posts_navigation()
とthe_posts_navigation()
は多くのカスタムコーディングを排除するので良い新機能であり、番号の付けられたページネーションリンクを望む新規の未経験ユーザーにとってよりユーザーフレンドリーです。
このget_the_posts_navigation()
の唯一の欠陥は、メインクエリ(paginate_links
)のページ数が1ページ未満の場合、開発者が$wp_query
関数を条件付きステートメントにラップしたことです(最初のページは0
、2ページ目は2
です)。リンクを表示しないでください。これは、ページテンプレートのカスタムクエリでは問題があります。ページは常に1ページしかないので、これらの関数はカスタムクエリでは機能しません。
あなたがthe_posts_navigation()
を使わなければならないならば、唯一の本当の回避策は この投稿 の@ChipBennet答えを利用することです。私はメインのクエリを無効にするのはあまり好きではありません(私の考えではこれはquery_posts
を使うようなものです)が、get_the_posts_navigation()
をカスタムクエリで動作させる他の解決策は見当たりません。
カスタムテンプレートがあり、ページネーションコンポーネントを表示するのに何時間も苦労しました。ここに私のために働いていたものがあります。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => 3,
'orderby' => 'menu_order',
'order'=> 'ASC',
'paged'=>$paged,
'post_type' => 'projects'
);
$projects = new WP_Query($args);
<!-- working example of pagination with numbers -->
...<?php endwhile;?>
<?php
$GLOBALS['wp_query']->max_num_pages = $projects->max_num_pages;
the_posts_pagination( array(
'mid_size' => 1,
'prev_text' => __( 'Back', 'green' ),
'next_text' => __( 'Onward', 'green' ),
'screen_reader_text' => __( 'Posts navigation' )
) ); ?>
OR
<!-- working example of pagination without numbers -->
...<?php endwhile;?>
<?php next_posts_link( 'next', $projects->max_num_pages ); ?>
<?php previous_posts_link('prev') ?>
この関数は get_the_posts_pagination()
を使います。これはGLOBAL wp_query
を使ってpaginate_links()
関数を設定するので、get_posts
ではうまくいかないと思います。
関数paginate_links()
を単独で、または関数posts_nav_link()
を使ってみてください。
シモンズ:あなたはwp_reset_query()
を使うようにしてください