WordPress のカスタム投稿タイプにカテゴリを追加する方法

当社の読者の一人が最近、WordPressでカスタム投稿タイプにカテゴリを追加する方法について問い合わせてきました。 

カテゴリは WordPress の組み込み分類法の 1 つであり、主にブログ投稿に使用されます。ただし、カスタム投稿タイプには自動的に表示されないため、整理の選択肢が制限されます。

幸いなことに、WordPressサイトでの長年の作業を通じて、この問題に対する簡単な解決策をいくつか見つけました。

この記事では、WordPressでカスタム投稿タイプにカテゴリーを追加する方法をご紹介します。

WordPressのカスタム投稿タイプにカテゴリを追加する方法

カスタム投稿タイプにカテゴリを追加する必要があるのはいつですか?

WordPress では、プラグイン開発者やウェブサイトの所有者が独自のコンテンツタイプを作成できます。投稿や固定ページと同様に、これらのカスタム投稿タイプにもカテゴリやタグのような独自の分類法を持たせることができます。

例えば、映画レビューを公開する場合、「映画」というカスタム投稿タイプを作成したいかもしれません。

また、映画を適切なトピックに整理する必要があるかもしれません。そのためには、カスタムタクソノミーが必要です。ジャンルという名前のタクソノミーを作成できます。

しかし、ブログ投稿で使用しているのと同じカテゴリを、映画の投稿タイプでも使用したい場合はどうすればよいでしょうか?

これは、カスタム投稿タイプでカテゴリーを有効にする必要がある場合です。これにより、ブログ投稿とカスタム投稿タイプの両方で同じカテゴリーを使用できるようになります。

それを踏まえて、WordPressでカスタム投稿タイプに簡単にカテゴリを追加する方法を見てみましょう。

プラグインでカスタム投稿タイプにカテゴリーを追加する

初心者の方は、Custom Post Type UI プラグインを使用してカスタム投稿タイプを作成することをお勧めします。カスタム投稿タイプを作成する

Custom Post Type UIプラグインを使用すると、カスタム投稿タイプを、カテゴリーを含む組み込みまたはカスタムタクソノミーに関連付けるオプションがあります。

まず、Custom Post Type UI プラグインをインストールして有効化する必要があります。詳細については、WordPress プラグインのインストール方法に関するステップバイステップガイドをご覧ください。

インストール後、新しいカスタム投稿タイプを作成したり、プラグインで作成した既存のカスタム投稿タイプを編集したりするには、CPT UI » Add/Edit Post Typesにアクセスする必要があります。

CPT UI プラグインで投稿タイプを編集する

設定オプションがある一番下までスクロールしてください。そこには、*Taxnomies*(分類法)エリアが表示されます。

カテゴリの横にあるチェックボックスをオンにして、カスタム投稿タイプを保存する必要があります。

WordPressでカスタム投稿タイプにカテゴリを有効にする

設定を保存するには、「投稿タイプを保存」ボタンをクリックすることを忘れないでください。

これで、その特定の投稿タイプの下にある任意のコンテンツを編集でき、WordPress のブロックエディタで右側の列にカテゴリを選択するオプションが表示されます。

カスタム投稿タイプに追加されたカテゴリ

コードでカスタム投稿タイプにカテゴリを手動で追加する

テーマのfunctions.phpファイルにコードを追加してカスタム投稿タイプを作成した場合、サイト固有のプラグイン、またはコードスニペットプラグインで作成した場合、カテゴリーをサポートされるタクソノミーとして追加するためにコードを変更する必要があります。

カスタム投稿タイプの引数にこの行を追加するだけです。

'taxonomies'  => array( 'category' ),

他のカスタムタクソノミーを持つカスタム投稿タイプ用の既存のコードに、この行が既に含まれている可能性が高いです。もしそうであれば、その後にカンマを追加し、カテゴリを追加するだけです。次のようになります。

'taxonomies'          => array('topics', 'category' ),

ここに、組み込みのカテゴリをサポートする「Movies」という名前のカスタム投稿タイプを作成したコードの完全な例を示します。

function custom_post_type() {
 
// Set UI labels for Custom Post Type
    $labels = array(
        'name'                => _x( 'Movies', 'Post Type General Name', 'twentythirteen' ),
        'singular_name'       => _x( 'Movie', 'Post Type Singular Name', 'twentythirteen' ),
        'menu_name'           => __( 'Movies', 'twentythirteen' ),
        'parent_item_colon'   => __( 'Parent Movie', 'twentythirteen' ),
        'all_items'           => __( 'All Movies', 'twentythirteen' ),
        'view_item'           => __( 'View Movie', 'twentythirteen' ),
        'add_new_item'        => __( 'Add New Movie', 'twentythirteen' ),
        'add_new'             => __( 'Add New', 'twentythirteen' ),
        'edit_item'           => __( 'Edit Movie', 'twentythirteen' ),
        'update_item'         => __( 'Update Movie', 'twentythirteen' ),
        'search_items'        => __( 'Search Movie', 'twentythirteen' ),
        'not_found'           => __( 'Not Found', 'twentythirteen' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'twentythirteen' ),
    );
     
// Set other options for Custom Post Type
     
    $args = array(
        'label'               => __( 'movies', 'twentythirteen' ),
        'description'         => __( 'Movie news and reviews', 'twentythirteen' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'page',
        'show_in_rest'        => true,
         
        // This is where we add taxonomies to our CPT
        'taxonomies'          => array( 'category' ),
    );
     
    // Registering your Custom Post Type
    register_post_type( 'movies', $args );
 
}
 
/* Hook into the 'init' action so that the function
* Containing our post type registration is not 
* unnecessarily executed. 
*/
 
add_action( 'init', 'custom_post_type', 0 );

カテゴリページに複数の投稿タイプを表示する

デフォルトでは、WordPress サイトのカテゴリページにはデフォルトの「投稿」投稿タイプのみが表示されます。

投稿タイプが見つかりません

カスタム投稿タイプをデフォルトの投稿と同じカテゴリページに表示するには、このコードをテーマの functions.php ファイルまたはコードスニペットプラグインに追加する必要があります。

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
  if( is_category() ) {
    $post_type = get_query_var('post_type');
    if($post_type)
        $post_type = $post_type;
    else
        $post_type = array('nav_menu_item', 'post', 'movies'); // don't forget nav_menu_item to allow menus to work!
    $query->set('post_type',$post_type);
    return $query;
    }
}

注意: 「movies」を独自のカスタム投稿タイプの名前に置き換えるのを忘れないでください。

このコードは、市場で最高のコードスニペットプラグインであるWPCodeを使用して追加することをお勧めします。WPCodeを使用すると、テーマのfunctions.phpファイルを編集せずに、WordPressにカスタムコードを安全かつ簡単に安全に追加できます。

WPCode

開始するには、無料のWPCodeプラグインをインストールして有効化する必要があります。ヘルプが必要な場合は、WordPressプラグインのインストール方法に関するチュートリアルをご覧ください。

プラグインを有効化したら、WordPressダッシュボードから コードスニペット » スニペットを追加 に移動します。

スニペット追加ページから、「カスタムコードを追加(新規スニペット)」オプションにマウスカーソルを合わせ、「+カスタムスニペットを追加」ボタンをクリックします。

WPCodeに新しいカスタムコードスニペットを追加

次に、画面に表示されるオプションのリストからコードの種類として「PHPスニペット」を選択します。

コードの種類としてPHPスニペットを選択

次に、ページの上部でスニペットのタイトルを追加します。これは参照用であり、コードが何のためのものかを思い出すのに役立つものであれば何でも構いません。

次に、上記のコードを貼り付けます。

コードをコードプレビューボックスに貼り付けます

その後、ページ上部のスイッチを「非アクティブ」から「アクティブ」に切り替え、「スニペットを保存」ボタンをクリックします。

カスタムコードスニペットを有効化して保存する

これで、カテゴリアーカイブページにアクセスでき、カスタム投稿タイプのエントリが表示されるようになります。

