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

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

ただいまの
回答率

88.81%

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,704

YumaYamada

score 30

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

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

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

$labels = array(
        'name' => 'ブログ', //投稿タイプの一般名
        'add_new_item' => '投稿を追加',
        'not_found' =>  __('投稿は見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しい投稿'), //編集画面のタイトル
        'view_item' => __('投稿を表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 4, //投稿タイプが表示される管理画面のメニューの位置
        'has_archive' => false,
        'supports' => array('title','editor','thumbnail'), //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('Blog',$args); //カスタム投稿タイプとその動作を定義

     $labels = array(
        'name' => 'イベント', //投稿タイプの一般名
        'add_new_item' => '投稿を追加',
        'not_found' =>  __('投稿は見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しい投稿'), //編集画面のタイトル
        'view_item' => __('投稿を表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'hierarchical' => true, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 4, //投稿タイプが表示される管理画面のメニューの位置
        'has_archive' => false,
        'supports' => array('title','editor','thumbnail'), //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('Event',$args); //カスタム投稿タイプとその動作を定義


// カスタムタクソノミーの追加
register_taxonomy(
    's-category', // 分類名
    array(    // 投稿タイプ名
    'Blog',
        'Event',
    ),
    array(
        'label' => 'カテゴリー', // フロントで表示する分類名
        'hierarchical' => true,   // 階層構造か否か(trueの場合はカテゴリー、falseの場合はタグ)
        'query_var' => true,
        'rewrite' => true

    )
);
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/09/15 19:14

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

    キャンセル

  • YumaYamada

    2016/09/15 19:45

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

    キャンセル

  • kei344

    2016/09/15 19:54

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

    キャンセル

  • YumaYamada

    2016/09/15 20:03

    只今追記いたしました

    キャンセル

回答 3

+1

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

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

// functions.php
if ( is_admin() ) {
    add_action( 'current_screen', 'current_screen_action_hook', 1, 1 );
}
function current_screen_action_hook( $current_screen ) {
    if ( did_action( 'current_screen' ) != 1 || $current_screen->base != 'post' ) return;
    if ( $current_screen->id === 'Blog' ) {
        add_action( 'get_terms_args', 'get_terms_args_hook1', 1, 2 );
    } else if ( $current_screen->id === 'Event' ) {
        add_action( 'get_terms_args', 'get_terms_args_hook2', 1, 2 );
    }
}
function get_terms_args_hook1( $args, $taxonomies ) {
    if ( $args[ 'taxonomy' ][ 0 ] === 's-category' ) {
        $args[ 'exclude' ] = array( 1, 2, 3 ); // 表示しないカテゴリ
    }
    return $args;
}
function get_terms_args_hook2( $args, $taxonomies ) {
    if ( $args[ 'taxonomy' ][ 0 ] === 's-category' ) {
        $args[ 'exclude' ] = array( 4, 5, 6 ); // 表示しないカテゴリ
        // $args['include']; // 表示するカテゴリで絞る手もある。
    }
    return $args;
}

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/15 23:24

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

    キャンセル

  • 2016/09/15 23:29

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

    キャンセル

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

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る