概要
Cocoonテーマでカテゴリーごとに異なるヘッダーを表示させたい場合、テーマのコードを編集することで、実現可能です。ヘッダー画像の場合、
tmp/body_top.php
にカテゴリごとの分岐処理を追加し、tmp/header-container.php
をカテゴリごとに作成するtmp/header-container.php
にカテゴリごとに使う画像を変えるように記述する
の2パターンで実現可能です。今回は一つ目の方法を紹介します。
基本的な編集は子テーマで行いますが、一部親テーマにしか存在しないファイルを変更する必要があるので、その部分は親テーマのファイルを子テーマにコピーして編集していきます。
親テーマと子テーマの関係については以下で説明していますので、併せて確認してみてください。
ヘッダー設定のコード
Cocoonでヘッダー設定が行われている場所は、
header-container.php
になります。
この構造は複雑なので、以下の図に概要をまとめました。
single.php
が呼び出される。まずはメインのphpが最初に読み込まれます。get_header()
でheader.php
が読み込まれるheader.php
ではさらにパーツごとに様々なファイルが読み込まれるが、ヘッダーロゴ画像を指定しているのは、tmp/body-top.php
のサイトヘッダー部分です。- サイドヘッダーにあたる
tmp/header-container.php
が読み込まれる
ようやくヘッダーが設定されているファイルにたどり着きました。
カスタマイズ方法
ファイルの準備
まずは、親テーマからtmp/body-top.php
,tmp/header-container.php
を子テーマにコピーします。
body-top.php
body-top.php
は以下の部分を変更します。
変更前
<?php //サイトヘッダー
cocoon_template_part('tmp/header-container'); ?>
変更後
<?php
// ヘッダーの条件分岐
if (in_category('category-slug1')) {
cocoon_template_part('tmp/header-container-1');
} elseif (in_category('category-slug2')) {
cocoon_template_part('tmp/header-container-2');
} else {
cocoon_template_part('tmp/header-container');
}
?>
今回は、category-slug1、category-slug2で3パターンに分岐します。
category-slugはカテゴリごとに決まっているスラッグで、投稿のカテゴリーから確認できます。
header-container.php
続いてカテゴリーごとに表示するheader-container.php
を作成します。
<?php //ロゴタグの生成
generate_the_site_logo_tag(); ?>
この部分でロゴ画像が設定されているので、ここを次のように変更します。
<div class="logo logo-header logo-image"><a href="https://[ドメイン名].com/" class="site-name site-name-text-link" itemprop="url"><span class="site-name-text"><img class="site-logo-image header-site-logo-image" src="[画像ファイルのURL]" alt=""><meta itemprop="name about" content=""></span></a></div>
例えば
header-container-1.php
は次のようになります。
<?php //ヘッダーエリア
/**
* Cocoon WordPress Theme
* @author: yhira
* @link: https://wp-cocoon.com/
* @license: http://www.gnu.org/licenses/gpl-2.0.html GPL v2 or later
*/
if ( !defined( 'ABSPATH' ) ) exit; ?>
<div id="header-container" class="header-container">
<div id="header-container-in" class="header-container-in<?php echo get_additional_header_container_classes(); ?>">
<header id="header" class="header<?php echo get_additional_header_classes(); ?> cf" itemscope itemtype="https://schema.org/WPHeader">
<div id="header-in" class="header-in wrap cf" itemscope="" itemtype="https://schema.org/WebSite">
<?php //キャッチフレーズがヘッダー上部のとき
if (is_tagline_position_header_top()) {
cocoon_template_part('tmp/header-tagline');
} ?>
<?php //ロゴ前にコードを挿入するためのアクションフック
do_action( 'wp_header_logo_before_open' ); ?>
<div class="logo logo-header logo-image"><a href="https://[ドメイン名].com/" class="site-name site-name-text-link" itemprop="url"><span class="site-name-text"><img class="site-logo-image header-site-logo-image" src="[画像ファイルのURL]" alt=""><meta itemprop="name about" content=""></span></a></div>
<?php //ロゴ後にコードを挿入するためのアクションフック
do_action( 'wp_header_logo_after_open' ); ?>
<?php //キャッチフレーズがヘッダー下部のとき
if (is_tagline_position_header_bottom()) {
cocoon_template_part('tmp/header-tagline');
} ?>
</div>
</header>
<?php cocoon_template_part('tmp/navi'); ?>
</div><!-- /.header-container-in -->
</div><!-- /.header-container -->
header-container-2.php
も同様に作成することで、ロゴ画像をカテゴリごとに変更できます。