個人的な見解。なので参考程度に。間違ってるかもしれないし。
カスタム投稿わからないなら使わない方が、後々面倒じゃないかもしれない。
使い方が逆だと思う。
本来termAでカスタム投稿を作り、カスタム分類posttypesをつくって、
投稿termAに対して分類postAかpostBをつかうべきじゃないかな。
その上でtaxonomy-posttypes.phpあるいはtaxonomy-posttypes-postA.phpとtaxonomy-posttypes-postB.phpというテンプレートをつくってsiteurl/?posttyps=postAかBかでそのテンプレートを呼び出す。
wordpressコーデックスのテンプレート階層を参照のこと。
追記
スレ主さんがしようとしてることはカスタム投稿男性/女性を作って、人間という分類をつけようとしてないかな。
回答ありがとうございます!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
使い方が逆だと思う。
本来termAでカスタム投稿を作り、カスタム分類posttypesをつくって、
投稿termAに対して分類postAかpostBをつかうべきじゃないかな。
その上でtaxonomy-posttypes.phpあるいはtaxonomy-posttypes-postA.phpとtaxonomy-posttypes-postB.phpというテンプレートをつくってsiteurl/?posttyps=postAかBかでそのテンプレートを呼び出す。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
なるほど、逆転の発想ですね。
ちょっと、私の書き方が悪かったのですが、具体的にいうと
カスタム投稿Aに「動画」
カスタム投稿Bに「学生紹介」
カスタムタクソノミーが「学科・コース」
というものがあったとして、カスタムタクソノミー「学科・コース」のタームは数が今後増えて行く前提です。
カスタムタクソノミー「学科・コース」に例えば「Webコース」というタームを追加した場合、カスタム投稿「動画」と「学生紹介」に「Webコース」というタームが選択できるようになり、「動画」の個別ページのターム「Webコース」をクリックするとカスタム投稿「動画」のターム「Webコース」のみのアーカイブページにしたいです。
すいません、説明が下手で。。。
仮にoisitさんのやり方で運用して行くとなると、「学科・コース」が増えるたびに、カスタム投稿が増えて行くことになると思うので、現実的には難しい感じです。
ちなみに、それぞれの投稿にカスタムフィールドを使い記事のテンプレートを作っています。
ちゃんと理解できていなかったら、ごめんなさい。。。
学科・コースのスラッグが course
Webコースのスラッグが web
と仮定すると、現在はアーカイブページが
siteurl/?course=web // 基本パーマリンクの時
または
siteurl/course/web // カスタムパーマリンク
なのですよね。ここにカスタム投稿タイプの縛りをかければよいので、
カスタム投稿タイプ動画のスラッグが movie
同、学生紹介のスラッグが intro
と仮定すると
siteurl/?course=web&post_type=movie
または
siteurl/course/web?post_type=intro
のようにパラメータを付加できればよさそうです。
これには(未検証ですが)それ用の関数をフィルター term_link
へフックできます。term_link
は、get_the_term_list()
の内部でアーカイブリンクを生成するときに呼び出される get_term_link()
が、リンク文字列を返す前に適用するフィルターです。
term_link | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/term_link/
get_term_link() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/get_term_link/
get_the_term_list() | Function | WordPress Developer Resources
Home
なるほどカスタムフィールドの件までいってればカスタム投稿納得です。
やっぱりコーデックスのテンプレート階層を参照されると良いのでは。
ようはカスタム投稿用のテンプレートがないからではないかと。
ない場合archive.phpがよばれるので、いっしょくたなんじゃないかと。
archive-動画.phpとarchive-学生紹介.phpつくれば、それぞれで絞り込みますので
siteurl/?post_type=動画&course=web
でarchive-動画.phpテンプレート呼び出してそこで、
2番めのコースのクエリ文字列わたしてコースを絞り込めばいいのでは。
逆に
iteurl/course/web?post_type=introとかなら
taxonomy- course- web.phpとか作って投稿タイプのみでしぼりこむとか
taxonomy- course.phpでカスタム分類のタームと投稿タイプで絞り込むとか
カスタマイズするんでしょうね。
雑文で恐縮。
gblsm さん、oisitさん
ご返答ありがとうございます!
なるほど!
パラメーターを渡すんですね!!
試しに入れてみたら、ちゃんと絞り込めていました。
ありがとうございます!
term_linkも作って検証してみます。
仕組み自体はわかったので行けそうです。
やってみます!
検索でも何て検索していいのか分からなくて、聴く人も居なかったんで、すごく助かりました。
gblsm さん、oisitさんご協力ありがとうございました。
はじめまして。横からすいません。
自分もほぼ同じ問題で悩んでいました。
その後、イメージ通りに実装できたのでしょうか?
もし宜しければ参考にしたいのでコードを見せていただけると幸いです。
よろしくお願いいたします。
連絡遅くなってしまい申し訳ございません。
一応、僕がやりたかったことは、urlのパラメーターで解決できました。
仮に上記のように
カスタム投稿「動画(movie)」
カスタム投稿「学生紹介(student)」
の二つの投稿に共通のタクソノミー「学科・コース(course)」というものがあった場合。
動画(movie)ページではタクソノミー「学科・コース(course)」のターム「Aコース」をクリックした場合、動画(movie)のAコース一覧を出したいっという時。
まず、タームの表示を以下のように読み込みました。
<?php
$tarms_course = get_the_terms( $post ->ID, 'course' );//タクソノミー「コース」のターム取得
if($tarms_course){
foreach ( $tarms_course as $term ) {
$term_link = get_term_link( $term );
$term_course_list.='<a href="' . esc_url( $term_link ) . '?post_type=movie">' . $term->name . '</a>';
}
}
?>
<!--html出力-->
<div class="course"><?php $term_course_list ?></div>
このような感じでいけました。
ご参考になりましたでしょうか?
まだ、本アップ前なので、記事が多くなった時などのアーカイブがページ別れた時などの振る舞いは確認できていません。
不具合、修正等ありましたら、ご指摘ください。
よろしくお願いいたします。
すいません。
説明不足でした。
上記コードはカスタム投稿「動画(movie)」専用のテンプレート(single-movie.php)を作った場合のコードです。