WordPressのカスタム投稿でarchive内ページネーションを作る方法


予想以上にドはまりしてもう一生やりたくないよ!ってくらいやりたくないのでここでまとめておきますw

相当ごりごりっと解決してしまったのでもっとスマートにやりたかったんですが、色々検索して出てきたものがことごとくうまくいかなかったのでしょうがないです・・・

流れとしては、

  • $wp_queryを一時保存して、新たにWP_Queryクラスのインスタンスを$wp_queryに上書きする形で作る
  • GETの値を調べる(ページが今何ページか調べる)
  • ページネーションの関数で出力する
  • $wp_queryを元に戻す

なぜ$wp_queryを上書きするかというと、デフォルトで多くの関数が$wp_queryを使用して関数の出力を行っているためです(まぁglobalなんでね)

実行環境としては

  • PHP 5.4.24
  • WordPress 3.6.1

それでは以下コードになります。

functions.php

function bmPageNavi() {
  global $wp_rewrite;
  global $wp_query;
  global $paged;
 
  $paginate_base = get_pagenum_link(1);
  if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
    $paginate_format = '';
    $paginate_base = add_query_arg('page', '%#%');
  } else {
    $paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
    untrailingslashit('?page=%#%', 'paged');;
    $paginate_base .= '%_%';  
  }
 
  $result = paginate_links( array(
    'base' => $paginate_base,
    'format' => $paginate_format,
    'total' => $wp_query->max_num_pages,
    'mid_size' => 5,
    'current' => ($paged ? $paged : 1),
  ));
 
  return $result;
}

 

archive.php

<?php
// initialize
$temp = $wp_query; 
$wp_query = null; 
$wp_query = new WP_Query();
// 数値のみ受け取る
$paged = (preg_match("/^[0-9]+$/",htmlspecialchars($_GET['page']))) ? htmlspecialchars($_GET['page']) : 1;
$param = array(
    'posts_per_page' => 2,
    'paged' => $paged,
    'post_type'      => your_post_type,
    'orderby'        => 'post_date',
    'order'          => 'DESC'
);
$wp_query->query($param); 

get_header(); ?>
    <?php if ( $wp_query->have_posts() ) : ?>
        <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
  <?php endwhile; ?>
    <?php endif; ?>
<?php echo bmPageNavi(); // ページネーション出力
$wp_query = null; 
$wp_query = $temp;  // Reset
?>

 

これで自分の場合ちゃんと動きました!

最後に

WordPressでもよくあるだろうページネーションでこんなに大変な思いをするとは思ってませんでした。
でももともとページネーションは複雑ですししょうがないですよね。最終的にどうにかなってよかったです。

WordPressレッスンブック HTML5&CSS準拠
エビスコム
ソシム
売り上げランキング: 10,185

tagamidaiki.comの著者が教えるプログラミングスクール – class Tech(クラステック)

更新情報はFacebookページで!

ブログの更新、読んで役立つ他ブログの記事などを更新しています。




関連のある記事


カテゴリーPHP