[WP3.8.1] 特定のタクソノミーを複数の投稿タイプで使用する

例えばデフォルトの「投稿」メニューに、「カテゴリー」という分類方法があると思います。この「カテゴリー」を他の投稿タイプでも使えないかなと思って調べてみました。
(※投稿タイプがわからない人は、この記事でも読んでみてください。)

wp-includes/taxonomy.php の 44行目あたりに、「カテゴリー」を登録するコードがあります。

  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_type=’staff’)でも使いたいという場合は、以下のように記述すると「スタッフ」メニューでも使用できるようになります。

  register_taxonomy( 'category', array(post, staff), array(     //customize
        'hierarchical' => true,
        'query_var' => 'category_name',
        'rewrite' => $rewrite['category'],
        'public' => true,
        'show_ui' => true,
        'show_admin_column' => true,
        '_builtin' => true,
    ) );

というわけで「カテゴリー」という特定の分類方法を複数の投稿タイプで共通して使えるようになるわけですが、そうすると投稿タイプに関係なく、「カテゴリー」で特定の分類名を選択した場合は、その分類名に属する記事を一覧表示したいところでしょう。デフォルトですと、カテゴリーウィジェットがあると思いますので、カテゴリーウィジェットで特定の分類名を選択した際に、とりあえず投稿タイプに関係なく記事一覧を表示するようにしてみます。(ただし弊害が出る可能性あり)

./wp-includes/query.php の 2219行目あたりに、記事を抽出する際のデフォルト投稿タイプを定義する箇所があります。

        if ( !isset($q['post_type']) ) {
            if ( $this->is_search )
                $q['post_type'] = 'any';
            else
                $q['post_type'] = '';
        }

以下のように記述すると、とりあえずデフォルトの「投稿」と、追加した「スタッフ(post_type=’staff’)のどちらでも、一覧表示してくれるようになります。

if ( !isset($q['post_type']) ) {
	if ( $this->is_search )
        $q['post_type'] = 'any';
    else
//      $q['post_type'] = '';
        $q['post_type'] = array('post', 'staff');   //customize
}

かなり強引な方法なので、このあたりで一覧表示時の投稿タイプが変更できるっぽいぐらいに思っていただければ幸いです。

カテゴリー: 未分類   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

* Copy This Password *

* Type Or Paste Password Here *

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>