【保存版】WordPressのfunctions.phpに書くべき関数一覧

5 min
WordPress

皆さん、こんにちは!

WordPressテーマに必須のファイル「functions.php」ですが、自作するとなると「何を書いたらいいか分からない」や「何を書くべきなのか分からない」という声が多いような気がします。

なので今回はコピペでとりあえず書いておけば安心というfunctions.phpの関数を紹介します。

そもそもfunctions.phpとは

WordPressテーマには必ずあるfunctions.phpですがどういった役割を担っているかご存知でしょうか。

functions.phpは有効化しているテーマで動作し、管理画面・サイトどちらにも反映されます。

ですので、プラグインように機能の追加や制御をしたりすることができます。
詳しくは公式サイトを参照ください。

コピペしておきたいfunctions.phpの関数

用途別にまとめて紹介していきますので、目的の関数がありましたら、上部の目次から飛んでください。

必ず設定しておきべき基本の関数

functions.php
<?php

// 1. アイキャッチのサポート
add_theme_support('post-thumbnails');

// 2. HTML5のサポート
add_theme_support('html5', ['comment-list', 'comment-form', 'search-form', 'gallery', 'caption']);

// 3. RSS用リンク出力
add_theme_support('automatic-feed-links');

// 4. タイトルタグ出力
add_theme_support('title-tag');
  1. アイキャッチを登録できるようにする関数。これがないと記事などにアイキャッチが設定できません。
  2. HTML5を使用できるように設定する関数。今の時代HTML5で以外で記述することはないので必須。
  3. RSSリンクをheadタグ内に出力する関数。必須というわけではないが、出力しない事自体にデメリットがないので追加しておいたほうがベター。
  4. head内に自動でタイトルタグを出力する関数。SEOプラグインを使っている方は不要かもですが、プラグインが上書きしてくれるのでとりあえず書いておいたほうがベター。

ビジュアル的な部分を制御する関数

functions.php
<?php

// 1. メニュー登録
function register_my_menu()
{
    register_nav_menu('menu', __('メニュー'));
}
add_action('init', 'register_my_menu');

// 2. サイドウィジェット登録
function register_mywidgets_init()
{
    register_sidebar([
        'name' => 'ウィジェット',
        'id' => 'sidebar',
        'before_widget' => '<div class="sidebar">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="sidebar-ttl">',
        'after_title' => '</h3>',
    ]);
}
add_action('widgets_init', 'register_mywidgets_init');

// 3. エディタースタイル登録
function gutenberg_support_setup()
{
    add_theme_support('editor-styles'); // 旧エディタ用
    add_editor_style('editor-style.css'); // 新ブロックエディタ用
}
add_action('after_setup_theme', 'gutenberg_support_setup');
  1. 外観設定の「メニュー」を登録できるようにする関数。
  2. 外観設定の「ウィジェット」を登録できるようにする関数。
  3. ビジュアルエディタの見た目を制御するCSSの反映。

不要なものを取り除く関数

functions.php
<?php

// 1. WP REST APIのエンドポイント削除
remove_action('template_redirect', 'rest_output_link_header', 11);

// 2. 絵文字用スタイルの削除
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

// 3. oembed機能の削除
remove_action('wp_head', 'rest_output_link_wp_head');
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');

// 4. 外部投稿ツール用リンクの削除
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');

// 5. WordPress情報の削除
remove_action('wp_head', 'wp_generator');

// 6. Adminbarのメニュー削除
function remove_adminbar_item($wp_admin_bar)
{
    if (!is_admin()) {
        $wp_admin_bar->remove_node('wp-logo'); // WPロゴ
    }
}
add_action('admin_bar_menu', 'remove_adminbar_item', 999);
  1. WP REST API用のjsonリンクの削除。WP REST APIを使っていないのであれば書くべき。
  2. 絵文字を使えるようにするファイルの読み込みキャンセル。絵文字を使わないのであれば書くべき。
  3. oEmbed機能の停止関数。特に今まで使ったことが無いのでとりあえず削除。
  4. 外部ツールを使って自動投稿ができるようにする機能の削除。
  5. これが一番いらない機能だと思うのですが、head内に「WordPressで作成しました!」的なコードがあるので、それの削除
  6. 管理画面ログイン時に表示されるアドミンバーの不要メニューの削除。下記の記事が詳しく紹介していました。

全てをまとめたコピペ用のコード

functions.php
<?php

/* 必ず設定しておきべき基本の関数 */
// 1. アイキャッチのサポート
add_theme_support('post-thumbnails');

// 2. HTML5のサポート
add_theme_support('html5', ['comment-list', 'comment-form', 'search-form', 'gallery', 'caption']);

// 3. RSS用リンク出力
add_theme_support('automatic-feed-links');

// 4. タイトルタグ出力
add_theme_support('title-tag');

/* ビジュアル的な部分を制御する関数 */
// 1. メニュー登録
function register_my_menu()
{
    register_nav_menu('menu', __('メニュー'));
}
add_action('init', 'register_my_menu');

// 2. サイドウィジェット登録
function register_mywidgets_init()
{
    register_sidebar([
        'name' => 'ウィジェット',
        'id' => 'sidebar',
        'before_widget' => '<div class="sidebar">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="sidebar-ttl">',
        'after_title' => '</h3>',
    ]);
}
add_action('widgets_init', 'register_mywidgets_init');

// 3. エディタースタイル登録
function gutenberg_support_setup()
{
    add_theme_support('editor-styles'); // 旧エディタ用
    add_editor_style('editor-style.css'); // 新ブロックエディタ用
}
add_action('after_setup_theme', 'gutenberg_support_setup');

/* 不要なものを取り除く関数 */
// 1. WP REST APIのエンドポイント削除
remove_action('template_redirect', 'rest_output_link_header', 11);

// 2. 絵文字用スタイルの削除
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

// 3. oembed機能の削除
remove_action('wp_head', 'rest_output_link_wp_head');
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');

// 4. 外部投稿ツール用リンクの削除
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');

// 5. WordPress情報の削除
remove_action('wp_head', 'wp_generator');

// 6. Adminbarのメニュー削除
function remove_adminbar_item($wp_admin_bar)
{
    if (!is_admin()) {
        $wp_admin_bar->remove_node('wp-logo'); // WPロゴ
    }
}
add_action('admin_bar_menu', 'remove_adminbar_item', 999);

WordPressでよく使われる条件分岐のコードもまとめましたので参考にどうぞ!

Anyushu

Anyushu

1993年生まれのWEBエンジニア。京都のITベンチャー企業で頑張ってます。趣味はサッカー観戦(ドルトムントファン)・映画鑑賞(年間200本観てます!)・メディアサイト巡回を日々しています。

FOLLOW

カテゴリー:
関連記事