テーマで使用する関数
TOPICS
翻訳元記事はこちらです。
functions.php
ファイルは、あなたのWordPressテーマに独自の機能を追加する場所です。このファイルは、WordPress のコア機能にフックして、テーマのモジュール化、拡張性、機能性を高めるために使用することができます。
functions.php
とは?
functions.php
ファイルは、WordPressのプラグインのように振る舞い、WordPressサイトに機能を追加します。これを使って、WordPress の関数を呼び出したり、独自の関数を定義したりすることができます。
プラグインを使ってもfunctions.php
を使っても同じ結果が得られます。ウェブサイトの見た目に関係なく利用できる新機能を作成する場合は、プラグインに入れるのがベストです。
WordPressのプラグインを使うか、functions.php
を使うかにはメリットとデメリットがあります。
WordPressのプラグインを使う場合
- 独自の特定のヘッダーテキストが必要
wp-content/plugins
のサブディレクトリに配置する- ページが読み込まれたときに実行される
- すべてのテーマで適用される
- 例えば、検索エンジンの最適化機能を提供したり、バックアップをサポートするなど、単一の目的を持っている必要があります。
functions.php
ファイルを使う場合
- 独自の特定のヘッダーテキストは必要ありません
wp-content/themes
に配置されています- テーマが有効になったときにのみ実行されます
- そのテーマにのみ適用されます (テーマが変更された場合、その機能は使用できなくなります)
functions.php
は、さまざまな目的で使用されるコードの多数のブロックを持つことができます
各テーマにはそれぞれ独自の関数ファイルがありますが、実際に実行されるのはアクティブなテーマのfunctions.php
内のコードのみです。テーマにすでに関数ファイルがある場合は、そこにコードを追加することができます。
そうでない場合は、以下に説明するように、functions.php
という名前のプレーンテキストファイルを作成してテーマのディレクトリに追加することができます。
子テーマは独自の functions.php
ファイルを持つことができます。子テーマのfunctions.php
ファイルに関数を追加することは、親テーマを変更するリスクのない方法です。親テーマが更新されたときに、新しく追加した関数が消えてしまうことを心配する必要はありません。
子テーマの functions.php
は WordPress によって親テーマの functions.php
の直前に読み込まれますが、それを上書きするものではありません。子テーマの functions.php
は、親テーマの機能を拡張したり置き換えたりするために使用することができます。同様に、functions.php
はプラグインファイルが読み込まれた後に読み込まれます。
functions.php
を使って以下のことができます。
- WordPressのフックを使用します。例えば、
excelerpt_length
フィルターを使うと、記事の抜粋長を変更することができます。(デフォルトの55単語から) add_theme_support()
でWordPressの機能を有効にします。例えば、投稿のサムネイル、投稿フォーマット、ナビゲーションメニューを有効にします。- 複数のテーマテンプレートファイルで再利用したい機能を定義します。
WordPressのプラグインがfunctions.php
と同じ関数やフィルタを呼び出すと、予期せぬ結果が出て、サイトが無効になることさえあります。
例
テーマのセットアップ
テーマが有効化されたときに最初に実行される「設定」関数の中には、いくつかのテーマの機能が含まれているはずです。以下に示すように、それぞれの機能を functions.php
ファイルに追加することで、WordPress の推奨機能を有効化することができます。
関数の名前空間をテーマ名と一緒にすることが重要です。以下の例はすべて myfirsttheme_
を名前空間として使用していますが、これはテーマ名に基づいてカスタマイズする必要があります。
この初期関数を作成するには、myfirsttheme_setup()という名前の新しい関数を以下のように起動します。
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* Sets up theme defaults and registers support for various WordPress features
*
* It is important to set up these functions before the init hook so that none of these
* features are lost.
*
* @since MyFirstTheme 1.0
*/
function myfirsttheme_setup() {
注意: 上記の例では、関数 myfirsttheme_setup
は宣言されていますが、呼び出しされていません。必ず関数を呼び出ししてください。
自動フィードリンク
自動フィードリンクは、投稿やコメントのRSSフィードをデフォルトで有効にします。これらのフィードは自動的に<head>
に表示されます。これらは add_theme_support()
を使って呼び出すことができます。
add_theme_support( 'automatic-feed-links' );
ナビゲーションメニュー
カスタムナビゲーションメニューでは、ユーザーがメニュー管理パネルでメニューを編集したりカスタマイズしたりすることができ、ドラッグ&ドロップでテーマ内の様々なメニューを編集できるインターフェイスを提供します。
functions.php
で複数のメニューを設定することができます。これらのメニューは register_nav_menus()
を使って追加したり、 wp_nav_menu()
を使ってテーマに挿入することができます。
テーマで複数のメニューを使用できる場合は、配列を使用しなければなりません。テーマによってはカスタムナビゲーションメニューを持たないものもありますが、簡単にカスタマイズできるようにするためにも、この機能を許可することをお勧めします。
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __( 'Secondary Menu', 'myfirsttheme' )
) );
定義したそれぞれのメニューは、後から wp_nav_menu()
を使用して呼び出すことができ、 theme_location
パラメータで指定した名前 (つまり primary
) を使用します。
テキストドメインの読み込み(翻訳)
テーマの文字列を翻訳できるようにすることで、テーマを複数の言語に翻訳することができます。そのためには load_theme_textdomain()
を使用する必要があります。テーマを翻訳可能にする方法の詳細については、国際化のセクションを参照してください。
load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
投稿のアイキャッチ画像
投稿のサムネイルとアイキャッチ画像は、ユーザーが自分の投稿を表現するための画像を選択できるようにします。テーマのデザインに応じて、それらをどのように表示するかを決めることができます。
例えば、アーカイブビューで各投稿のサムネイルを表示することができます。または、ホームページに大きなアイキャッチ画像を使用することもできます。
すべてのテーマがアイキャッチ画像を必要とするわけではありませんが、記事のサムネイルとアイキャッチ画像をサポートすることをお勧めします。
add_theme_support( 'post-thumbnails' );
投稿フォーマット
投稿フォーマットを使うと、ユーザーは自分の投稿をさまざまな方法でフォーマットすることができます。ブロガーが投稿内容に応じて異なるフォーマットやテンプレートを選択できるようにするのに便利です。 add_theme_support()
は投稿フォーマットでも使用できます。
add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
初期設定のサンプル
上記の機能をすべて含めると、以下のような functions.php
ファイルが完成します。将来的にわかりやすくするために、コードコメントを追加しました。
この例の一番下に示されているように、myfirsttheme_setup
関数が確実に読み込まれるように、必要なadd_action()
を追加する必要があります。
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* Sets up theme defaults and registers support for various WordPress features.
*
* Note that this function is hooked into the after_setup_theme hook, which runs
* before the init hook. The init hook is too late for some features, such as indicating
* support post thumbnails.
*/
function myfirsttheme_setup() {
/**
* Make theme available for translation.
* Translations can be placed in the /languages/ directory.
*/
load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
/**
* Add default posts and comments RSS feed links to <head>.
*/
add_theme_support( 'automatic-feed-links' );
/**
* Enable support for post thumbnails and featured images.
*/
add_theme_support( 'post-thumbnails' );
/**
* Add support for two custom navigation menus.
*/
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __('Secondary Menu', 'myfirsttheme' )
) );
/**
* Enable support for the following post formats:
* aside, gallery, quote, image, and video
*/
add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
}
endif; // myfirsttheme_setup
add_action( 'after_setup_theme', 'myfirsttheme_setup' );
内容の幅
コンテンツの幅は、コンテンツやアセットがサイトのコンテナを壊さないように functions.php
ファイルに追加されます。コンテンツの幅は、アップロードされた画像を含むサイトに追加されたコンテンツの最大許容幅を設定します。下の例では、コンテンツエリアの最大幅は800ピクセルです。それ以上のコンテンツはありません。
if ( ! isset ( $content_width) )
$content_width = 800;
最終的なfunctions.phpの例
上記のすべての関数を含めた場合、functions.php
は次のようになります。
/**
* MyFirstTheme's functions and definitions
*
* @package MyFirstTheme
* @since MyFirstTheme 1.0
*/
/**
* First, let's set the maximum content width based on the theme's design and stylesheet.
* This will limit the width of all uploaded images and embeds.
*/
if ( ! isset( $content_width ) )
$content_width = 800; /* pixels */
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* Sets up theme defaults and registers support for various WordPress features.
*
* Note that this function is hooked into the after_setup_theme hook, which runs
* before the init hook. The init hook is too late for some features, such as indicating
* support post thumbnails.
*/
function myfirsttheme_setup() {
/**
* Make theme available for translation.
* Translations can be placed in the /languages/ directory.
*/
load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
/**
* Add default posts and comments RSS feed links to <head>.
*/
add_theme_support( 'automatic-feed-links' );
/**
* Enable support for post thumbnails and featured images.
*/
add_theme_support( 'post-thumbnails' );
/**
* Add support for two custom navigation menus.
*/
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __('Secondary Menu', 'myfirsttheme' )
) );
/**
* Enable support for the following post formats:
* aside, gallery, quote, image, and video
*/
add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
}
endif; // myfirsttheme_setup
add_action( 'after_setup_theme', 'myfirsttheme_setup' );