cosoa-b

八百屋にサンマは頼まねえ

WordPressで複数のカスタム投稿タイプを変数で取得

wp

Posted on

タイトルを考える時はいつも自分ならどうググるかなと考えながら決めています。

複数のカスタム投稿を作った時に、サイドなどの出力したい情報が通常の投稿と同じじゃないことの方が多いので、それごとにhoge-archive.phpやhoge-single.phpを作ります。一個くらいならいいんですが、結構な数になるとキレそう心折れそうになるのですが、めげずに頑張っていますよ。条件分岐使ってarchive.phpやsingle.phpだけで管理するのとどっちがいいのですかね、エロイ人教えてください。


と、余談でした。
今回はカスタム投稿を作った時にまた必要となってくるtaxonomy.phpなどでポストタイプだけ変わるようなやつはそこを変数にして楽しようということです。いや我ながら分かりにくい。

分かりにくすぎるから前提条件

  • カスタム投稿dog、タクソノミーをdog-categoryとdog-tagで作成
  • カスタム投稿cat、タクソノミーをcat-categoryとcat-tagで作成
  • dog-category、dog-tag、cat-category、cat-tag内の一覧ページをtaxonomy.phpで全て賄う
  • 右サイドはどのタクソノミーも、最新の記事、カテゴリリスト、タグリストとする

カスタム投稿の作り方は他を参考にしてもらって…

参考:WordPressのカスタム投稿タイプとカスタムタクソノミーを使って新たに別のコンテンツを作ったので、制作プロセスを書きました – かちびと.net

get_post_type_objectでカスタム投稿タイプを取得

これを使ってカスタム投稿タイプを取得します。で、それを変数に代入しておけば万事OKというこです。

<?php
global $customPostTypeObj;
$customPostTypeObj = esc_html(get_post_type_object(get_post_type())->name);
?>

カスタム投稿タイプが必要になる上の方にこれを書きます。今回は投稿タイプ名(スラッグ)が必要だったのでnameにしていますが、他の用途でカスタム投稿タイプの情報が欲しければここの値を変えてあげると取得出来ます。

参考:web帳 | WordPress カスタム投稿タイプ情報取得

さらなる手抜きへ

出来る場合と出来ない場合がありますが…今回はタクソノミーを「カスタム投稿名-category」と「カスタム投稿名-tag」にしているのでここでも上記の変数を使っちゃおうという魂胆です。

<div class="aside">
	<h3>カテゴリリスト</h3>
	<ul>
		<?php wp_list_categories(array('title_li' => '', 'taxonomy' => ''.$customPostTypeObj.'-cat', 'show_count' => 0, 'depth' => 1)); ?>
	</ul>
</div>
<div class="aside">
	<h3>タグリスト</h3>
		<?php wp_tag_cloud( array(
			'taxonomy' => ''.$customPostTypeObj.'-tag',
			'order' => 'DESC',
			'orderby' => 'count'
		) ); ?>
</div>

ヤラシイですね、多分この例は稀だと思うので、凡庸性は低いかと。なのでそういう時は先程のget_post_type_objectを利用してタクソノミーを取得してそれを新たな変数を作りごにょごにょ…。出来そうですね。

カスタム投稿タイプの最近の記事、カテゴリリスト、タグリスト

てことで全文です。良ければ参照して下さい。

<div id="side">
	<?php
	global $customPostTypeObj;
	$customPostTypeObj = esc_html(get_post_type_object(get_post_type())->name);
	?>
	<div class="aside">
		<h3>最近の記事</h3>
		<ul>
			<?php
			$args = array(
			'post_type' => $customPostTypeObj,
			'posts_per_page' => 5,
			);
			$my_posts = get_posts($args);
			foreach ( $my_posts as $post ) {
			setup_postdata($post); ?>
			<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
			<?php
			}
			?>
		</ul>
	</div>
	<div class="aside">
		<h3>カテゴリリスト</h3>
		<ul>
			<?php wp_list_categories(array('title_li' => '', 'taxonomy' => ''.$customPostTypeObj.'-category', 'show_count' => 0, 'depth' => 1)); ?>
		</ul>
	</div>
	<div class="aside">
		<h3>タグリスト</h3>
			<?php wp_tag_cloud( array(
				'taxonomy' => ''.$customPostTypeObj.'-tag',
				'order' => 'DESC',
				'orderby' => 'count'
			) ); ?>
	</div>
</div>