functions.phpとは何ですか?
同じ結果は、プラグインまたは`````functions.php`````を使用して生成できます。ウェブサイトの見た目に関係なく利用可能な新しい機能を作成する場合、**プラグインにそれらを置くのが最良の方法です**。
WordPressプラグインを使用することと`````functions.php`````を使用することには、それぞれ利点とトレードオフがあります。
WordPressプラグイン:
- 特定のユニークなヘッダーテキストが必要です;
- wp-content/pluginsに保存され、通常はサブディレクトリにあります;
- 有効化されたときにページロード時にのみ実行されます;
- すべてのテーマに適用されます;
- 単一の目的を持つべきです – 例えば、検索エンジン最適化機能を提供するか、バックアップを支援します。
一方、`````functions.php`````ファイル:
- ユニークなヘッダーテキストは必要ありません;
- wp-content/themesのテーマのサブディレクトリに保存されます;
- アクティブテーマのディレクトリにいるときにのみ実行されます;
- そのテーマのみに適用されます(テーマが変更されると、機能はもはや使用できません);
- 多くの異なる目的のために使用される多数のコードブロックを持つことができます。
各テーマには独自の関数ファイルがありますが、実際に実行されるのはアクティブテーマの`````functions.php`````内のコードのみです。テーマにすでに関数ファイルがある場合は、それにコードを追加できます。ない場合は、`````functions.php`````という名前のプレーンテキストファイルを作成してテーマのディレクトリに追加できます。
[子テーマ](/read/wordpress/fdaa9ef52844b9ea.md)は独自の`````functions.php`````ファイルを持つことができます。子関数ファイルに関数を追加することは、親テーマを変更するリスクのない方法です。これにより、親テーマが更新されても、新しく追加した関数が消える心配はありません。
子テーマの`````functions.php`````は、親テーマの`````functions.php`````の直前にWordPressによって読み込まれますが、それを*オーバーライド*することはありません。子テーマの`````functions.php`````は、親テーマの関数を拡張または置き換えるために使用できます。同様に、`````functions.php`````は*すべてのプラグインファイルが読み込まれた後*に読み込まれます。
`````functions.php`````を使用すると:
- WordPressフックを使用できます。たとえば、[`````excerpt_length`````](https://developer.wordpress.org/reference/hooks/excerpt_length/)フィルターを使用して、投稿の抜粋の長さを変更できます(デフォルトは55語)。
- `````add_theme_support()`````を使用してWordPress機能を有効にします。たとえば、投稿のサムネイル、投稿形式、ナビゲーションメニューをオンにします。
- 複数のテーマテンプレートファイルで再利用したい関数を定義します。
WordPressでは、2つ以上の関数、クラス、または変数が同じ名前を持つと、名前の衝突が発生する可能性があります。これにより、WordPressサイトでエラーや予期しない動作が発生する可能性があります。テーマ開発者とプラグイン開発者の両方が、それぞれのコードで名前の衝突を避ける責任があります。
テーマ開発者は、自分の関数、クラス、および変数がWordPressコアや他のプラグインで使用されているものと衝突しないユニークな名前を持つことを確認する必要があります。また、名前の衝突の可能性を最小限に抑えるために、関数名やクラス名にテーマ名や略称などのユニークな識別子をプレフィックスとして付けるべきです。
<a name="examples"></a>
## 例
以下は、さまざまな機能をサポートするためにfunctions.phpファイルで使用できるいくつかの例です。これらの例は、WordPress.orgテーマディレクトリに提出することを選択した場合、テーマ内で許可されています。
<a name="theme-setup"></a>
### テーマのセットアップ
いくつかのテーマ機能は、テーマが有効化されたときに最初に実行される「セットアップ」関数に含める必要があります。以下に示すように、これらの機能はすべて`````functions.php`````ファイルに追加して推奨されるWordPress機能を有効化できます。
関数にテーマ名の名前空間を付けることが重要です。以下のすべての例は`````myfirsttheme_`````を名前空間として使用しており、これはテーマ名に基づいてカスタマイズする必要があります。
この初期関数を作成するには、`````myfirsttheme_setup()`````というタイトルの新しい関数を開始します。次のように:
``````bash
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' );
ナビゲーションメニュー
クラシックテーマでは、カスタムナビゲーションメニューにより、ユーザーはメニュー管理パネルでメニューを編集およびカスタマイズでき、テーマ内のさまざまなメニューを編集するためのドラッグアンドドロップインターフェースを提供します。
``````bash
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __( 'Secondary Menu', 'myfirsttheme' )
) );
`
定義した各メニューは、wp_nav_menu()
を使用して後で呼び出すことができ、割り当てられた名前(例:primary)をtheme_location
パラメータとして使用します。
ブロックテーマでは、代わりにnavigation blockを使用します。
テキストドメインの読み込み
テーマは、テーマ内の文字列を翻訳可能にすることで、複数の言語に翻訳できます。そのためには、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' ) );
ブロックテーマにおけるテーマサポート
ブロックテーマでは、以下のテーマサポートが自動的に有効になります:
add_theme_support( 'post-thumbnails' );
add_theme_support( 'responsive-embeds' );
add_theme_support( 'editor-styles' );
add_theme_support( 'html5', array( 'style','script' ) );
add_theme_support( 'automatic-feed-links' );
初期セットアップの例
上記のすべての機能を含めると、以下のようなfunctions.php
ファイルが得られます。将来の明確さのためにコードコメントが追加されています。
この例の下部に示すように、add_action()
ステートメントを追加してmyfirsttheme_setup
関数が読み込まれることを確認する必要があります。
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;
}
テーマにtheme.json構成ファイルが含まれている場合、functions.phpに変数を含める必要はありません。代わりに、コンテンツ幅はtheme.jsonのレイアウト設定に追加されます。詳細については、advanced sectionでtheme.jsonの使用について学ぶ。
その他の機能
- [カスタムヘッダー](/read/wordpress/d700916739fd3a5e.md) **-クラシックテーマ**
- [サイドバー](/read/wordpress/fc464b1c9c7a76ef.md)(ウィジェットエリア) **-クラシックテーマ**
- カスタム背景 **-クラシックテーマ**
- タイトルタグ **-クラシックテーマ**
- エディタースタイルを追加
- HTML5 **-クラシックテーマ**
<a name="your-functions-php-file"></a>
## あなたのfunctions.phpファイル
上記のすべての関数を含めることを選択した場合、これはあなたの*functions.php*の見た目になります。上記の参照にコメントが追加されています。
``````bash
/**
* 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' );
`