【wordpress】固定ページ内にカスタム投稿タイプ毎の記事を出力する

wordpress

だいたいカスタム投稿タイプとかタクソノミーとかって常に更新がありそうな時にデフォルトの投稿だと管理が大変になりそうなときに分けると思う。そしてだいたいがカスタム投稿の「”hierarchical”=false」にしてデフォルトの投稿みたいな事が多いと思われ。ちなみに「”hierarchical”=true」にすると親子関係が持てるような・・どっちかというと固定ページっぽいイメージですけど、いまいちどう使うかイメージが沸かない。

そんでやってみたいことは、「カスタム投稿毎のインデックスページに記事を出力する」ということ。

例として、カスタム投稿タイプで「ラーメン」と「餃子」という投稿タイプを作る。

そんで、ラーメンと餃子の各インデックスページを作ってそこにカスタム投稿タイプで投稿した記事を表示したいと思う。

固定ページの作成

各ページはwordpressにある機能の「固定ページ」より「ラーメン」と「餃子」とうインデックスページを作って各スラッグを「noodles」と「gyoza」とでもしておく。

カスタム投稿タイプの設定

functions.phpにカスタム投稿タイプで「ラーメンの種類」と「餃子の種類」を作る。

ポイントとしては、上記で作った固定ページのスラッグ名とカスタム投稿タイプの名前を同じにしておく。

//functions.php内
//ラーメンのカスタム投稿タイプ
register_post_type(
"noodles",
array(
	"labe;"=>"ラーメンの種類",
	"hierarchical"=>false,
	"public"=>true,
	"query_var"=>false,
	"supports"=>array(
		"title",
		"editor",
		"thumbnail",
		"custom-fields"
	)
)
);

//餃子のカスタム投稿タイプ
register_post_type(
"gyoza",
array(
	"labe;"=>"餃子の種類",
	"hierarchical"=>false,
	"public"=>true,
	"query_var"=>false,
	"supports"=>array(
		"title",
		"editor",
		"thumbnail",
		"custom-fields"
	)
)
);

上記の設定をしたら、まぁだいたいタクソノミーでカテゴリーを作る設定をすると思うが、今回の目的は「カスタム投稿毎のインデックスページに記事を出力する」ということなのでタクソノミーの設定は省きます。

設定したら、とりあえず投稿タイプに適当に記事を投稿しておく。

カスタム投稿タイプの記事を出力する

今回ここが重要ですw

今回はデフォルトのpage.phpのみで出力しようと思います。カスタム投稿タイプで指定したポストタイプ(noodlesとgyoza)を出力するにはquery_postのpost_typeを設定してやる必要があります


ここに出力

post_typeにnoodlesを指定するとカスタム投稿タイプで指定したラーメン情報が出力されます。しかし、そうなると餃子の投稿タイプを出力することができません。

そこで両方のカスタム投稿タイプを出力するために、post_typeのパラメータの値を「$post->post_name」に変更する。「$post->post_name」は表示中のスラッグ名を取得できるパラメータ値になります。

post_name);
if(have_posts()): while(the_posts()): the_post();
?>
ここに出力

上記のようにすると現在表示中のページのスラッグ名が取得できるため、カスタム投稿タイプとページのスラッグ名を同じにしておくことで、カスタム投稿タイプの情報も取得できるようにさせている。

ちなみに$postにはいろんなデータが入っています。詳しくは下記のWEBLEさんのサイトが参考になります。