はじめに
- サイトアイコンというのは、ファビコンのことです。
- カスタマイズ > サイト基本情報 > サイトアイコン、でファビコンを設定できますけれども、これが設定されていなければテーマデフォルトのサイトアイコンを表示する。
コード
サイトアイコン用の画像を次のように用意しました。
images/cropped-site_icon-150x150.jpg
images/cropped-site_icon-180x180.jpg
images/cropped-site_icon-192x192.jpg
images/cropped-site_icon-270x270.jpg
images/cropped-site_icon-300x300.jpg
images/cropped-site_icon-32x32.jpg
images/cropped-site_icon.jpg
子テーマの functions.php に次のように記述して、実現できました。
/**
* デフォルトのサイトアイコンを設定します。
* カスタマイザーで設定された場合はそちらを使用します。
*/
function filter_site_icon_meta_tags() {
if (has_site_icon()) {
return;
}
$url = get_stylesheet_directory_uri();
// 出力される HTML ソースコードを見やすくするめに、最後に空白行を設置
echo <<<EOT
<link rel="icon" href="{$url}/images/cropped-site_icon-32x32.jpg" sizes="32x32" />
<link rel="icon" href="{$url}/images/cropped-site_icon-192x192.jpg" sizes="192x192" />
<link rel="apple-touch-icon-precomposed" href="{$url}/images/cropped-site_icon-180x180.jpg" />
<meta name="msapplication-TileImage" content="{$url}/images/cropped-site_icon-270x270.jpg" />
EOT;
}
add_filter('wp_head', 'filter_site_icon_meta_tags');
補足。どうやってサイトアイコンの HTML レンダリングに介入すればよいか
ネットで調べても全然判りませんでしたけれども、親テーマである Twenty Nineteen を見ますとあっさり判りました。
twentynineteen/functions.php
/**
* Display custom color CSS in customizer and on frontend.
*/
function twentynineteen_colors_css_wrap() {
// Only bother if we haven't customized the color.
if ( 'default' === get_theme_mod( 'primary_color', 'default' ) && ! twentynineteen_has_custom_default_hue() ) {
return;
}
require_once get_parent_theme_file_path( '/inc/color-patterns.php' );
$primary_color = twentynineteen_get_default_hue();
if ( 'default' !== get_theme_mod( 'primary_color', 'default' ) ) {
$primary_color = get_theme_mod( 'primary_color_hue', $primary_color );
}
?>
<style type="text/css" id="custom-theme-colors" <?php echo is_customize_preview() ? 'data-hue="' . absint( $primary_color ) . '"' : ''; ?>>
<?php echo twentynineteen_custom_colors_css(); ?>
</style>
<?php
}
add_action( 'wp_head', 'twentynineteen_colors_css_wrap' );
なるほど。
- wp_head に add_action フックすればよい。
- echo などで出力すれば、
<head>
に出力される。
補足。サイトアイコンが設定されているかどうかの判断
これも検索に結構時間がかかりました><。たどり着いた個人サイトと、公式ページも載せておきます。
出力するサイトアイコン HTML を調べる
サイトアイコンがカスタマイザーで設定されていなければ、サイトアイコンの HTML を出力するわけですが、できるだけ元々の出力に合わせようと思い、調べました。
確認してみますと、ただ単に最後に改行コードを加えてから echo しているだけです。
よって、私もただ単に echo するようにしました。ただ、 4 行分ありますので、それを毎回改行コードをつけて echo するのは面倒でした。
そこで、ヒアドキュメント構文を使って出力するようにしました。
補足。 URL の取得
子テーマの URL が欲しいので、 get_stylesheet_directory_uri()
を使います。 WordPress はいくつか URL の取得方法があり、落ち着いて整理しないと欲しいものが取れません。
- 関数リファレンス/get stylesheet directory uri – WordPress Codex 日本語版
- WordPress site_url()とhome_url()の違いと使い分け | e-JOINT.jp
補足。サイトアイコンの作成方法
デフォルトのサイトアイコンを用意しなければなりません。画像は用意しました。
これを元に、様々なサイズのアイコン画像を用意するのでしょうか?。。。面倒ですね><。嫌ですね><。
を見ると、次のようにあります。
WordPress Version 4.3 では Web サイトでの favicon の使用をサポートするサイトアイコン機能が実装されました。favicon を使用する場合は以下のセクションでの説明ではなく、サイトアイコン機能を使用してください。favicon.ico ファイルを自分で作成したり、テンプレートを変更する必要はなく、カスタマイザー画面から縦横512ピクセル以上の正方形の画像を指定すれば済みます。
これを利用しました♪
- カスタマイズ > サイト基本情報 > サイトアイコン、から 512 px x 512 px の画像をアップロード
- アップロードされ、加工されたサイトアイコン画像をコピーして取得
できあがったサイトアイコンは複数あります。子テーマのディレクトリにそのまま置きたくありません。どのようなディレクトリを作り、置くのがふさわしいでしょうか?
Twenty Nineteen テーマ、そして過去の Twenty Seventeen 、 Twenty Sixteen 、 を見てみました。
- Twenty Nineteen: ルートディレクトリに、
js/
、sass/
ディレクトリ - Twenty Seventeen:
assets/
dhirekutorini、css/
、images/
、js/
- Twenty Sixteen: ルートディレクトリに、
css/
、js/
ディレクトリ
これを見て、ルートディレクトリに images/
ディレクトリを用意し、ここに入れることにしました。
おわりに
デフォルトのサイトアイコンがなければ子テーマで用意したデフォルトのサイトアイコンを設定する、というあまり難しくなさそうな話なのですが、苦労しました><。
わかってしまえば、短く、他とは分離した形で書けましたので、やっぱり WordPress 忘れているな、、、という印象です。
年に 1 回、子テーマづくりでいじる程度だと、やっぱり勘所は忘れ去られ、思い出すまでに時間が掛かってきますね。いじるペースをあげていこうとも思いませんので、仕方ないと割り切っています。
以上です。
「WordPress Twenty Nineteen 子テーマ作成。カスタマイザーで設定されていなければテーマデフォルトのサイトアイコンを表示する」への1件の返信
[…] デフォルトロゴの準備は、 WordPress Twenty Nineteen 子テーマ作成。カスタマイザーで設定されていなければテーマデフォルトのサイトアイコンを表示する – oki2a24 でも行った方法を採りまし […]