is_category(13)
を
is_category( array( 13, 子カテゴリーのID ) )
では?
ご教授ありがとうございます。
今後、子カテゴリーが増える可能性があるので、できれば他の方法でできないでしょうか。
力技でやるなら
get_categories( array( 'child_of' => 13 ) )
という呼び出しで子カテゴリー(オブジェクト)の配列を取得して、各オブジェクトから ID だけを並べた配列を作る、でしょうか。
https://wpdocs.osdn.jp/関数リファレンス/get_categories
-
この返信は7年、 8ヶ月前にgblsmが編集しました。
別の考え方として、カテゴリーの代わりにカスタム分類(カスタムタクソノミー)を使うのはいかがですか。
そうすれば category-13.php の代わりに、カスタム分類アーカイブの taxonomy-mytax.php や taxonomy-mytax-myterm.php というテンプレートが使えます。
(mytax はカスタムタクソノミーのスラッグ、myterm はタームのスラッグ。)
https://wpdocs.osdn.jp/テンプレート階層#Custom_Taxonomies_display
わりと意図が不明なのではないでしょうか。
カスタム投稿タイプabcは、archive-abc.phpで呼び出せると思うんですが。
abcの記事を振り分けるためのカテゴリーなら、@gblsm氏の提案がスマートかもしれません。
いろんな考え方があるんでしょうが、カスタム投稿はあるカテゴリー専用のpostだと思います。
あまり正確じゃないのかもしれませんが、この場合の専用カテゴリーが、親となり、子がカスタム分類に該当するんだと思います。カスタム分類のタームは孫ということになりますか。
カスタム投稿 神社仏閣には、カスタム分類 神社と寺院があり、神社はtag形式で祭神名、寺院は階層形式で各宗派が入るみたいな感じ。あとカスタム分類 都道府県があっても便利かも。
神社仏閣なので、いくつかの定型の情報の入出力用にカスタムフィールドとして、所在地、創建年を作るような形で作るものかなと思います。
gblsmさん、ありがとうございます。
https://wpdocs.osdn.jp/関数リファレンス/get_categories
を見たのですが、よく理解できなかったので、現状存在するカテゴリーを下記のように登録しようと思ったのですが、子カテゴリー(カテゴリーid 30)が表示されませんでした。
どこが間違っているのか教えていただけないでしょうか。
function change_posts_per_page($query) {
if( is_admin() || ! $query->is_main_query() ){
return;
}
if ( $query->is_category(13) ) {
$query->set( 'posts_per_page', '10' );
$query->set( 'post_type','abc' );
return;
}
if($query->is_category( '30' )){
$query->set( 'posts_per_page', '10' );
$query->set( 'cat','30' );
$query->set( 'post_type','abc' );
return;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
oisitさん、ありがとうございます。
初心者なので、よくわかっていないのだと思います。
一番良い方法がわからないのですが、子カテゴリーをそれぞれのページに振り分けたいだけなのですが。
is_
categoryとin_categoryの違いや使い方、条件分岐、複数指定、子孫カテゴリがある場合などなど
2015年の記事の様ですが。
それぞれのページというのが割といろいろ解釈できそうです。ページングなのか、一つのアーカイブなのか。
自分もコピー職人ですが、return入れちゃうとそこで終わりなんじゃないですかね。
たとえば最初の条件はadminかmeain_queryならば、return この先は実行しないということだったと思います。なので条件が合えば、次のifの処理はしない。
もしカテゴリー13なら処理して終わり<–13だったので終わり
もしカテゴリー30なら処理しておわり この条件は先の条件が終わってるので処理されない。
カスタム投稿abcはカテゴリー13の話題専用。つまりカテゴリー13のpostであるということではないかと。
あとカテゴリーが30ならカテゴリーが30の記事をしぼりこむ必要があるんでしょうか。
文章作るのが下手なので思い付きの羅列ですいません。
$query->set( 'cat','30' );
の1行が不要な気がします。
return
の使い方については問題ないと思います。
oisit さん、LABE さん
ありがとうございます。
$query->set( 'cat','30' );
を取ってみましたが、親カテゴリー(id30)は表示されるのですが、子カテゴリーが表示されません。
教えていただいた
「is_categoryとin_categoryの違いや使い方、条件分岐、複数指定、子孫カテゴリがある場合などなど」
を参考にさせて頂き、
if (is_category('30') || cat_is_ancestor_of(30, $cat)) {
$query->set( 'posts_per_page', '21' );
$query->set( 'post_type','abc' );
return;
}
と書いてみたんですが、親カテゴリー(id30)は表示されるのですが、子カテゴリーが表示されません。
お手数ですが、どこが悪いかアドバイス頂けませんでしょうか。
検証してみました。下記のコードで正しく表示されましたよ。
function change_posts_per_page( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// 親カテゴリーの ID: 13
// このアーカイブページは子カテゴリー(ID:30)の投稿も一緒に表示。
if ( $query->is_category( 13 ) ) {
$query->set( 'posts_per_page', 3 );
$query->set( 'post_type', 'abc' );
return;
}
// 子カテゴリーの ID: 30
// 子カテゴリーの投稿だけを表示するアーカイブ。
if ( $query->is_category( 30 ) ) {
$query->set( 'posts_per_page', 2 );
$query->set( 'post_type', 'abc' );
return;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
何度やってもうまくいかず、なかなか時間がなく返信ができませんでした。
教えていただいたのに、返信が遅くなってしまい申し訳御座いません。
gblsmさんのやり方で、なんとか子カテゴリーも表示できるようになりました。
表示されなかったのは、function.phpにパーマリンクのcategoryを消す設定がされていたようで、それが影響していたようです。
前任者が設定をしていたようで、全然気付きませんでした。
gblsmさん、oisit さん、LABE さん、ありがとうございました。