【Old Log】カスタムヘッダーの実装




この情報は三年以上前の古い情報です。

簡単に実装できると思っていたのだけれど(方法がわかればとても簡単)そこに行き着くまでがとっても面倒だったので、メモ。というか恥さらし?
とりあえず、やった作業の記録です。

functions.php

<?php
if ( ! function_exists( 'hogehoge01' ) ) :
function hogehoge01() {

//Custom Header.
add_theme_support('custom-header',
array(
'default-image' => get_template_directory_uri() . '/img/hoge.img',
'flex-width'=> true,
'flex-height'=> true,
'width'=> 650, 
'height'=> 250,
'header-text'   => true,
'default-text-color'   => '000000',
'wp-head-callback' => 'header_style',  
'admin-head-callback' => 'hoge_header_style'
));
}endif; 
add_action( 'after_setup_theme', 'hogehoge01' );

function hoge_header_style(){?>
<style type="text/css">
#headimg h1 {
margin: 0;
padding-top: 20px;
padding-left: 30px;
font-size: 30px;
font-family: Arial, "Times New Roman", Times, serif;
}
#headimg h1 a {
text-decoration: none;
}
#headimg #desc {
padding-left: 30px;
padding-top: 8px;
font-size: 14px;
}
</style>
<?php
}
function header_style(){ ?>
<style type="text/css">
</style>
<?php
}

※「hoge_header_style」のCSS部分。twentyfourteenから流用

if ( ! function_exists( ‘hogehoge01’ ) ) :
function_exists
指定した関数が定義されている場合に TRUE を返す

※関数とは?
行いたい処理をひとまとめにして、あとでそれを簡単に実行できるようにするためのもの
http://ja.wikibooks.org/wiki/PHP_入門_関数とは

命令文を日本語にすると・・・
「!があるので例外的処理として扱う。もし、hogehoge01が宣言されていないときは実行してね」という感じ。一応、これは親テーマを作るつもりで書いているので、子テーマを作成された場合も想定しての宣言。
「hogehoge01」が宣言されてたら、親の「hogehoge01」を実行させないよって意味。なので、小テーマを利用したい際はif ( ! function_exists( ‘hogehoge01’ ) ) を定義してもOKてことですな。

function hogehoge01() {
「hogehoge01」ユーザー定義関数
内容は「hogehoge01」の使用法を説明するためのコード
add_theme_support(‘custom-header’,
カスタムヘッダーを使うよ
‘default-image’ => get_template_directory_uri().’/img/hoge.img’,
初期設定として表示させたい画像
‘flex-width’=>true,
‘flex-height’=>true,

縦横のトリミングを可能する
‘width’=>650,
‘height’=>250,

ヘッダー画像の幅と高さ
‘header-text’=>true,
テキスト表示を可能しします
‘default-text-color’=>’000000’,
初期のテキストの色です
‘wp-head-callback’=>’header_style’,
‘admin-head-callback’=>’hoge_header_style’

こいつ→’wp-head-callback’とこいつ→’admin-head-callback’はあんまり触れてるサイトがない!所謂コールバックってやつなんだけど、こんな名前→「コールバック」なんてつけるから、感覚でつくってまう私なんか、もうチンプンカンプン。
まあ愚痴ってもしょうがないので、’wp-head-callback’はテンプレートheader.php部分にところがあるんですけど(自作の場合は自分で記入。なければ書いとこう。これがないとプラグインとか動かないやつとかある。)その部分にfunction header_style()〜で記入しているスタイルシートを出力させます。’admin-head-callback’は管理画面上のCSS読み込み。
add_action( ‘after_setup_theme’, ‘hogehoge01’ );
アクション関数を追加しま〜す。書式は以下
[php] add_action( ‘after_setup_theme’, ‘関数名’ ,priority )
[/php] 同じタイミングを指定された場合に処理する順番に優先順位をつける引数「priority」というものがあるので、何も書かれていない場合はデフォルト値の「10」が入ってます。実行の順番は小さいもから先に実行される。

add_actionとか、add_filterとか以下に分かり易く説明されてます。
http://affinote.net/wordpress/290/

適していると思われる処理内容

after_setup_theme
言語情報の読み込み(load_theme_textdomain)
管理バーの表示指定(show_admin_bar)
テーマの基本設定(add_theme_support)
メニューの登録(register_nav_menu)
画像サイズの登録(set_post_thumbnail_sizeなど)
init
ログイン中のユーザ情報を参照する処理
カスタムタクソノミー、カスタム投稿タイプの登録(register_post_typeなど)
リライトルールの追加・変更(add_permastructなど)
参照:http://elearn.jp/wpman/column/c20120807_01.html

index.phpなど、任意の場所に記述

以下は出力テスト。設定されているかどうか調べるために書いてみた。
まあ別にいらないっす。あくまでも出力されているか確認用っす。

<?php
echo "ヘッダーパス";header_image();
echo "<br />";
echo "[テキストカラー]#";header_textcolor();
echo "<br />";
echo "横";echo HEADER_IMAGE_WIDTH;
echo "<br />";
echo "縦";echo HEADER_IMAGE_HEIGHT;
?>

index.phpなど、任意の場所に記述

<?php if ( display_header_text() ) : ?>テキスト表示が選択されている場合は出力する<?php endif; ?>

のような感じ。ああ面倒。