ダイヤユウ

ダイヤ ユウ

主にプログラミング。

ワードプレスで特定のカテゴリの記事下にだけコンテンツを挿入する方法

特定のカテゴリの記事下にだけ特定のコンテンツを入れたいなあ、なんて思う時もあると思います。 今回は簡単にその方法を紹介します。

ワードプレスのテーマのファイルを見て見ると、以下のような関数を使ってヘッダーやフッターを読み込んでいることがわかる。

<?php get_header(); ?>

<?php get_footer(); ?>

<?php get_sidebar(); ?>

例えば、自分で作ったサイドバーのファイルを読み込ませたいのなら、get_sidebar('hoge')とすれば、sidebar-hoge.phpが読み込まれる。ただ、今回やりたいのはサイドバーでもなければヘッダーでもフッターでも無い。ただ、記事下に特定のコンテンツを表示させたいだけです。

特定のカテゴリのそれぞれの記事の一番下に同じ記述をしても動作はしますが、これでは作業量が多くなり、やっぱり削除しようといったときにものすごい面倒なのでコードを編集したいと思います。 自分で作ったファイルを読み込ませたい場合は、以下の記述をすれば読み込ませることが可能です。

<?php get_template_part( 'hoge' ); ?>

これでhoge.phpというファイルを読み込んでくれます。今回は個別記事の一番下で読み込んでもらいたいので、single.phpをいじります。

特定のカテゴリーのスラッグを調べる

特定のカテゴリにしか表示させたく無いので、条件分岐を使って指定したカテゴリにのみファイルを読み込ませるようにします。 管理画面からカテゴリーのスラッグを確認しましょう。

single.phpに配置する

自分とはテーマが違うので、記述は違うかもしれませんが以下の記述を見つけます。sectionの閉じタグです。

<?php if ( is_active_sidebar( 'addbanner-pc-contentfoot' ) && !wp_is_mobile() ) : ?>
<div class="add">
<?php dynamic_sidebar( 'addbanner-pc-contentfoot' ); ?>
</div>
<?php endif; ?>

</section>

この下にファイルを読み込む関数を追加します。

<?php
if(in_category('スラッグ')) :
    get_template_part( '好きな名前' )
endif
?>

スラッグのところは、さっき調べた自分が表示させたいスラッグの名称を入れてください。こう記述することによってそのスラッグを持つカテゴリーにしかファイルを読み込まなくなります。 つまり、指定したカテゴリーにのみ意図するコンテンツを表示させることが可能です。

この上に配置しても良いですね。

<?php if ( is_active_sidebar( 'addbanner-pc-contentfoot' ) && !wp_is_mobile() ) : ?>
<div class="add">
<?php dynamic_sidebar( 'addbanner-pc-contentfoot' ); ?>
</div>
<?php endif; ?>

コンテンツを作る

コンテンツを読み込む記述はできたので、ファイルを作ってその中に表示させたいコンテンツを作っていきます。ファイル名は、get_template_part( '好きな名前' )好きな名前の部分.phpです。 ワードプレスの場合は、サーバーを借りていると思うのでそのサーバーに入ってファイルを作るかFTPのソフトを使ってそこにファイルをアップロードします。自分はサーバー内に入ってファイルを作る方式でいきます。

自分が今使っているテーマのフォルダまで移動しましょう。自分はstorkを使っているのでそこまでいきます。 「themes」→「jstork」と進むとそこにテーマのファイルがたくさん置かれていますね。ここに自分が読み込ませたいファイルを作ります。

ファイルを作ったら、ワードプレスの管理画面から「テーマの編集」。使用しているテーマのファイルを見てみましょう、するとそこに作ったファイルがあるはずです。 あとはそれを編集するだけで、get_template_part()が読み込まれ呼ばれます。

複数のカテゴリに跨ぐ表示

複数のカテゴリに表示させたいときには以下のように記述を変えればいいだけです。

<?php
if(in_category('スラッグ1') || in_category('スラッグ2')) :
    get_template_part( '好きな名前' )
endif
?>