wordpress:カテゴリーページをカテゴリーごとにカスタマイズする(カスタム投稿タイプを使用)
カテゴリーページをカテゴリーごとにデザインを付け足せる方法で簡単でいいのないかなーと考えた末、カスタム投稿タイプを使うのが一番楽じゃないのかと思い作ってみました。
カスタマイズ的にはそれほど多くないのでよろしければお試し下さい。
カスタマイズ内容
この部分をカテゴリーごとに変更します。
カテゴリ分けはこのようにしています。
- ブログ
- アニメ
- 映画
カスタム投稿タイプを追加
今回のカスタマイズではカテゴリページのデザイン用にカスタム投稿タイプを使用するのでまずはそれを追加します。
追加するのは「Custom Post Type UI」というプラグインを使用します。簡単ですよ。
Custom Post Type UI — WordPress Plugins
インストールしてプラグインを有効化すると管理画面に「CPT UI」をいう項目が出来ますのでその中の「Add/Edit Post Types」から追加します。
今回は名前を「カテゴリーデザイン」、slugを「categorydesign」にします。
「Settings」は下記のように。
- 一般公開 ⇒ false
記事の一般公開はしないのでfalseにします。 - ビルトイン分類 ⇒ カテゴリー
これを基準に出力しますのでカテゴリーにチェック。
カテゴリー用デザインを追加
カテゴリーページ用コンテンツは先程作成したカスタム投稿に追加しますので、新しくできた「カテゴリーデザイン」⇒「新規追加」で。
エディターに書いたら出したいカテゴリーにチェックをいれます。
親子関係は取得しないので出したいカテゴリに全てチェックを入れて下さい。
子カテゴリにも同じ内容を出力する場合。
functions.phpでオリジナルの関数を作成
出力用の関数を作成します。
function the_category_design( $echo = true ) { $catID = get_query_var( 'cat' ); $args = array( 'post_type' => 'categorydesign', 'posts_per_page' => 1, 'category__in' => $catID ); $design = get_posts( $args ); if( $design ) { $content = apply_filters( 'the_content', $design[0]->post_content ); if( $echo ) { echo '<div class="entry-content">'. $content .'</div>'; } else { return $content; } } else { return false; } }
- 2行目
現在のカテゴリーIDを取得します。 - 3行目から
記事の取得用です。ポストタイプ名は作成したものを使用して下さい。 - 10行目
the_contentフィルターを通します。これでショートコードなんかも有効になります。 - 11行目から
引数$echoがtrueの場合は出力、falseの場合はreturnでコンテンツを返すようにしています。
必要に応じて<div class=”entry-content”>の部分を変更して下さい。
category.phpの任意の場所に出力用コードを追加
カテゴリー用なのでcategory.phpの表示したい場所に下記コードをプラスします。
<?php the_category_design(); ?>
内容を取得する場合は引数にfalseを設定します。
<?php $design = the_category_design( false ); ?>
結果
投稿タイプ「categorydesign」にカテゴリー「ブログ」で投稿。
投稿タイプ「categorydesign」にカテゴリー「アニメ」で投稿。
映画のページは設定されてないので何もでません。
出したくない場合削除でもいいですが「非公開」にしてもらっても大丈夫です。
キャンペーン時の入れ替えなんかで前のものを残しておきたい場合に有効ですね。
わりかし簡単にできると思うのですがどうでしょう?
自身で関数作ったり、phpのコードが分かる人はカスタムフィールド使ったりして並びやカラムをカテゴリ毎に変えることも出来ますよね。
いろいろ試してみてください。
ざーっと作ったのでおかしいところがあれば…