「functions.phpってどこにあるの?」
「呼び出したい関数が動かなくて何が原因かわからない……」
「テンプレートタグとショートコードの違いがイマイチつかめない!」
「安全にスクリプトやスタイルを読み込むベストプラクティスを知りたい」
こんな悩みを抱えていませんか?
WordPressは数百に及ぶ関数が用意されている反面、
- どの関数を、どのタイミングで呼ぶべきか
- テーマ開発/カスタマイズ時の“正しい書き方”
- セキュリティや依存関係への配慮
など、初心者にはハードルが高い部分も多いものです。
そこで本記事では、基礎から応用までを一気にカバー!
- 関数の仕組みと使いどころ
- 実際のテーマ編集手順
- よく使うテンプレートタグ&ショートコード
- セキュリティ対策や非推奨回避
と段階的に解説していきます。
この記事を読めば、WordPress関数の全体像がつかめて、自信を持ってテーマやプラグイン開発に取り組めるようになります🚀
WordPress関数の基礎知識
概要解説
WordPress関数とは何か?
WordPress関数は、テーマやプラグイン内で特定の処理を簡単に呼び出せる小さなプログラムの部品です。💡
- 例えば、投稿タイトルを表示したいときに
the_title()と書くだけで適切なHTMLが出力されます。 - 自前でHTMLやデータベースを操作するよりも、安全性と可読性が高くなるのが大きなメリットです。
関数を実装する意義と仕組み
- 再利用性の向上
- 同じ処理を何度も書く必要がなく、一度定義すればどこからでも呼び出せます。
- 拡張性の確保
- コードの修正は関数内部だけで済み、サイト全体への影響範囲を最小化。
- フックとの連携
add_action()やadd_filter()と組み合わせることで、WordPressの動作を自在にカスタマイズできます。✨
環境と前提
WordPressはPHPで動いている
- サーバーサイド言語PHPがベース
- リクエストを受けてからPHPが動作し、最終的にHTMLが生成されます。
- その中で関数は「部品」として呼ばれ、ページの各箇所に組み込まれます。
PHPの基本ポイント
以下の表で、初心者が押さえておくべきPHPの特徴をまとめました。
| 項目 | 説明 |
|---|---|
| 変数宣言 | $variable = '値'; のように $ から始める |
| 関数の定義 | function 関数名(引数) { 処理 } |
| 配列 | array() または [] で複数の値を格納できる |
| オブジェクト指向 | クラスとメソッドで構造化できる |
| エラーハンドリング | try { … } catch (Exception $e) { … } の形式 |
⚙️ ポイント:WordPress関数も内部ではPHPの関数として定義されており、これらの基本ルールに則って動作しています。
関数を使うための準備
functions.phpの役割
functions.phpは、テーマの機能拡張やカスタマイズを一元管理するファイルです。
- テーマ固有の処理をまとめる場所
- プラグインを使わずに独自の関数やフックを追加できる
- WordPress起動時に自動で読み込まれるため、追加した関数が即有効化される
配置場所の例
| テーマ種別 | 配置パス |
|---|---|
| 親テーマ | wp-content/themes/親テーマ/functions.php |
| 子テーマ | wp-content/themes/子テーマ/functions.php |
🚀 Point: 子テーマにfunctions.phpを置くと、親テーマの更新でカスタマイズが上書きされる心配が減ります!
編集前のチェックポイント
ファイルのバックアップ方法
- ファイルを直接編集する前に、ローカルにコピーを保存
- サーバー側ではFTPや管理画面の「ファイルマネージャー」でダウンロード
- Gitなどバージョン管理ツールでコミットしておくと安心
プロスペース・改行ミスを避ける注意点
- 行末に余計なスペースを残さない
- PHPタグの前後に空行を挿入しない(ヘッダー送信エラー防止)
- エディタの自動整形機能を活用してインデントを統一
// NG例:余計な空行があると「ヘッダー情報送信済み」エラーに…
<?php
function my_custom_function() {
// 処理内容
}
?>
変更後の動作確認手順
- テーマを再読み込み:管理画面から外観>テーマで有効化し直す
- 画面表示チェック:フロント/管理画面の主要ページを一通り確認
- エラーログの確認:
wp-config.phpでWP_DEBUGをtrueにしてエラー出力をチェック - ブラウザのキャッシュクリア:編集結果が反映されない場合はキャッシュ削除を実施
🔍 Tip: 変更直後は、シークレットモードや別デバイスで表示を確認すると確実です。
代表的なテンプレートタグと出力系関数
ページ構造要素の取得
- ヘッダー読み込み:
get_header()
テーマのheader.phpを呼び出し、共通のヘッダー部分を表示します。
<?php get_header(); ?>
これ一行でサイトのナビゲーションやロゴを統一できます✨
- フッター読み込み:
get_footer()
同様にfooter.phpを挿入し、共通のフッターデザインを反映。
<?php get_footer(); ?>
余計なコードを書く必要がなく、保守性がアップします🔧
- bodyクラス出力:
body_class()<body>タグにページごとのクラスを自動追加。
<body <?php body_class(); ?>>
🖌️ メリット:CSSで「トップページだけ」「投稿ページだけ」と簡単にセレクト可能!
コンテンツ表示
| 用途 | 関数名 | 説明 |
|---|---|---|
| 投稿タイトル | the_title() | 投稿タイトルをHTMLタグ付きで出力 |
| 本文出力 | the_content() | 投稿の本文を自動で整形して表示 |
| 抜粋表示 | the_excerpt() | 抜粋(概要)を取得し、文字数制限もカスタム可 |
| パーマリンク取得 | the_permalink() | 投稿のURLを取得し、リンクタグ生成も簡単 |
- ポイント
the_content()は「続きを読む」タグ以降の表示制御も自動で行います😊the_excerpt()は文字列フィルターを追加して独自の切り出しルールを作成できます✂️
メディア・リソース読み込み
- アイキャッチ:
the_post_thumbnail()
投稿に設定したサムネイル画像を表示。サイズやCSSクラスも指定可能。
<?php the_post_thumbnail('medium', ['class' => 'post-thumb']); ?>
🖼️ Tip:テーマカスタマイザーで推奨サイズを確認して最適化しましょう!
- CSS/スクリプト追加:
wp_enqueue_style(),wp_enqueue_script()
テーマやプラグインで外部ファイルを正しく読み込むための関数です。
// CSSを追加
wp_enqueue_style('my-style', get_template_directory_uri() . '/css/style.css');
// JSを追加
wp_enqueue_script('my-script', get_template_directory_uri() . '/js/script.js', ['jquery'], null, true);
🔒 注意:直接 <link> や <script> タグを書くのではなく、この関数を使うことで依存関係やキャッシュ管理が自動化されます。
これらのテンプレートタグと関数を組み合わせることで、テーマの設計が格段にシンプルかつ拡張しやすくなります!
URL・パス操作系関数
サイトURL関連
WordPress内でURLやパスを取得する際は、ハードコーディングを避け、以下の関数を使うと柔軟で安全です🌟
| 関数 | 説明 | 例 |
|---|---|---|
home_url( $path = '' ) | サイトのトップページURLを返す。任意でパスを連結可能。 | echo home_url('/contact/'); |
get_template_directory_uri() | 親テーマのディレクトリURIを取得。子テーマ環境では親のパスが欲しいときに利用。 | get_template_directory_uri() . '/img/logo.png' |
get_stylesheet_directory_uri() | 子テーマ(存在しなければ親)のスタイルシートディレクトリURIを取得。 | get_stylesheet_directory_uri() . '/css/style.css' |
<!-- 例:ロゴ画像を表示 -->
<img src="<?php echo get_template_directory_uri(); ?>/assets/logo.svg" alt="サイトロゴ">
<!-- 例:子テーマのスタイル読み込み -->
<?php wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css' ); ?>
📌 ポイント
- テーマを切り替えても動的に正しいURLが取得できる
- サイト移転やサブディレクトリ設置にも自動対応
エスケープ処理
URLを直接出力するとXSSなどのリスクがあるため、必ずエスケープを挟みましょう🔒
- URLの安全表示:
esc_url( $url )- 出力前に不正な文字列を除去し、信頼できるURLに整形します。
- 使い方
<a href="<?php echo esc_url( home_url('/privacy/') ); ?>">プライバシーポリシー</a>- メリット
- ブラウザの混乱を防ぎ、セキュリティを強化
- リダイレクトや外部リンク時にも安心
💡 Tip: esc_url() は主にHTML属性内での使用を想定。
HTML本文中でURLを使う場合は esc_html() と組み合わせるとさらに安全性が向上します。
これらの関数を使い分けることで、テーマ開発時のメンテナンス性とセキュリティが飛躍的にアップします!
条件分岐と判定系関数
ページ種別チェック
条件分岐タグを使うと、表示位置やページタイプに応じて処理を分岐できます。🔀
| 関数名 | 用途 | サンプルコード |
|---|---|---|
is_front_page() | トップページかどうかを判定 | if ( is_front_page() ) { /* トップ専用 */ } |
is_page( $page ) | 指定ページかをチェック | if ( is_page('about') ) { /* Aboutページ */ } |
is_post_type_archive( $type ) | 投稿タイプのアーカイブページか判定 | if ( is_post_type_archive('event') ) { /* 一覧用 */ } |
is_singular( $type ) | 個別投稿(または指定タイプ)のページか判定 | if ( is_singular('post') ) { /* 投稿詳細 */ } |
is_tax( $taxonomy, $term ) | タクソノミー一覧ページかチェック | if ( is_tax('genre','novel') ) { /* ジャンル別 */ } |
🎯 使いどころ
- トップページだけ異なるヘッダーを読み込む
- 特定の固定ページでウィジェットを非表示にする
- カスタム投稿の一覧・詳細でテンプレートを切り替える
ユーザー・デバイス判定
アクセス元やユーザー状態に応じた表示切替で、パーソナライズやモバイル最適化が簡単に👤📱
| 関数名 | 用途 | サンプルコード |
|---|---|---|
is_user_logged_in() | ログイン済みかどうかを判定 | if ( is_user_logged_in() ) { /* 会員専用 */ } |
current_user_can( $capability ) | 権限(permission)をチェック | if ( current_user_can('edit_posts') ) { /* 編集可 */ } |
wp_is_mobile() | モバイル端末からのアクセスを判定 | if ( wp_is_mobile() ) { /* スマホ表示 */ } |
✨ 活用例
- 会員のみ閲覧できるコンテンツを非会員には隠す
- 編集権限を持つユーザーにだけ「編集リンク」を表示
- スマホ時にメニューをハンバーガーアイコンに切り替える
これらの判定系関数を組み合わせることで、コンテンツの可視性やユーザビリティを飛躍的に向上させることができます!
クエリ・ループ制御関数
クエリ変数取得
WordPressが内部で保持するクエリ変数を取得して、現在のページ情報やカスタム値を参照できます。
get_query_var( $var, $default = '' )$var:取得したいクエリパラメータ名$default:該当変数が未設定の場合の返り値
// 例1: ページ番号を取得(月別アーカイブのページ遷移などに)
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
// 例2: カスタム投稿タイプのスラッグを取得
$post_type = get_query_var('post_type');
| 変数名 | 用途例 |
|---|---|
paged | ページネーションの現在ページ番号 |
post_type | 投稿タイプ(例: ‘post’, ‘page’) |
category_name | カテゴリーのスラッグ |
✨ ポイント:テンプレート内やプラグインで「今どのクエリ結果を見ているか」を条件分岐したいときに重宝します。
カスタムループの実装
デフォルトの「メインループ」以外で、独自の投稿リストを表示したい場合に WP_Query を使います。
$args = [
'post_type' => 'post', // 投稿タイプ
'posts_per_page' => 5, // 取得件数
'paged' => get_query_var('paged', 1), // ページ番号
];
$custom_query = new WP_Query( $args );
if ( $custom_query->have_posts() ) {
while ( $custom_query->have_posts() ) {
$custom_query->the_post();
// 表示例
echo '<h2><a href="' . esc_url( get_permalink() ) . '">' . get_the_title() . '</a></h2>';
the_excerpt();
}
// ページナビ表示(必要に応じて)
the_posts_pagination([
'total' => $custom_query->max_num_pages
]);
wp_reset_postdata(); // グローバル$postをリセット
} else {
echo '<p>該当する投稿が見つかりませんでした。</p>';
}
🔍 解説
- 引数設定:
$argsで条件を指定(投稿種類・件数・ページ番号など) - ループ処理:
have_posts()とthe_post()で1件ずつ取り出し - リセット:
wp_reset_postdata()でメインクエリへの影響を防止
これにより、特定のカテゴリーだけやカスタム投稿タイプだけを自由に一覧表示できます!
ショートコードの導入と活用
ショートコードの基本
ショートコードは、投稿や固定ページ内に書くだけで複雑な機能を手軽に呼び出せる仕組みです。
- 角括弧
[]で囲んだ文字列がショートコードと呼ばれます。 - メリット:HTMLやPHPを直接記述せずに、レイアウトや機能を挿入できる🎉
定義と呼び出し
ショートコードを登録する方法(add_shortcode())
- 関数を用意
function my_button_shortcode( $atts, $content = '' ) {
// 属性のデフォルト値
$atts = shortcode_atts( [
'url' => '#',
'text' => 'ボタン',
'class' => 'btn-primary'
], $atts );
return '<a href="' . esc_url( $atts['url'] ) . '" class="' . esc_attr( $atts['class'] ) . '">' .
esc_html( $content ?: $atts['text'] ) .
'</a>';
}
- 登録
add_shortcode( 'my_button', 'my_button_shortcode' );
- 解説
| 引数 | 説明 |
|---|---|
'my_button' | 投稿内で使うショートコード名 |
'my_button_shortcode' | 実際に呼び出されるコールバック関数 |
本文内での実行仕組み
- 投稿エディタや固定ページに以下のように記述:
[my_button url="https://example.com" text="詳しくはこちら"]
- WordPressが自動で
my_button_shortcode()を呼び出し、戻り値のHTMLを埋め込みます。
応用例
固定ページでの活用
- 問い合わせフォームやカスタムCTAボタンをページ内に自由に配置。
- 管理画面のエディタで
[contact_form]のように呼ぶだけ。
ウィジェットエリアでの利用
- テーマの テキストウィジェット にショートコードを貼り付けて、サイドバーやフッターにも機能を展開。
- ウィジェット設定画面で「ショートコードを有効化」するプラグインがあれば、さらに簡単に実装可能。
💡 ポイントまとめ
- ショートコードは 簡易マクロ のようなもの。
add_shortcode()で登録後、管理画面のどこでも使える!- 属性(atts) を活用すれば、多彩なレイアウトや動的コンテンツが実現可能。
これでショートコードを自在に定義し、サイト内で効果的に活用できるようになります🚀
その他便利機能とAPI
テーマパーツ読み込み
テーマ内で共通部分を分割して管理できるのが get_template_part() です。
- 用途:ヘッダーやループ、カードレイアウトなど、再利用するパーツを別ファイル化
- 基本構文
<?php get_template_part( 'template-parts/content', 'single' ); ?>
第一引数:パーツのベースファイル名(`template-parts/content.php`)
第二引数:サフィックス(`template-parts/content-single.php` があれば優先して読み込む)
🚀 メリット:コードがすっきりして、メンテナンス性が大幅アップ!
カスタムフィールド操作
投稿に付随する独自データ(カスタムフィールド)を扱うには get_post_meta() を使用します。
| 引数 | 説明 | 例 |
|---|---|---|
$post_id | 対象投稿のID | get_the_ID() |
$key | 取得したいメタフィールドのキー | 'subtitle' |
$single (bool) | true なら文字列で、false なら配列で取得 | true |
// 例:投稿IDから「subtitle」を1つだけ取得
$subtitle = get_post_meta( get_the_ID(), 'subtitle', true );
if ( $subtitle ) {
echo '<p class="post-subtitle">' . esc_html( $subtitle ) . '</p>';
}
✨ ポイント
- カスタムフィールドを使うと、投稿ごとに細かい情報を簡単に追加・表示できる
- 複数値を扱いたい場合は
$single = falseにして配列で取得
REST API利用の準備
WordPressのREST APIを拡張して独自エンドポイントを登録する手順です。
- エンドポイント登録関数を用意
function my_register_routes() {
register_rest_route(
'myplugin/v1', // ベースURL: /wp-json/myplugin/v1/
'/items/(?P<id>\d+)', // パスとパラメータ
[
'methods' => 'GET',
'callback' => 'my_get_item',
'permission_callback' => '__return_true',
]
);
}
add_action( 'rest_api_init', 'my_register_routes' );
- コールバック関数を定義
function my_get_item( $request ) {
$id = $request->get_param('id');
$post = get_post( $id );
if ( empty( $post ) ) {
return new WP_Error( 'no_item', '投稿が見つかりません', [ 'status' => 404 ] );
}
return rest_ensure_response( [
'id' => $post->ID,
'title' => get_the_title( $post ),
'content' => apply_filters( 'the_content', $post->post_content ),
] );
}
📡 使いどころ
- 独自アプリとWordPressを連携
- フロントエンドJavaScriptから非同期でデータ取得
- モバイルアプリのバックエンドとして
これでテーマパーツの再利用、カスタムフィールドの活用、REST API拡張まで、WordPress関数を駆使した高度な機能が実装できます!
補足:非推奨・注意すべき関数
Deprecated関数の見分け方
WordPress本体やテーマ・プラグインの更新によって、古い関数は非推奨(Deprecated)となり、将来的に削除されることがあります。
以下の方法で見分けましょう:
- 公式ドキュメントの注記
関数リファレンスに “Deprecated since x.x.x” と明示されている場合は要注意です⚠️ - コード内部のコメント
コア関数では@deprecatedタグが付与されています。
/**
* @deprecated 5.5.0 Use new_function() instead.
*/
function old_function() { … }
- エラーログの確認
WP_DEBUGを有効化すると、Deprecated関数の呼び出し時に警告が出力されます。
define('WP_DEBUG', true);
- 自動検出プラグイン
「Theme Check」や「Query Monitor」などでDeprecated関数の使用箇所をリストアップできます🔍
これらのガイドラインを守ることで、WordPress関数の最新仕様に対応しつつ、サイトの安定性と将来性を確保できます!
まとめ
本ガイドでは、WordPress関数を以下の流れで学びました。
- 基礎知識:関数の役割やPHPとの関係
- 編集準備:
functions.phpの管理とバックアップ - 出力系・判定系:テンプレートタグや条件分岐の活用
- 応用テクニック:ショートコード、REST API、カスタムフィールド
- セキュリティ&互換性:エスケープ処理とDeprecated対策
これらのポイントを押さえれば、
- メンテナンス性の高いテーマ設計
- 安全性を担保した機能追加
- 将来のバージョンアップにも耐えるコード
が実現できます。
まずは手元のテーマでほんの一行から関数を使ってみて、記事内のサンプルを一つずつ試してみましょう。
あなたのWordPress開発が、より効率的かつ安心なものになることを願っています!✨