カテゴリアーカイブページに表示される投稿タイプ

カスタム投稿タイプにもタグを追加するために、同じ方法を使用できます。詳細については、カテゴリーとタグの違いに関するガイドをご覧ください。

WordPressのカテゴリに関するエキスパートガイド

WordPressでカテゴリを使用することについて、さらに詳しく知りたいですか?これらのチュートリアルをご覧ください:

この記事が、WordPressでカスタム投稿タイプにカテゴリを追加する方法を学ぶのに役立ったことを願っています。また、ウェブサイトを成長させるための必須のWordPressプラグインや、ブログのトラフィックを増やす方法に関するヒントもご覧ください。

この記事が気に入ったら、WordPressのビデオチュートリアルについては、YouTubeチャンネルを購読してください。 TwitterFacebookでもフォローできます。

開示:当社のコンテンツは読者によってサポートされています。これは、当社のリンクの一部をクリックすると、当社が手数料を得る可能性があることを意味します。WPBeginnerがどのように資金提供されているか、それがなぜ重要か、そしてどのように私たちをサポートできるかについては、こちらをご覧ください。当社の編集プロセスはこちらです。

究極のWordPressツールキット

無料のツールキットにアクセスしましょう - すべてのプロフェッショナルが持つべきWordPress関連の製品とリソースのコレクションです!

読者とのインタラクション

