「WordPress:Genesis Framework を使ったテーマ制作」の2回目です。
01functions.php
functions.php は、デフォルトの WordPress に独自の機能を追加したり、デフォルトの機能を変更したりするための PHP ファイルです。子テーマの場合は、同じく親テーマの機能に追加変更をすることができます。
たとえば、genesis Sample Theme は次のように始まっています。
<?php /** * Genesis Sample. * * This file adds functions to the Genesis Sample Theme. * * @package Genesis Sample * @author StudioPress * @license GPL-2.0-or-later * @link https://www.studiopress.com/ */ // Starts the engine. require_once get_template_directory() . '/lib/init.php';
コメント行にファイル情報があり、続いて親テーマ Genesis の /lib/init.php
が読み込まれています。ファイル情報はなくても機能しますが、後々のためには書いておいたほうがいいでしょう。
たとえば、
<?php /** * Genesis Child Theme. * * @package Genesis Child * @author IMUZA.com * @license GPL-2.0-or-later * @link https://imuza.com/ */
こんな感じです。
02init.php の読み込みは必要か?
この require_once get_template_directory() . '/lib/init.php';
の一行は、多くの Genesis の子テーマに入っていますが必須のものではないようです。
Gary Jones さんが書いています。
この一行は Genesis のすべての関数を呼び出しており、以後それらが定義されているかどうかを心配することがないという点ではメリットがあるが、果たしてそれは必要かと疑問を呈し、代替案を提示しています。
<?php add_action( 'genesis_setup', 'utility_pro_setup', 15 ); /** * Theme setup. * * Attach all of the site-wide functions to the correct hooks and filters. All * the functions themselves are defined below this setup function. * * @since 1.0.0 */ function utility_pro_setup() { }
代替案は、init.php の最後の行にある Setup Function を直接呼び出すということで、具体的なサンプルコード(CarrieDilsによるUtilityPro )が掲載されています。
その解説がその後に続くのですが、これが非常に難しいです。漠然とですが理解できる範囲ではこの代替案で問題はなく、また、この記事は WordPress の開発者のひとりであり、Genesis の開発者でもある Bill Erickson さんのサイトにも引用されていますので、これでいいのではないかと思います。
03Setup Function に何を入れるか?
この Setup Function に何を入れるかですが、add_action() や add_filter() はこの関数の外に書くべきであり、次のものはこの関数内に書いていいようです。
- remove_action() や remove_filter()
- add_image_size() や add_theme_support()
ということで上記リンク先にあるサンプルコード(CarrieDilsによるUtilityPro )から必要なものをピックアップすればいいと思います。
04Setup Function の書き方
Theme Support になにが指定できるかは次のドキュメントにあります。
WordPress 標準の Theme Support
Genesis で追加される Theme Support
ということで、この Setup Function でスタートしてみましょう。
<?php /** * Genesis Child Theme. * * @package Genesis Child * @author IMUZA.com * @license GPL-2.0-or-later * @link https://imuza.com/ */ add_action( 'genesis_setup', 'custom_setup', 15 ); /** * Theme setup. */ function custom_setup() { // Define theme constants. define( 'CHILD_THEME_NAME', 'genesis-child' ); define( 'CHILD_THEME_URL', '' ); define( 'CHILD_THEME_VERSION', '1.0.0' ); // Add HTML5 markup structure. add_theme_support( 'html5', array( 'caption', 'comment-form', 'comment-list', 'gallery', 'search-form' ) ); // Add viewport meta tag for mobile browsers. add_theme_support( 'genesis-responsive-viewport' ); // Add theme support for accessibility. add_theme_support( 'genesis-accessibility', array( '404-page', 'drop-down-menu', 'headings', 'rems', 'search-form', 'skip-links', ) ); // Add support for three footer widget areas. add_theme_support( 'genesis-footer-widgets', 3 ); // Unregister layouts that use secondary sidebar. genesis_unregister_layout( 'content-sidebar-sidebar' ); genesis_unregister_layout( 'sidebar-content-sidebar' ); genesis_unregister_layout( 'sidebar-sidebar-content' ); // Removes header right widget area. unregister_sidebar( 'header-right' ); // Unregister secondary sidebar. unregister_sidebar( 'sidebar-alt' ); }
次はサンプルデータを入れて実際にサイトを構築していこうと思います。