質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

3回答

5334閲覧

wordpressの投稿ページのカテゴリを投稿タイプ別で切り替えたい

YumaYamada

総合スコア30

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2016/09/15 08:24

編集2016/09/15 11:03

現在wordpressでwebサイトの修正をしています。複数の投稿タイプを使い投稿記事を分類しているのですが、投稿ページに表示されるカテゴリ一覧が一緒くたになっており、この部分を投稿タイプ別に表示を分けたいと考えております。

例えば、投稿タイプ"Blog"にBlogカテゴリーを登録し、投稿タイプ"Event"にEventカテゴリーを登録すると、以下の画面のようにカテゴリが一緒くたに表示されてしまうということです。(画像参照)

これをそれぞれの投稿タイプ別にカテゴリーの表示を分ける方法があればご教示いただけますと幸いです。
よろしくお願いいたします。
イメージ説明

ex.php

1 $labels = array( 2 'name' => 'ブログ', //投稿タイプの一般名 3 'add_new_item' => '投稿を追加', 4 'not_found' => __('投稿は見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト 5 'new_item' => __('新しい投稿'), //編集画面のタイトル 6 'view_item' => __('投稿を表示') //記事編集画面の「プレビュー」のテキスト 7 ); 8 $args = array( 9 'labels' => $labels, //この投稿タイプのラベルの配列 10 'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数 11 'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか 12 'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか 13 'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか 14 'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post" 15 'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか 16 'menu_position' => 4, //投稿タイプが表示される管理画面のメニューの位置 17 'has_archive' => false, 18 'supports' => array('title','editor','thumbnail'), //add_post_type_support()を直接呼び出すエイリアス 19 ); 20 register_post_type('Blog',$args); //カスタム投稿タイプとその動作を定義 21 22 $labels = array( 23 'name' => 'イベント', //投稿タイプの一般名 24 'add_new_item' => '投稿を追加', 25 'not_found' => __('投稿は見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト 26 'new_item' => __('新しい投稿'), //編集画面のタイトル 27 'view_item' => __('投稿を表示') //記事編集画面の「プレビュー」のテキスト 28 ); 29 $args = array( 30 'labels' => $labels, //この投稿タイプのラベルの配列 31 'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数 32 'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか 33 'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか 34 'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか 35 'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post" 36 'hierarchical' => true, //この投稿タイプが階層(親の指定が許可されている)かどうか 37 'menu_position' => 4, //投稿タイプが表示される管理画面のメニューの位置 38 'has_archive' => false, 39 'supports' => array('title','editor','thumbnail'), //add_post_type_support()を直接呼び出すエイリアス 40 ); 41 register_post_type('Event',$args); //カスタム投稿タイプとその動作を定義 42 43 44// カスタムタクソノミーの追加 45register_taxonomy( 46 's-category', // 分類名 47 array( // 投稿タイプ名 48 'Blog', 49 'Event', 50 ), 51 array( 52 'label' => 'カテゴリー', // フロントで表示する分類名 53 'hierarchical' => true, // 階層構造か否か(trueの場合はカテゴリー、falseの場合はタグ) 54 'query_var' => true, 55 'rewrite' => true 56 57 ) 58); 59}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/09/15 10:14

「複数の投稿タイプ」はどのように作成されたものでしょうか。
YumaYamada

2016/09/15 10:45

複数の投稿タイプはfunctions.phpにregister_post_tpyeで追加しました
kei344

2016/09/15 10:54

その部分の記述を質問文に追記出来ますか?
YumaYamada

2016/09/15 11:03

只今追記いたしました
guest

回答3

0

わざとregister_taxonomy()関数で投稿タイプを2つ指定していますよね?別々にしたいのであれば、別々にすればいいだけではないでしょうか?サイトの仕様が分からないのでアレですが…。

投稿2016/09/15 16:08

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

既存の「カテゴリー」を複数の投稿タイプで共通に使用するのではなく、カスタム投稿タイプそれぞれに対して、カスタム分類(カスタムタクソノミー)を追加するのはどうでしょうか。

プラグインを使って、追加するのであれば、個人的にはCustom Post Type UIが使いやすいと思います。
https://wordpress.org/plugins/custom-post-type-ui/

「カテゴリー」を使用したままで、投稿画面の表示だけを分けたいということであれば、ちょっと方法が思いつきませんが……

投稿2016/09/15 10:22

編集2016/09/15 10:24
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「同じカスタム分類を使いつつカスタム投稿タイプごとに登録カテゴリを分ける」というのは結構管理に手間がかかりますが、下記のようにすれば出来ます。

PHP

1// functions.php 2if ( is_admin() ) { 3 add_action( 'current_screen', 'current_screen_action_hook', 1, 1 ); 4} 5function current_screen_action_hook( $current_screen ) { 6 if ( did_action( 'current_screen' ) != 1 || $current_screen->base != 'post' ) return; 7 if ( $current_screen->id === 'Blog' ) { 8 add_action( 'get_terms_args', 'get_terms_args_hook1', 1, 2 ); 9 } else if ( $current_screen->id === 'Event' ) { 10 add_action( 'get_terms_args', 'get_terms_args_hook2', 1, 2 ); 11 } 12} 13function get_terms_args_hook1( $args, $taxonomies ) { 14 if ( $args[ 'taxonomy' ][ 0 ] === 's-category' ) { 15 $args[ 'exclude' ] = array( 1, 2, 3 ); // 表示しないカテゴリ 16 } 17 return $args; 18} 19function get_terms_args_hook2( $args, $taxonomies ) { 20 if ( $args[ 'taxonomy' ][ 0 ] === 's-category' ) { 21 $args[ 'exclude' ] = array( 4, 5, 6 ); // 表示しないカテゴリ 22 // $args['include']; // 表示するカテゴリで絞る手もある。 23 } 24 return $args; 25}

mizさんのおっしゃるように、それぞれにカスタムタクソノミーを作るのが最適解だとは思います。

投稿2016/09/15 12:45

編集2016/09/15 12:47
kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YumaYamada

2016/09/15 14:24

ありがとうございます。主にどの観点から管理に手間がかかると考えておられますでしょうか?
kei344

2016/09/15 14:29

上記コードの「$args[ 'exclude' ] = array( 4, 5, 6 );」はカテゴリを追加するたびに編集する必要があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問