サポート » 使い方全般 » カスタム投稿内の特定のカテゴリといった指定は可能なのでしょうか?

  • 解決済 lisa0000

    (@lisa0000)


    初めてカスタム投稿を使ってサイトを作成しています。

    そこで質問なのですが、特定のカスタム投稿にカテゴリを付けることはおかしなことなのでしょうか?
    例えば、「レシピ」というカスタム投稿を作り、そこから投稿する際に「和食」「中華」「洋食」というカテゴリを選択して投稿するイメージです。
    この設定で、「レシピ」「和食」だけのアーカイブ一覧を表示させたり、その他カテゴリを組み合わせた表示を行いたいのが希望なのですが、可能なものでしょうか?

    このカテゴリ設定は、実は管理画面のカスタム投稿内に設定したラジオボタン(中華など)を選択することで、投稿者はカテゴリのチェックを意識することなく自動で選択したカテゴリにチェックされ投稿されるようにしています。

    タクソノミーのお話があるかと思いますが、ユーザーが結局どのタクソノミーに分類するのかを決める事に違和感がありタクソノミーでの分類はやめることにしました。というか、この方法での解決法が分からなかったので…。

    カスタム投稿とカテゴリを組み合わせた表示を行うためにはどのようにすれば良いでしょうか?
    また、私の行っている方法自体に問題がある場合、どの様な方法に変更するのがスムーズな方法になりますでしょうか?

    是非ともアドバイスのほどよろしくお願いいたします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • custom post_type uiでカスタム投稿つくるとビルトインのカテゴリーもtagも使えるので、
    自分でfunctions.phpにcode書けば使えるのではないかと。

    ただ
    タクソノミーが何なのか(カスタム分類のことでしょうか)
    カスタム分類がどうして嫌なのか
    が個人的に疑問。

    こんにちは、@lisa0000 さん。

    投稿(post)にあるカテゴリーとタグはタクソノミーになります。カテゴリーに中華というのを追加した場合、中華はタームになります。つまり…

    タクソノミー: カテゴリー
    ターム: 中華

    という感じです。カテゴリーとタグは、使用する投稿タイプを投稿(post)に紐付けているというだけです。なので、一手間加えれば、投稿のカテゴリーとタグをカスタム投稿タイプで共通で使用することもできます。

    ところで @lisa0000 さんは、投稿(post)のカテゴリーとタグをカスタム投稿タイプのレシピでも共通で使いたいのでしょうか?それとも、投稿(post)のカテゴリーとタグとは別で、レシピはレシピでカテゴリーやタグを使用したのでしょうか?

    トピック投稿者 lisa0000

    (@lisa0000)

    oisit様
    有難うございます!
    はい、custom post_type uiでカスタム投稿を作っています。
    すみません、タクソノミーではなく、タクソノミーとタームでした。

    その後、色々と試してみたところ、カスタム分類で作って、タクソノミーやタームをカテゴリ同様?に扱えそうな気配がしてまいりました。タームもカテゴリと同じ感じで管理画面にチェック項目が表示できましたので、今後はカテゴリをやめこのタームで分類をカテゴリ的に利用するのを試してみたいと思います。
    疑問を持って頂いて感謝です、やはりカスタム投稿ではタクソノミーを利用するのがやはりスムーズな方法だと考え始めました。ありがとうございます!

    トピック投稿者 lisa0000

    (@lisa0000)

    KUCKLU様
    アドバイス有難うございます。

    タクソノミー: カテゴリー
    ターム: 中華

    そうですよね、一応理解したつもりですが今でもタクソノミーとタームの意味が混乱するときがあります。^^;

    >>カテゴリーとタグは、使用する投稿タイプを投稿(post)に紐付けているというだけです。
    有難うございます、カスタム投稿でカテゴリを紐づけするのは、やはり無理があると考え始めています。

    >>投稿(post)のカテゴリーとタグをカスタム投稿タイプのレシピでも共通で使いたいのでしょうか?
    いえ、普通の投稿では一切のカテゴリを利用しない予定です。というか、普通の投稿自体使うかどうかも今は未定で、とりあえず現状では、全ての投稿はカスタム投稿で考えています。

    ただ、いまだにカスタム投稿のタクソノミーやタームの利用範囲?方法?が理解しきれておらず混乱状態です。
    タクソノミーやタームも、普通の投稿のカテゴリのように、自由に増やして、タームを複数付与し、付与されたタームに紐づけて一覧を表示したり、複数のタームごとの検索なども行えるのでしょうか?

    今後、この方法で進める場合、複数のタクソノミーとそれに分類されるタームを数多く登録していく予定となります。
    しかし、タクソノミーとタームの取り扱いについていまいち自信が無いのでちょっと心配です…。

    当初、カテゴリを考えていたのは、情報量も多いですし、カテゴリ分けで取り扱うことがほとんどだったので、多少理解が深い方法で…と考えておりました。

    例えば、AとBの大カテゴリで、Aの子カテゴリa,bとBの子カテゴリc,dが選択されている記事を一覧表示…などであればできそうなので…。

    この様に、カテゴリ同様の感覚で利用できるのであれば、タクソノミーとタームで紐づけを行いたいと思います。

    カスタム投稿の場合はこんな考え方になるのでしょうか?
    hogeというカスタム投稿で投稿している場合に、タクソノミーAとBが選択され、タームはタクソノミーAのタームa,bとタクソノミーBのタームc,dが選択されている一覧を表示。

    こんなことも可能でしょうか?

    まだ、いまいち理解できておらず不安です…。
    なにか、詳しい情報が掲載されているページなど、参考になるものが御座いましたら教えて頂けないでしょうか。

    ありがとうございます、よろしくお願いいたします。

    @lisa0000 さん

    そこまで、難しく考える必要はないと思いますよ。

    投稿(post)にある”カテゴリー = タクソノミー”で、カテゴリーにお知らせというのを追加した場合、”お知らせ = ターム”という呼び方になります。WordPressの日本語マニュアル的にいうと、”タクソノミー = カスタム分類”になります。ですので、カスタム投稿タイプにカスタム分類を追加したとしても、使用方法は投稿(post)にあるカテゴリーと全く同じです。

    ただ、カテゴリーはビルドイン(予め組み込まれた)のカスタム分類なので、get_category()をはじめとしたAPIが予め用意されていますが、自身でカスタム分類を新たに追加した場合は、get_term()関数やget_terms()関数、get_taxonomy()関数やget_taxonomies()関数を使って自前で取得する必要があるという点です。

    試しに、get_category()関数の中身をみてみましょう。

    function get_category( $category, $output = OBJECT, $filter = 'raw' ) {
    	$category = get_term( $category, 'category', $output, $filter );
    
    	if ( is_wp_error( $category ) )
    		return $category;
    
    	_make_cat_compat( $category );
    
    	return $category;
    }

    これは、get_category()関数のソースコードです。記述されているファイルは、wp-includes/category.phpの90行目辺りです。内部をみてみると、get_term()関数が使用されていて、get_term()関数の第二引数に”category”と直接書かれているのが確認できます。このことから、投稿(post)にあるカテゴリーはcategoryというカスタム分類であるというのが分かります。

    では、投稿(post)にあるカテゴリー(categoryというカスタム分類)がどのようにWordPressのコアで追加されているのかというと、カスタム分類を追加する時に使用する関数と同じregister_taxonomy()関数で追加されています。「うっそだー笑」と思うかもしれませんので、先程と同じくWordPressのコアのソースコードをみてみましょう。

    function create_initial_taxonomies() {
    	//〜中略〜
    	register_taxonomy( 'category', 'post', array(
    		'hierarchical' => true,
    		'query_var' => 'category_name',
    		'rewrite' => $rewrite['category'],
    		'public' => true,
    		'show_ui' => true,
    		'show_admin_column' => true,
    		'_builtin' => true,
    	) );
    	//〜中略〜
    }

    これが投稿(post)にあるカテゴリーを追加している部分です。create_initial_taxonomies()関数は、wp-includes/taxonnomy.phpの24行目あたりに記述されています。ちなみに、initアクションにフックする形で使用されています(他にも使用されている箇所はありますが、今回は気にしないでください)。

    ここまで、小難しい説明をしてみましたが、実際に追加して動かしてみるのが1番理解が早いと思います。結論として、@lisa0000 さんがやりたいことは、カスタム投稿タイプにカスタム分類を追加すれば可能です。例えば、レシピという投稿タイプに、ジャンルというカスタム分類を追加して、ジャンルに中華を追加して、レシピの記事を中華に紐付ければ、中華の記事一覧を表示できるようになります。

    どのテーマファイルが使われるかは、WordPress Codexのテンプレート階層をご覧ください。面倒臭い!という場合は、archive.phpがあれば大丈夫です笑

    なにか、詳しい情報が掲載されているページなど、参考になるものが御座いましたら教えて頂けないでしょうか。

    公式のドキュメント”WordPress Codex”を読むのが1番正確だと思います。その上で他の人のブログを参考にするのがいいのではないかと思います。

    カスタム分類 – WordPress Codex 日本語版
    https://goo.gl/F35nB5

    注意事項: 上記の説明の中で、WordPressのコアファイルのソースコードを引用していますが、コアファイルは絶対に改変したりしないようにしてください。

    • この返信は7年、 7ヶ月前にKUCKLUが編集しました。
    トピック投稿者 lisa0000

    (@lisa0000)

    KUCKLU様
    貴重なアドバイス有難うございます!
    時々、思考が戻ってしまい混乱する時がありますが、かなり理解が進みました。

    register_taxonomy()関数を使う部分もかなり以外でした。
    今、ご紹介頂きましたテンプレート階層の解説を読みながら、それぞれのタームごとにアーカイブを作成し出力の試行錯誤を試しています。

    >>実際に追加して動かしてみるのが1番理解が早いと思います。
    本当にそうですね、今回のアドバイスで実際に何とか動かしてみるための理解が深まりました。
    色々と試してみたいと思います。
    本当に有難うございました!!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「カスタム投稿内の特定のカテゴリといった指定は可能なのでしょうか?」には新たに返信することはできません。