WordPress Logo

固定ページ等の中で、投稿で使用しているタグの一覧を表示する際、通常は[get_tags]関数を使い、下記のような簡単なコードを記述することになります。

<ul>
<?php
	$tags = get_tags('orderby=name&order=ASC');
	$orderby = apply_filters( 'get_terms_orderby', $orderby, $args );
	if ($tags) {
		foreach($tags as $tag) { ?>
			<li><a href="<?php echo get_tag_link($tag->term_id); ?>"><?php echo $tag->name ; ?></a></li>
	<?php } ?>
<?php } ?>
</ul>

通常はこれで事足りますが、投稿の数が多くなってきて、タグも数十、あるいは数百個に増えてくると、ページネーションを実装したくなります。

WordPressのデフォルトの機能では用意されていないので、少々長いコードになりますが、以下の方法で導入できました。

<?php 
if( isset($_GET['showall']) ):
	$args = array( 'hide_empty' => 0 );
else:


$page = ( get_query_var('paged') ) ? get_query_var( 'paged' ) : 1;
$per_page = 80; // number of tags to show per-page
$offset = ( $page-1 ) * $per_page;
$args = array( 'number' => $per_page, 'offset' => $offset, 'hide_empty' => 0, 'orderby' => name, 'order' => ASC );

endif;

$taxonomy = 'post_tag';
$tax_terms = get_terms( $taxonomy, $args );

?>

<ul>
	<?php foreach ($tax_terms as $tax_term) { ?>
		<li><a href="<?php echo esc_attr(get_term_link($tax_term, $taxonomy)); ?>"><?php echo $tax_term->name; ?></a></li>
	<?php } ?>
</ul>

<?php
// pagination
if( !isset($_GET['showall']) ) {
	$total_terms = wp_count_terms( 'post_tag' );
	$pages = ceil($total_terms/$per_page);
if( $pages > 1 ){ ?>
<div class="pagination">
<ol>
	<?php
	for ($pagecount=1; $pagecount <= $pages; $pagecount++): ?>
		<li><a href="<?php echo get_permalink() . 'page/' . $pagecount ; ?>/"><?php echo $pagecount ?></a></li>
	<?php endfor; ?>
</ol>
</div>
<?php
}
echo '<p><a href="'.get_permalink().'?showall=true">すべてのタグを表示</a></p>';
} else {
echo '<p><a href="'.get_permalink().'">分割して表示 </a></p>';
}
?>

パーマリンク構造に関係なくどの環境でも使えると思うので、ぜひお試しください。