39 CommentsLeave a Reply

  1. この記事、ありがとうございます

    カテゴリページに複数の投稿タイプを表示するためのコードはうまく機能しています。

    タグページに複数の投稿タイプを表示したいのですが、そのコードを共有していただけますか?

    • カスタム投稿タイプにタグを追加するには、タクソノミー配列に「post_tag」を追加します。その場合、次のようになります。

      ‘taxonomies’ => array( ‘category’, ‘post_tag’ ),

      管理者

  2. ブログ投稿のカテゴリとカスタム投稿タイプのカテゴリリストをどのように分離できますか?上記のコードを追加しましたが、機能します。しかし、問題は、このカスタム投稿タイプのカテゴリとブログ投稿のカテゴリが混ざっていることです。それらは分離されるべきです。

    • このチュートリアルの目的は、それらを混在させることです。お探しのものについては、カスタム投稿タイプに別のカテゴリを使用するのが最善かもしれません。これにより、カテゴリアーカイブページに表示されなくなります。

      管理者

  3. こんにちは。
    このコードを使用したら、完璧に機能しました!CPTは私が選択した投稿カテゴリに表示されます。
    しかし、ブログアーカイブには表示されません。すべての投稿を表示するデフォルトのアーカイブのように。
    そこにも表示するにはどうすればよいですか?

    本当にありがとうございます!

  4. メニューにカスタム投稿タイプ(CPT)のカテゴリを追加する方法を教えてください。

    CPT「article」にカテゴリー「car」と「truck」があります

    これらの項目を含むカスタムメニューを作成したいです。

    すべて – 車 – トラック

    いくら探しても見つかりません。メニュー管理のカテゴリは表示され、メニューに追加することもできますが、これらのリンクの結果は空白のページになります。
    表示されているカテゴリは、投稿カテゴリを意図したものであり、カスタム投稿タイプカテゴリではないと推測します…

    何かヒントはありますか?

    Connie

    • メニューエリアの画面オプションを確認して、カスタム投稿タイプが現在チェックされていないオプションとして利用可能かどうかを確認してください。

      管理者

  5. 投稿タイプ「products」を作成し、コアのwpカテゴリーを使用しています。
    私の製品URL構造は mysite.com/product/skf bearing 12 です。
    私のカテゴリーページは mysite.com/category/bearings を表示します。
    なぜ製品URLにカテゴリーがURL内に表示されないのでしょうか? このように:
    mysite.com/bearings/skf bearing 12
    カスタム投稿のパーマリンクは %category%%post% です。
    パーマリンクを保存しましたが、まだ同じ構造が表示されています。

  6. こんにちは!デフォルトの投稿カテゴリリストがカスタム投稿タイプのカテゴリリストに表示されています

    直すのを手伝ってもらえませんか

    • こんにちは、Moisesさん。

      この文字列は翻訳に使用されます。テーマが翻訳をサポートしている場合は、テーマのテキストドメインに置き換える必要があります。ここで何を使用すべきか不明な場合は、テーマサポートに問い合わせてください。そのまま貼り付けても、これらの文字列は無視されます。

      管理者

  7. FYI、これは管理画面での一括編集を壊します。多くの投稿タイプに追加しましたが、一括編集に移動すると、クエリのpost_type部分が、管理画面で編集しようとしている投稿タイプではなく、「Array」になります。

    これを回避するには、if( is_category() ): の前にこれを追加するだけです。

    `if ( is_admin() ) return;`

  8. こんにちは、助けが必要です。
    CPTを2つ持っていますが、それらが共通の分類を持たないようにしたいです。
    例えば
    CPT 1
    – 分類 (タイプ)
    – タイプ A
    – タイプ B
    CPT 2
    – 分類 (タイプ)
    – タイプ c
    – タイプ D
    注意: CPT 1 のタイプ A & B をここに表示したくありません。
    ありがとうございます

      • 2つ目のカスタム投稿タイプを追加するにはどうすればよいですか?
        CPTの名前を変更してコードを繰り返してみましたが、うまくいきません…
        何かアイデアはありますか?

  9. カテゴリーページでのCPT表示コードは、見事に機能しました。ありがとうございます!ただし、注意すべき点があります。カテゴリー名でタグ付けされた最新の投稿/CPT投稿は、そのカテゴリーページにすぐに表示されません。2回目の同様のアクションでのみ表示されます。つまり、同じカテゴリーに別の投稿/CPT投稿が追加された場合にのみ、最初の投稿がそのカテゴリーページに表示されます。これに対する修正方法はありますか?

  10. CPT UIを使用しています。「jobs」というカスタム投稿タイプを作成し、カテゴリを許可しました。しかし、これらの同じカテゴリは投稿にもあります。それらは同じカテゴリを使用しています。私のカスタム投稿タイプ「jobs」が独自のカテゴリを持ち、通常の投稿が独自のカテゴリを持つことは可能ですか?ありがとうございます

    • 同じ質問です。カスタム投稿タイプのカテゴリアーカイブを作成したい場合、カスタムクエリを実行する必要がありますか?

  11. メニュー項目もリストする「最近の投稿」サイドバーウィジェットをどのように扱いますか?

    $post_type = array(‘nav_menu_item’, ‘post’, ‘movies’);

  12. Thanks for the great tutorial here. :)

    カスタム投稿をカテゴリごとに別のページに表示する方法を教えていただけますか?

    デフォルトのカテゴリーページは正常に機能しており、投稿が表示されます。しかし、別のページで同じカテゴリーの投稿を表示しようとすると、空の配列が返されます。助けてください。

  13. ありがとうございます!これは素晴らしいです。もっと複雑な(そして機能しなかった)解決策で取り組んでいた問題を簡単に解決してくれました。

    ただ一つ質問があります。CPTのカスタムタクソノミーを作成する際にタクソノミー宣言を追加したことはありませんが、タクソノミーは常に機能していました。「category」だけを追加して何が起こるか見てみましたが、それは見事に機能し、既存のカスタムタクソノミーに悪影響を与えることなく、CPTに投稿カテゴリを追加しました。

    カスタムタクソノミーをCPT引数に入れるのはベストプラクティスですか?

    Thanks again for sharing :)

  14. カスタム投稿タイプにカテゴリとサブカテゴリを追加するためのカスタムコード。$post_type = array(‘nav_menu_item’, ‘post’, ‘myPostType’); のコードをカテゴリ表示に使用すると、そのカテゴリのみが表示されますが、別のカテゴリに同じ関数を再利用しても機能しません。何かアイデアをいただけますか?

  15. こんにちは。カスタム投稿タイプ(Artwork)を functions.php で正常に作成しました。次にカスタム分類(「階層的」=> true)を作成したので、新しい Artwork 投稿を作成する際にカスタムカテゴリーを追加できます。

    同じカスタムタクソノミー関数内で、アートワーク投稿のカテゴリーを事前に定義することは可能でしょうか?

    ユーザーが選択できるのは、1) 絵画、2) 彫刻の2つのカテゴリのみとしたいです。ユーザーがこれら以外のカテゴリを追加できるようにしたくありません。理想的には、ユーザーはどちらかのカテゴリを選択することを「強制」され、つまり、カテゴリが選択されない限り投稿は公開できないようにしたいです。

    これは可能ですか?

  16. 複数のカスタム投稿タイプに複数のカテゴリを追加しています。

    1行に複数追加するにはどうすればよいですか?

    $post_type = array(‘nav_menu_item’, ‘post’, ‘myPostType’);

    ?

    ありがとうございます!

    • 問題はすでに解決しました。

      本能的に、カスタム投稿タイプを配列としてリストアップしましたが、カンマで区切って$post_typeオブジェクト内にリストアップするだけでよかったことがわかりました。

      ありがとうございます!

  17. こんにちは、質問があります。プラグインを投稿タイプとして使用しており、独自のカテゴリ領域があります。このプラグインでWordPressのコアカテゴリを使用したいのですが、今のところそれができません。上記のプラグインを使用しましたが、その後、プラグインの下に2つのカテゴリ領域が作成され、その投稿タイプの投稿をカテゴリで表示しようとすると、プラグイン独自のカテゴリリストが空であるため何も表示されません。プラグインのコードを操作するなど、多くのことを試しましたが、どれも問題を解決しませんでした。何か提案はありますか?

  18. この記事は、現在のWPバージョンで動作するように最近更新されましたか?使用されているプラグインが2年以上更新されていないことに気づき、使用を少しためらっています。

  19. 素晴らしいチュートリアルをありがとうございます。カスタム投稿をカテゴリごとに別のページに表示する方法を教えていただけますか?例えば、「talent」というカスタム投稿タイプと、「art」というカテゴリがあるとします。投稿は2つあり、1つはカスタム投稿タイプ「talent」で作成され、もう1つは通常の投稿として作成されています。どちらの投稿も「art」カテゴリに割り当てられています(これはカスタム投稿タイプと通常の投稿の両方に共通です)。通常の投稿の場合、例:example.com/category/art/ のようにカテゴリページを表示できることはわかっています。カスタム投稿タイプのカテゴリページの場合、URLは example.com/talent/art/ になるはずですが、404エラーが表示されます。

  20. よくできました、ありがとうございます!
    いくつか問題があります:
    – 「カテゴリー」ウィジェットにカスタム投稿タイプのカテゴリーが表示されますが、クリックすると「何も見つかりませんでした」というメッセージが表示されます。
    – 「最近の投稿」ウィジェットにカスタム投稿タイプの投稿が表示されません。
    これを修正する方法はありますか?

  21. 興味深い記事です。WordPressは、企業がビジネス要件に合った効率的なウェブサイトを持つことを可能にする強力なエンタープライズウェブコンテンツ管理サービスです。使いやすく、手間のかからないツールにより、開発が容易に見えます。レスポンシブデザインからセキュリティ、拡張性まで、WordPress CMSはすべてを備えていますが、ウェブサイトに最適なツールを見つけることが重要です。
    カスタム投稿タイプにカテゴリを追加することは、記事で述べられている方法が役立つ、ある投稿を別の投稿と区別するために必要になることがあります。プラグインを使用することは簡単な方法であり、技術者でない人でも実装できます。しかし、この記事を読むと、技術者でない人がコードを使用してこの機能を追加することが難しいとは思いません。
    共有していただきありがとうございます。

  22. 素晴らしいヒントです。これで問題を解決する方法がわかりました。ありがとうございます!

返信する

コメントを残していただきありがとうございます。すべてのコメントは、当社のコメントポリシーに従ってモデレーションされますので、ご了承ください。メールアドレスは公開されません。名前フィールドにキーワードを使用しないでください。個人的で有意義な会話をしましょう。