WP_Term_QueryでWP-PageNaviを使用する
目次
概要
ページネーションを設置する時に大変便利なWP-PageNaviのプラグインですが、執筆時点ではWP_Queryには使えてもWP_Term_Queryには使う事が出来ません。
ですが、以下のコードを使う事で使用が可能になります。
コード
タクソノミーのターム一覧を表示させる箇所に設置するコード
<?php
$args = array(
'taxonomy' => 'category', // 取得するタクソノミー
'number' => 1, // 取得する要素数
'offset' => 0,
'hide_empty' => false, // false の場合は関連する投稿の無いタームも表示させる
);
$paged = get_query_var('paged');
if( !empty( $paged ) ) {
$args['offset'] = ( $paged - 1 ) * $args['number'];
}
$term_query = new WP_Term_Query( $args );
?>
<?php if( !empty( $term_query ) ) : ?>
<ul>
<?php foreach( $term_query->get_terms() as $term ) : ?>
<li><a href="<?php echo esc_url( get_term_link( $term ) ); ?>"><?php esc_html_e( $term->name ); ?></a></li>
<?php endforeach; ?>
</ul
<?php endif; ?>
ページネーションを表示させる箇所に設置するコード
<?php
class wpx_terms_pagenavi {
function __construct( $args = '' ) {
$this->args['number'] = $args['number'];
$this->args['posts_per_page'] = $this->args['number'];
$this->args['paged'] = get_query_var('paged');
$args['offset'] = 0;
$found_term_counts = wp_count_terms( $args['taxonomy'], $this->args );
print_r($found_term_counts);
if( !empty( $found_term_counts ) ) {
$this->max_num_pages = floor( $found_term_counts / $args['number'] );
if( $found_term_counts % $args['number'] > 0 ) {
$this->max_num_pages++;
}
}
}
function get( $name ) {
return $this->args[$name];
}
function pagenavi() {
if( function_exists('wp_pagenavi') ) {
wp_pagenavi( array( 'query' => $this ) );
}
}
public $args = array();
public $max_num_pages = 0;
}
$wpx_terms_pagenavi = new wpx_terms_pagenavi( $args );
?>
<div class="pagination">
<?php $wpx_terms_pagenavi->pagenavi(); ?>
</div>
WP-PageNaviが有効化されていない場合は当然動きませんのでご注意下さい。
また、この仕組みを利用すればWP_Term_Queryに関わらず全ての要素でページネーションがWP-PageNaviにより生成出来るようになるかと思われます。

(0) Comments