カスタム投稿タイプ、シングルのページャー 更新

ワードプレスのメモ

以前中途半端に書いたページャーの記事の更新です。

ソース

<?php if( is_single() ): ?>

<?php if(get_post_type() == 'post'):
	$next_post = get_next_post( 'in_same_term','' );
	$previous_post = get_previous_post( 'in_same_term','' );
else:
	$taxonomies = get_post_taxonomies();
	foreach( $taxonomies as $taxonomy1 ){
		if ($taxonomy1 === reset($taxonomies)) {
			$taxonomy = $taxonomy1;
		}
	}
	$next_post = get_next_post( 'in_same_term','',$taxonomy );
	$previous_post = get_previous_post( 'in_same_term','',$taxonomy );
endif; ?>

<?php if( !empty( $previous_post ) || !empty( $next_post )): ?>
<?php $check1 = get_option(p2option_pagertitle); if($check1 == 1): ?>
<div class="pager pager-single pager-have-title">
	<?php if( !empty( $previous_post )): ?><a class="pager-single-prev" href="<?php echo get_permalink( $previous_post->ID ); ?>"><?php echo $previous_post->post_title; ?></a><?php endif; ?>
	<?php if( !empty( $next_post )): ?><a class="pager-single-next" href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo $next_post->post_title; ?></a><?php endif; ?>
</div>
<?php else: ?>
<div class="pager pager-single pager-no-title">
	<?php if( !empty( $previous_post )): ?><a class="pager-single-prev" href="<?php echo get_permalink( $previous_post->ID ); ?>">前の記事</a><?php endif; ?>
	<?php if( !empty( $next_post )): ?><a class="pager-single-next" href="<?php echo get_permalink( $next_post->ID ); ?>">次の記事</a><?php endif; ?>
</div>
<?php endif; ?>
<?php endif; ?>

<?php else: ?>
アーカイブのページャー処理
<?php endif; ?>

標準の投稿と、カスタム投稿タイプで条件分岐しています。

また、18行目に余計な条件分岐が書いてありますが、「投稿タイトル」を表示するか「前の記事」「次の記事」とするかを、自前の設定画面でスイッチできるようにしてます。

長~~~~いタイトルが使われる場合は後者に。文字数を制限して表示しても良いのですが。

 

「post」の処理はこのままでOKだと思いますが、カスタム投稿タイプの処理はだいぶトリッキーです。

どのタクソノミーを使う?

カスタム投稿タイプのカテゴリー(タクソノミー)はいろいろと自由度が高くなっていて、どういう処理で取得するか悩みどころです。

  • 1番最初のタクソノミーを使う?
  • 指定して(特定して)使う?

後者は投稿タイプごとに条件分岐させなきゃならないのでパス。

ただし、タクソノミーの命名ルールが決まっていれば、それでもいいですね。(ex.カスタム投稿名 + ‘_cat’みたいに)

$post_type_name = get_post_type_object( get_post_type())->name;
$taxonomy = $post_type_name.'_cat';

こんな感じ。

 

※カスタムタクソノミーの命名ルールが気になったので少し調べてみると、「小文字およびアンダースコア”_”のみ」とされているようでした。

“-“ハイフンでも特に問題なく動きますが、NGみたい。

 

本例では「最初のタクソノミーを使う」と決め打ちしています。

「何番目のタクソノミーを使う? 」「最初のヤツ」とだけ判定しているので、投稿タイプの登録時にここまで考えておく必要があります。

 

※タクソノミーが無ければ何も出ません。

蛇足:タクソノミー名を「category」にすると?

ページャーのデフォルトタクソノミーが「category」となっていたので、そのまま投稿タイプを登録してみました。

投稿タイプ名:test_cpt

登録タクソノミー:category

結果

標準のカテゴリーをそのまま乗っ取り、タームとして表示されました。

また、標準の投稿にはカテゴリーが表示されなくなりました。

もちろん、やっちゃダメなことのようです。

 

「post」のタクソノミーは「category」です、という意味だったのか、、、