ページネーションとはなんて手のかかる子なのかしら・・・。
やりたいこと
オリジナルの投稿と同じようにカスタム投稿にもページネーションを実装したい。
こまったこと
ページネーションがそこにあっても、ページネーションとしての機能を果たしていない。2ページ目以降に進めない。
カスタム投稿を表示するコード
<div class="">
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$the_query = new WP_Query( array(
'post_status' => 'publish',
'post_type' => 'custompost', //カスタム投稿タイプ名
'paged' => $paged,
) );
if ( $the_query->have_posts() ):
$html_top_result = '<div>';
while ( $the_query->have_posts() ): $the_query->the_post();
?>
<h3>
<?php the_field('works_title') ?>
</h3>
<?php
endwhile;
$html_top_result .= '</div>';
else :
$html_top_result = '<div><p>ありません。</p></div>';
endif;
echo $html_top_result;
?>
</div>
ページネーションを表示するコード
<div class="pagination">
<?php //ページリスト表示処理
global $wp_rewrite;
$paginate_base = get_pagenum_link( 1 );
if ( strpos( $paginate_base, '?' ) || !$wp_rewrite->using_permalinks() ) {
$paginate_format = '';
$paginate_base = add_query_arg( 'paged', '%#%' );
} else {
$paginate_format = ( substr( $paginate_base, -1, 1 ) == '/' ? '' : '/' ) .
user_trailingslashit( 'page/%#%/', 'paged' );
$paginate_base .= '%_%';
}
echo paginate_links( array(
'base' => $paginate_base,
'format' => '?paged=%#%',
'total' => $the_query->max_num_pages,
'mid_size' => 1,
'current' => ( $paged ? $paged : 1 ),
'prev_text' => '< 前へ',
'next_text' => '次へ >',
) );
?>
</div>
それぞれをカスタム投稿一覧を表示する場所(固定ページなら page-●●.php ファイル)に書く。
コードのポイント
ページネーションコード15行目の
'format' => '?paged=%#%',
がポイントでした。
ページネーションでいろいろと検索したところ
'format' => $paginate_format,
と書かれているものが多かったのですが、このformatだとページネーションとして機能しない・・・
format(15行目)を
'format' => '?paged=%#%',
に変更して、以下コードをfunction.phpに追記。
add_filter('redirect_canonical','my_disable_redirect_canonical');
function my_disable_redirect_canonical( $redirect_url ) {
if ( is_archive() ){
$subject = $redirect_url;
$pattern = '//カスタム投稿タイプ名//'; // URLに「/カスタム投稿タイプ名/」があるかチェック
preg_match($pattern, $subject, $matches);
if ($matches){
//リクエストURLに「/カスタム投稿タイプ名/」があれば、リダイレクトしない。
$redirect_url = false;
return $redirect_url;
}
}
}
デザインをcssで整えたら完璧さ!