Secura Vita

Category: Works , WordPress
Works

wordpress:カテゴリーページをカテゴリーごとにカスタマイズする(カスタム投稿タイプを使用)

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のコードが分かる人はカスタムフィールド使ったりして並びやカラムをカテゴリ毎に変えることも出来ますよね。

いろいろ試してみてください。

ざーっと作ったのでおかしいところがあれば…


おもしろかった・役に立った
▼ブログランキング参加中!クリック!▼
  • ブログランキング・にほんブログ村へ

Leave a comment

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

ソースコードを記入する場合は [code]~[/code] でくくってください。
[code]
echo "Hello World";
[/code]

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください