予想以上にドはまりしてもう一生やりたくないよ!ってくらいやりたくないのでここでまとめておきます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
2, 'paged' => $paged, 'post_type' => your_post_type, 'orderby' => 'post_date', 'order' => 'DESC' ); $wp_query->query($param); get_header(); ?> have_posts() ) : ?> have_posts() ) : $wp_query->the_post(); ?>
これで自分の場合ちゃんと動きました!
最後に
WordPressでもよくあるだろうページネーションでこんなに大変な思いをするとは思ってませんでした。 でももともとページネーションは複雑ですししょうがないですよね。最終的にどうにかなってよかったです。
WordPressレッスンブック HTML5&CSS準拠
posted with amazlet at 17.02.27
エビスコム
ソシム
売り上げランキング: 10,185