サポート » 使い方全般 » カスタム投稿とデフォルト投稿に共通のカテゴリーを使用したい

  • 解決済 namaechan

    (@namaechan)


    初めまして、wordpress初心者です。
    現在カスタム投稿とデフォルトの投稿の2つの投稿ページがあり、それぞれに共通のカテゴリーを持たせたいです。

    今実装しようとしているのは、
    カスタム投稿でカテゴリーA、デフォルトの投稿でもカテゴリーAを選択し、
    メニューバーの「カテゴリーA」を押した場合には、投稿タイプに関係なく全てのカテゴリーAに関連した記事を表示させる
    というものです。

    数日間調べ続けているのですがまったく近づけず苦心しています。
    どなたかご経験ございましたら参考になるページやアドバイスをいただきたいです。
    よろしくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちわ、namaechanさん。

    メニューバーの「カテゴリーA」を押した場合には、投稿タイプに関係なく全てのカテゴリーAに関連した記事を表示させる

    この一文のメニューバーが何を指すのかが分からなかったのですが、プログのサイドバーというふうに勝手に解釈して、以下のようにしてみました。

    ■仕様

    1. Info というカスタム投稿タイプを作成
    2. Info はデフォルトのカテゴリとタグを使用して記事を分類
    3. カテゴリーとタグのアーカイブを表示した際に、info の記事も含まれるようにする

    ■functions.php

    function register_post_type_infomation() {
    	register_post_type( 'info',
    		array(
    			'labels'           => array(
    				'name'           => __( 'Infomations' ),
    				'name_admin_bar' => _x( 'Infomation', 'add new on admin bar' ),
    				'singular_name'  => __( 'Infomation' ),
    			),
    			'public'           => true,
    			'_edit_link'       => 'post.php?post=%d', /* internal use only. don't use this when registering your own post type. */
    			'capability_type'  => 'post',
    			'map_meta_cap'     => true,
    			'hierarchical'     => false,
    			'rewrite'          => array( 'slig' => 'info' ),
    			'query_var'        => false,
    			'supports'         => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ),
    		)
    	);
    	register_taxonomy( 'post_tag', array( 'post', 'info' ),
    		array(
    			'hierarchical' => false,
    			'query_var'    => 'tag',
    		)
    	);
    	register_taxonomy( 'category', array( 'post', 'info' ),
    		array(
    			'hierarchical' => true,
    			'query_var'    => 'category_name',
    		)
    	);
    }
    add_action( 'init', 'register_post_type_infomation' );
    
    function category_loop_filter( $query ) {
    	if ( is_admin() && ! $query->is_main_query() ) {
    		return;
    	}
    	if ( $query->is_category() || $query->is_tag() ) {
    		$query->set( 'post_type', array( 'post', 'info' ) );
    	}
    }
    add_action( 'pre_get_posts', 'category_loop_filter' );

    こんな感じでいかがでしょう ?
    一応 Twenty Fourteen でテストしていますが、サクッとテストしただけなのでバグとかあるかもしれません。
    投稿タイプを追加した後パーマリンクの更新を行ってください。
    設定内容は変更せず、更新ボタンを押下するだけでよいです。

    見当違いな回答だった場合、すみません ! !

    トピック投稿者 namaechan

    (@namaechan)

    KUCKLUさん、早速のお返事ありがとうございます!

    はい、お察しの通りの内容で間違いありません。
    コードを追加し、うまく動きました!

    register_taxonomy( 'category', array( 'post', 'info' ),
    		array(
    			'hierarchical' => true,
    			'query_var'    => 'category_name',
    		)
    	);

    この、一つ目のarrayの部分に同じカテゴリを持たせたい投稿タイプ名を入れこむだけなのですね!

    以下、私がひっかかっていた点ですので私と同じ疑問をもたれた方の参考になれば…
    ・register_taxonomyの入れる場所を間違えた(凡ミス)
    ・書き換えたあと、個別のカテゴリ全ての記事ページが表示されない⇒個別の記事が表示されているのなら、query_varやパーマリンク周辺の設定でミスがあったりする

    KUCKLUさんが”投稿タイプを追加した後パーマリンクの更新を行ってください。”とおっしゃっていたのは2つ目の関係した理由なのかな?と思ったりしました。

    KUCKLUさん、本当にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタム投稿とデフォルト投稿に共通のカテゴリーを使用したい」には新たに返信することはできません。