【WordPress】カテゴリー別に異なる内容を表示する(ショートコード使用)

WordPressにおいて、メッセージや広告など、カテゴリー別に異なる内容を表示したい時があります。

本記事では、関数「in_category()」を使って、カテゴリーごとに異なる内容を表示する方法をご紹介します。

テンプレートに組み込むのではなく、ショートコードを利用します。ウィジェットにショートコードが記載できる場合に汎用性が高まります。

関数「in_category()」

条件武器に関する関数「in_category()」は、そのページが指定したカテゴリーに含まれるかどうかを判別します。

例えば

if(in_category('1'))

のようにカッコの中にID(数字)を設定すれば、そのページがカテゴリーID「1」に属している時に、その後に続く内容を実行することができます。

詳しいリファレンス等については下記よりどうぞ。

関数リファレンス/in category - WordPress Codex 日本語版

カテゴリーIDを調べる

条件分岐を設定するため、カテゴリーのIDを調べておきます。

WordPress管理画面の「投稿」から「カテゴリー」を選びます。

表示されたカテゴリーの中から、IDを知りたいカテゴリーの上にマウスオーバーすると、リンクが表示されます(Chromeの場合)。その中から「tag_ID=」に続く数字が、そのカテゴリーのIDです。

functions.phpの準備

テーマのfunctions.phpにショートコードを記載する準備です。

なお、以下内容の導入については自己責任でお願いします。当記事の記載内容がもとでWordPressが動かなくなっても責任を持てませんので、あらかじめご了承ください。

テスト環境でのテストや、バックアップを取った上での反映をオススメします。また子テーマの利用もあわせてオススメします。筆者環境は子テーマを利用しています。

話を戻してfunctions.phpへのショートコードの追加。

WordPressは4.9.xぐらいから、管理画面の「テーマの編集」からphpファイルの更新をしようとすると、

致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。SFTP を使うなど、他の手段で PHP ファイルの変更をアップロードする必要があります。

というアラートが表示され、管理画面からの更新ができなくなりました。

なので筆者はFTPソフトで子テーマのfunctions.phpをダウンロードし、テキストエディタで編集、再度FTPソフトでアップロード、という手順を取っています。

ただしこの方法ではPHPの記述に対するチェックが働かず、下手をすればブログ画面が真っ白、という恐ろしい事態になる可能性も。

なのでアップロード前には、必ず正常に動いている状態のfunctions.phpのバックアップを取っておき、問題が起きたときにすぐに元に戻せるようにしておきましょう。

なお筆者はWordPressテーマ「Simplicity2」およびその子テーマを利用。その場合は「/wp-content/themes/simplicity2-child/」以下にfunctions.phpが格納されています。

functions.phpにショートコードを設定

それでは具体的なコードです。functions.phpに以下のショートコード設定を記載します。

function side_bnr_pc_shortcode() {

//デフォルト表示
$output_text = 'aaa';

if(is_single()){

if(in_category(000)){
$output_text = 'bbb';
}elseif(in_category(111)){
$output_text = 'ccc';
}

}

return $output_text;

}
add_shortcode('side_bnr_pc', 'side_bnr_pc_shortcode');

筆者はPC用表示のサイドバーに同機能を取り入れたかったので「side_bnr_pc」としていますが、名前はなんでもいいです。

基本的には、デフォルト表示の「output_text」に設定した文字列(この場合は「aaa」)が、ショートコードを入れた部分に表示されます。

ただし個別記事ページかつ、以下に続くカテゴリーに属する記事の場合は、それぞれ設定した文字列が表示される仕組みです。

例えばカテゴリー「000」に属する個別記事ならば「bbb」、カテゴリー「111」に属する個別記事ならば「ccc」が表示されます。

ショートコードの記載

ショートコードの指定は、ブログ記事の任意の箇所に

[side_bnr_pc]

と記載します。

またSimplicity2のように、ウィジェットにショートコードが記載できるテーマであれば、

こんな感じでウィジェットにショートコードを記載すれば、カテゴリーごとにウィジェットの中身を変更することができます。

まとめ

以上、WordPressでショートコードを利用して、カテゴリー別に異なる内容を表示する、でした。

functions.phpを編集するということで多少の注意は必要ですが、ショートコードにしておくことで一括管理できるので便利です。またウィジェットと組み合わせることでサイドバー記事下など、任意の場所に簡単に挿入できるのも便利です。

コメント