LQDB Liberty Questの技術メモサイト。

What do you need?

WP_Term_QueryでWP-PageNaviを使用する

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

コメントを残す

コメント内容の項目は必須入力です。
コメントは承認後に公開されますので反映に時間がかかる場合がございます。また、メールアドレスは公開されません。

返信先: