WordPress関数一覧まとめ【Part1】テーマ制作者向け完全ガイド|ループ・テンプレタグ・画像・ナビゲーション

WordPress関数一覧まとめ【Part1】テーマ制作者向け完全ガイド|ループ・テンプレタグ・画像・ナビゲーション WordPress
この記事は約46分で読めます。
  1. 1. Sanitize(入力整形)とEscape(出力エスケープ)
    1. Sanitize(サニタイズ)とは
    2. Escape(エスケープ)とは
      1. 実装例:タイトルを安全に表示する
  2. 2. ループ(The Loop)とWP_Query|投稿を表示する仕組み
    1. have_posts() / the_post()|基本のループ
    2. WP_Query|カスタムループを作る
    3. wp_reset_postdata()|忘れると起きること
    4. get_posts()|配列で投稿を取得
    5. pre_get_posts|メインクエリを書き換える
  3. 3. テンプレート読み込み関数|ファイル分割で保守性を上げる
    1. get_header() / get_footer() / get_sidebar()
    2. get_template_part()|UIパーツの再利用
  4. 4. 投稿情報のテンプレタグ|タイトル・本文・日時・著者
      1. 日付の実装例(SEO対応)
      2. 著者情報の表示例
  5. 5. URL・リンク生成|ハードコードを絶対に避ける理由
    1. get_permalink() / the_permalink()
    2. home_url() / site_url() / admin_url()
    3. get_post_type_archive_link()
  6. 6. アイキャッチ・画像関連|パフォーマンスと見た目を両立する
    1. has_post_thumbnail() / the_post_thumbnail()
    2. get_the_post_thumbnail_url()|背景画像として使う
    3. wp_get_attachment_image()|メディアIDから画像タグを生成
    4. add_image_size()|カスタムサイズを登録する
    5. set_post_thumbnail_size()|デフォルトサムネイルサイズを変更
  7. 7. カテゴリ・タグ・タクソノミー表示
    1. get_the_category()|カテゴリを取得
    2. get_the_terms()|カスタムタクソノミー対応
    3. get_term_link()|タームのアーカイブURLを取得
  8. 8. ページネーションと前後リンク
    1. the_posts_pagination()|アーカイブ用
    2. paginate_links()|ページリンクを自由にカスタマイズ
    3. previous_post_link() / next_post_link()|個別記事用
  9. 9. メニュー・ウィジェット・サイドバー
    1. register_sidebar() / dynamic_sidebar()
  10. 10. body_class / post_class|CSS設計の土台
  11. 11. 条件分岐(Conditional Tags)基本編
  12. 12. スクリプト・スタイルのenqueue|直書きが危険な理由
    1. wp_add_inline_style() / wp_add_inline_script()
  13. 13. 翻訳(i18n)関数|テーマ配布を見据えた書き方
  14. 14. add_theme_support()|テーマの基本機能を有効化する
  15. 15. テーマ必須の出力関数|wp_head / wp_footer / bloginfo
    1. wp_head()|</head>の直前に必須
    2. wp_footer()|</body>の直前に必須
    3. language_attributes()|htmlタグの言語属性
    4. bloginfo() / get_bloginfo()
  16. 16. カスタムロゴ|has_custom_logo / the_custom_logo
    1. has_custom_logo() / the_custom_logo()
    2. get_custom_logo()|ロゴHTMLを文字列で取得
  17. 17. テーマカスタマイザー|get_theme_mod / set_theme_mod
    1. get_theme_mod() / set_theme_mod()
    2. customize_register|カスタマイザーに設定を追加
  18. 18. ショートコード|add_shortcode / do_shortcode
    1. add_shortcode( $tag, $callback )
    2. do_shortcode()|PHPからショートコードを実行
    3. shortcode_atts()|属性のデフォルト値を安全に処理
  19. 19. コメント機能|comments_template / comment_form
    1. comments_template()|single.phpに1行追加するだけ
    2. comments_open() / get_comments_number()
    3. wp_list_comments()|コメント一覧を出力
    4. comment_form()|コメントフォームを出力
  20. 20. テキスト・日付処理|wp_trim_words / wp_kses / date_i18n
    1. wp_trim_words()|指定語数で文章を切り詰める
    2. wp_kses() / wp_kses_post()|許可タグ以外のHTMLを除去
    3. wp_strip_all_tags()|すべてのHTMLタグを除去
    4. date_i18n()|ロケール対応の日付フォーマット
    5. human_time_diff()|相対時間を表示
    6. number_format_i18n()|数値のロケール対応フォーマット
  21. 21. 条件分岐 応用編|is_singular / is_archive / is_sticky
    1. get_queried_object()|現在のページの主要オブジェクトを取得
  22. 22. テーマファイルのパス・読み込み|locate_template / load_theme_textdomain
    1. get_template_directory() / get_stylesheet_directory()
    2. locate_template()|テンプレートファイルを検索する
    3. load_theme_textdomain()|テーマの翻訳ファイルを読み込む
    4. get_search_form()|検索フォームを出力
    5. get_search_query()|検索キーワードを安全に取得
  23. まとめ:テーマ制作で守るべき5つの原則

この記事でわかること

  • テーマ制作で日常的に使うWordPress関数を22カテゴリ・60関数以上を体系的に網羅
  • 「知っている」から「安全に使える」へ:Sanitize/Escapeの正しい使い分け
  • WP_Queryとメインクエリの違い、サブループ後のリセット処理を完全理解できる
  • wp_head・カスタマイザー・コメント・ショートコードなど、解説書に載りにくい関数も収録
  • コードのコピー&ペーストだけでなく「なぜそう書くか」の理由まで解説

WordPressのテーマ制作において、最も重要なのは「関数の名前を知っている」ことではありません。「どの関数を、どんな文脈で、どう安全に使うか」を理解することです。

関数の使い方があいまいなままコピー&ペーストを繰り返すと、セキュリティホールや予期しないバグを生む原因になります。この記事では、テーマ制作者が日常的に使う関数を目的・仕組み・実装例の3つの視点から解説します。

この記事はWordPress関数解説シリーズのPart1(テーマ制作編)です。プラグイン開発(設定画面・メニュー・CPT)はPart2、Ajax・REST API・セキュリティ設計はPart3で解説しています。

この記事の結論

テーマ制作で最も重要なのは「サニタイズは早め、エスケープは遅め」の2段構えと、WP_Queryサブループ後のwp_reset_postdata()です。この2つを省略するとXSS脆弱性や原因特定困難なバグが発生します。加えてenqueue APIによるCSS/JS管理、get_template_part()によるテンプレート分割、wp_head()/wp_footer()の必須記述を守れば、安全で保守しやすいテーマが作れます。

1. Sanitize(入力整形)とEscape(出力エスケープ)

結論:テーマ開発のセキュリティ事故のほとんどは、Sanitize/Escapeの省略から起きます。「サニタイズは早め、エスケープは遅め(出力直前)」の2段構えを習慣にするだけで、XSSやインジェクション攻撃の大半を防げます。

テーマ制作で最も事故が起きやすいのは、ユーザーやデータベースから取得した値をそのまま画面に出力してしまうことです。WordPressは多くのユーザーが様々な環境で使うCMSであり、悪意のある入力や予期しないデータが入ってくる可能性を常に考慮しなければなりません。

Sanitize(サニタイズ)とは

Sanitizeは入力時の整形処理です。フォームやURLパラメータから入ってきた値を、期待する形式に変換・制限します。たとえば、メールアドレスとして受け取った値に不正な文字が含まれていたら除去する処理がこれに該当します。

関数名 用途 主な動作
sanitize_text_field() テキスト入力 HTMLタグ・改行を除去
sanitize_textarea_field() 複数行テキスト HTMLタグを除去・改行は保持
sanitize_email() メールアドレス メール形式に整形
absint() 正の整数 絶対値の整数に変換
sanitize_key() キー名・スラッグ 英小文字・数字・_・-のみ

Escape(エスケープ)とは

Escapeは出力時の無害化処理です。データベースから取得した値を画面に表示する直前に、出力先の文脈に合わせて安全な形式に変換します。これによりXSS(クロスサイトスクリプティング)攻撃を防ぎます。

関数名 使う場面
esc_html() HTML本文に出力するテキスト
esc_attr() HTML属性値(class, id, data-* など)
esc_url() href・src などのURL
esc_js() インラインJavaScript内

実装例:タイトルを安全に表示する

2. ループ(The Loop)とWP_Query|投稿を表示する仕組み

結論:WP_Queryのサブループを使ったら必ずwp_reset_postdata()でリセットしてください。この一行を省略すると、タイトルや日付が別の投稿のものになるという、原因特定が極めて難しいバグが発生します。

WordPressにおける「ループ」とは、データベースから取得した投稿データを順番に処理して表示する仕組みです。記事一覧、アーカイブページ、検索結果など、複数の投稿を表示するあらゆる場面で使われます。

have_posts() / the_post()|基本のループ

have_posts()は表示すべき投稿が残っているかを真偽値で返し、the_post()は次の投稿データをグローバル変数$postにセットします。この2つを組み合わせたwhileループがWordPressテーマの基本構造です。

WP_Query|カスタムループを作る

メインクエリとは別に、独自の条件で投稿を取得したい場合に使います。サイドバーへの「最新5件表示」や「関連記事リスト」などで活躍します。

wp_reset_postdata()|忘れると起きること

WP_Queryでサブループを実行すると、グローバル変数$postがサブループの最後の投稿を指した状態になります。リセットを省略すると、その後のタイトルや日付の表示が意図しない投稿のものになるバグが発生します。原因が見えにくいため、リセット忘れは致命的です。

get_posts()|配列で投稿を取得

WP_Queryがループ処理に適しているのに対し、get_posts()は投稿オブジェクトの配列を直接取得したい場合に便利です。内部的にはWP_Queryを使用しています。

pre_get_posts|メインクエリを書き換える

アーカイブの表示件数変更や特定カテゴリの除外など、メインクエリの条件を変えたい場合はこのフックを使います。新しいWP_Queryを作るより効率的です。

重要:is_admin()is_main_query()のチェックを必ず入れてください。これを怠ると管理画面の投稿一覧にも影響が出ます。

3. テンプレート読み込み関数|ファイル分割で保守性を上げる

結論:get_template_part()を使ったテンプレート分割は、テーマの保守コストを大幅に下げます。WordPress 5.5以降は第3引数で変数を渡せるため、パーツの再利用性がさらに向上しています。

get_header() / get_footer() / get_sidebar()

それぞれheader.phpfooter.phpsidebar.phpを読み込みます。引数を渡すことでバリエーションのあるテンプレートも読み込めます。例:get_header( 'landing' )header-landing.phpを読み込む。

get_template_part()|UIパーツの再利用

記事カード、CTAブロック、著者情報など、複数箇所で使うUI部品を別ファイルに切り出すための関数です。第1引数がベース名、第2引数がバリエーション名で、parts/card-post.phpが存在しなければparts/card.phpにフォールバックします。

4. 投稿情報のテンプレタグ|タイトル・本文・日時・著者

結論:「the_」で始まる関数は直接出力、「get_the_」で始まる関数は値を返します。加工して出力する場合は必ずget_the_系+エスケープ関数を組み合わせてください。

関数 動作 使いどころ
the_title() タイトルを直接出力 h1・h2タグ内
get_the_title() タイトルを返す 加工が必要な場合
the_content() 本文を出力(フィルター適用済み) single.phpなど
the_excerpt() 抜粋を出力 記事一覧・アーカイブ
get_the_date() 公開日を返す timeタグのdatetime属性に
get_the_modified_date() 最終更新日を返す 技術ブログのSEO対策
get_the_author_meta() 著者情報を返す 著者ボックス

日付の実装例(SEO対応)

著者情報の表示例

5. URL・リンク生成|ハードコードを絶対に避ける理由

結論:URLをハードコードすると、サイト移転やSSL化のたびに大量の修正が必要になります。WordPress関数で動的に生成する習慣をつけることで、環境変化に強いテーマを作れます。

get_permalink() / the_permalink()

投稿へのリンクを作成する基本関数です。パーマリンク設定に関係なく正しいURLを返します。

home_url() / site_url() / admin_url()

関数 返すURL 主な用途
home_url() サイトの表示URL 通常のリンク生成に使う
site_url() WordPressのインストールURL サブディレクトリ構成で違いが出る
admin_url() 管理画面のURL ログインリンクなど

get_post_type_archive_link()

カスタム投稿タイプのアーカイブページへのリンクを生成します。

6. アイキャッチ・画像関連|パフォーマンスと見た目を両立する

結論:the_post_thumbnail()を使えば、srcset属性が自動付与されてレスポンシブ対応が完了します。has_post_thumbnail()による存在確認を忘れると、alt属性が空のimgタグが出力されてSEO評価を下げる原因になります。

has_post_thumbnail() / the_post_thumbnail()

get_the_post_thumbnail_url()|背景画像として使う

wp_get_attachment_image()|メディアIDから画像タグを生成

アイキャッチ以外の画像(カスタムフィールドに保存した画像IDなど)を出力する際に使います。srcsetやalt属性も自動付与されます。

add_image_size()|カスタムサイズを登録する

set_post_thumbnail_size()|デフォルトサムネイルサイズを変更

thumbnailサイズのデフォルト(150×150)を変更したい場合に使います。add_image_size()と異なり、既存のthumbnailサイズそのものを上書きします。

7. カテゴリ・タグ・タクソノミー表示

結論:カスタムタクソノミーを使うならget_the_terms()を覚えてください。WP_Errorが返ることがあるため、is_wp_error()チェックをセットで書く癖をつけることが安全な実装の基本です。

get_the_category()|カテゴリを取得

get_the_terms()|カスタムタクソノミー対応

get_term_link()|タームのアーカイブURLを取得

上記の例でも使っていますが、タームオブジェクト・ID・スラッグのいずれかを引数に渡してアーカイブURLを取得します。WP_Errorが返る可能性があるため、チェックが必要です。

8. ページネーションと前後リンク

結論:the_posts_pagination()はWordPress標準のページネーション関数で、アクセシビリティ対応のHTMLを自動生成します。自前でページネーションを組む前にまずこの関数で要件を満たせるか確認してください。

the_posts_pagination()|アーカイブ用

paginate_links()|ページリンクを自由にカスタマイズ

the_posts_pagination()では不十分なカスタマイズが必要な場合、paginate_links()を直接使います。出力するHTMLを自分でラップできます。

previous_post_link() / next_post_link()|個別記事用

9. メニュー・ウィジェット・サイドバー

結論:register_nav_menus()でメニュー位置を登録してwp_nav_menu()で表示するパターンは、管理画面からメニューを編集できる柔軟な構造を生み出します。テーマの導入直後にまず設定すべき基本機能です。

register_sidebar() / dynamic_sidebar()

10. body_class / post_class|CSS設計の土台

結論:body_class()をbodyタグに使うだけで、ページ種別ごとのCSSセレクタが自動生成されます。「.single .sidebar { display: none; }」のような記事詳細ページだけのスタイルが、JavaScriptなしで簡潔に書けるようになります。

独自クラスを追加したい場合は引数に渡します。

11. 条件分岐(Conditional Tags)基本編

結論:is_front_page()とis_home()の違いを把握することが、WordPress条件分岐の第一歩です。「フロントページにブログ投稿インデックスを表示」と設定している場合、両方がtrueになります。応用編はSection21で解説します。

関数 判定内容
is_front_page() フロントページか
is_home() ブログ投稿インデックスか
is_single() 個別投稿ページか
is_page() 固定ページか
is_category() カテゴリアーカイブか
is_search() 検索結果ページか
is_404() 404ページか
is_user_logged_in() ログイン済みか

12. スクリプト・スタイルのenqueue|直書きが危険な理由

結論:CSSやJavaScriptをheader.phpやfooter.phpに直書きするのは避けてください。enqueue APIを使うことで、プラグインとの依存関係管理、バージョンキャッシュ対策、読み込み順序の制御が自動化されます。

wp_add_inline_style() / wp_add_inline_script()

登録済みスタイルやスクリプトに、少量のインラインコードを追記したい場合に使います。<style>タグや<script>タグを直書きする代わりに使うことで、適切なタイミングで出力されます。

13. 翻訳(i18n)関数|テーマ配布を見据えた書き方

結論:テーマを配布する予定がある場合、テキストを翻訳関数でラップする習慣を最初からつけてください。後から対応しようとすると膨大な修正コストがかかります。

関数 動作
__() 翻訳して返す
_e() 翻訳して出力
esc_html__() 翻訳+エスケープして返す
esc_html_e() 翻訳+エスケープして出力
_n() 件数に応じて単数・複数形を切り替えて返す

14. add_theme_support()|テーマの基本機能を有効化する

結論:add_theme_support()はテーマのafter_setup_themeフックで呼び出します。post-thumbnailsの宣言なしにthe_post_thumbnail()を使っても画像は表示されません。機能を使う前に必ず宣言してください。

15. テーマ必須の出力関数|wp_head / wp_footer / bloginfo

結論:wp_head()とwp_footer()の省略は、プラグインの多くが動作しなくなる最大の原因です。「なぜ書くか」を理解せずコピーしているテーマが多いですが、この2つはWordPressエコシステム全体のフックポイントです。

wp_head() と wp_footer() の正しい配置場所

wp_head()|</head>の直前に必須

wp_head()</head>タグの直前に書きます。プラグインがCSSやメタタグを挿入するためのフックがここに集まっています。これを省略するとSEOプラグインのメタタグが出力されなくなります。

wp_footer()|</body>の直前に必須

wp_footer()</body>タグの直前に書きます。wp_enqueue_script()でフッターに登録したJavaScriptはすべてここで出力されます。省略するとjQueryを含む多くのスクリプトが動作しなくなります。

language_attributes()|htmlタグの言語属性

WordPressの設定言語に応じたlang属性とdir属性を自動出力します。アクセシビリティとSEOの両方に影響します。

bloginfo() / get_bloginfo()

サイト名、説明文、文字セット、WordPressのバージョンなど、管理画面の「一般設定」に対応する情報を取得します。bloginfo()は直接出力、get_bloginfo()は値を返します。

引数 返す情報
'name' サイト名(一般設定のサイトのタイトル)
'description' キャッチフレーズ
'charset' 文字コード(通常 UTF-8)
'url' サイトURL(home_url()と同等)
'template_url' テーマディレクトリURL

16. カスタムロゴ|has_custom_logo / the_custom_logo

結論:カスタムロゴを実装するには、add_theme_support(‘custom-logo’)の宣言が前提です。その上でhas_custom_logo()で存在確認し、the_custom_logo()で出力する2段構えが基本パターンです。サイト名テキストをフォールバックとして残すことが重要です。

has_custom_logo() / the_custom_logo()

the_custom_logo()<a>タグで囲まれた<img>タグを出力します。alt属性にはサイト名が自動でセットされるため、アクセシビリティ対応も同時に完了します。

get_custom_logo()|ロゴHTMLを文字列で取得

ロゴを他のHTMLと組み合わせたい場合はget_custom_logo()で文字列として取得します。なお、出力時はWordPressが生成するHTMLなのでechoで直接出力できます(エスケープ不要)。

17. テーマカスタマイザー|get_theme_mod / set_theme_mod

結論:テーマの色やレイアウトなど「ユーザーが変更したいデザイン設定」はget_theme_mod()で管理します。カスタマイザーに登録すると管理画面からリアルタイムプレビューで変更でき、ユーザー体験が大幅に向上します。

テーマカスタマイザーの3層構造

get_theme_mod() / set_theme_mod()

get_theme_mod()はテーマモッドの値を取得します。第2引数にデフォルト値を指定できるため、カスタマイザーで未設定の場合でもフォールバックが効きます。

customize_register|カスタマイザーに設定を追加

customize_registerアクションフックを使って、カスタマイザーにセクション・コントロール・設定を登録します。設定→コントロールを1セットとして追加します。

18. ショートコード|add_shortcode / do_shortcode

結論:ショートコードはテーマ独自の再利用可能なUIコンポーネントを投稿本文内で使えるようにする仕組みです。ただし、ブロックエディタが普及した現在、新規実装はブロックの代わりにショートコードを使うか慎重に判断してください。既存テーマとの互換性維持には有効です。

add_shortcode( $tag, $callback )

functions.phpでショートコードを登録します。コールバック関数は必ず文字列を返す(echoではない)のが重要なポイントです。

do_shortcode()|PHPからショートコードを実行

テンプレートファイルなど、PHP内からショートコードを実行したい場合に使います。

shortcode_atts()|属性のデフォルト値を安全に処理

ショートコードの属性は必ずshortcode_atts()を通してください。ユーザーが渡した不明な属性を除去し、デフォルト値とマージする安全な処理が行われます。

19. コメント機能|comments_template / comment_form

結論:コメント機能はcomments_template()の1行で完結します。comments.phpに実装を任せることで、テンプレートの責務分離が実現します。comment_form()は引数でラベルや必須項目を細かく制御できるため、UI要件に合わせてカスタマイズしてください。

comments.phpの基本構造

comments_template()|single.phpに1行追加するだけ

個別投稿テンプレート(single.php)に記述します。comments.phpを自動で読み込み、コメント一覧とフォームを表示します。

comments_open() / get_comments_number()

関数 用途
comments_open() コメントが有効かどうかを判定(true/false)
get_comments_number() コメント件数を整数で返す
have_comments() コメントが存在するかを判定

wp_list_comments()|コメント一覧を出力

コメント一覧をWordPress標準のHTML構造で出力します。comments.php内で使います。

comment_form()|コメントフォームを出力

引数でフォームの各部分をカスタマイズできます。よく使うオプションを示します。

20. テキスト・日付処理|wp_trim_words / wp_kses / date_i18n

結論:wp_kses_post()は「投稿本文として許可されているHTMLタグのみ通す」フィルターです。外部から取得したHTMLやユーザー入力をそのままechoする前に必ず通してください。wp_trim_words()はthe_excerpt()よりも柔軟な文字数制御が必要な場面で使います。

wp_trim_words()|指定語数で文章を切り詰める

抜粋を手動で生成したい場合や、カスタムフィールドの内容を一定の長さに収めたい場合に使います。

wp_kses() / wp_kses_post()|許可タグ以外のHTMLを除去

wp_kses_post()投稿本文と同じ権限セット(p, a, strong, emなど)を通すフィルターです。外部APIから取得したHTMLや、テーマオプションに保存されたHTMLを出力する際の標準的なサニタイズ手段です。

wp_strip_all_tags()|すべてのHTMLタグを除去

HTMLを完全にテキストに変換します。OGP用のdescriptionなど、タグが不要な場面で使います。

date_i18n()|ロケール対応の日付フォーマット

PHPのdate()のWordPress版です。WordPress設定のタイムゾーンと言語に対応した日付を返します。日本語環境では月・曜日が日本語で出力されます。

human_time_diff()|相対時間を表示

「3時間前」「2日前」のような相対時間を表示します。SNS風のUIや最新記事一覧でよく使われます。

number_format_i18n()|数値のロケール対応フォーマット

閲覧数、コメント件数などの数値をロケールに合わせたフォーマットで出力します。

21. 条件分岐 応用編|is_singular / is_archive / is_sticky

結論:is_singular()はis_single()・is_page()・is_attachment()をまとめて判定できる便利な関数です。カスタム投稿タイプの個別ページを含めて「1件の投稿が表示されているか」を判定したい場面で活躍します。

is_single / is_singular / is_archive の違い

関数 判定内容 備考
is_singular() 個別投稿・固定・添付ファイルのいずれか 投稿タイプ名を引数に絞り込み可能
is_archive() アーカイブページ全般 カテゴリ・タグ・日付・著者を含む
is_tax() カスタムタクソノミーのアーカイブ タクソノミー名を引数で指定可能
is_tag() タグアーカイブ
is_author() 著者アーカイブ
is_date() 日付アーカイブ is_year() / is_month() / is_day()も使える
is_sticky() 先頭固定表示の投稿か ループ内で使用
is_paged() ページ分割された2ページ目以降か canonicalタグ制御などに使う
has_blocks() ブロックエディタで作成された投稿か クラシック/ブロック切り替えに使う

get_queried_object()|現在のページの主要オブジェクトを取得

カテゴリアーカイブならWP_Term、個別投稿ならWP_Post、著者アーカイブならWP_Userを返します。「今どのページにいるか」に応じた動的な処理に使います。

22. テーマファイルのパス・読み込み|locate_template / load_theme_textdomain

結論:get_template_directory_uri()とget_stylesheet_directory_uri()の違いは、子テーマ使用時に顕著になります。子テーマ側のファイルを優先したい場合はstylesheet系を使い、親テーマのファイルを確実に参照したい場合はtemplate系を使ってください。

get_template_directory vs get_stylesheet_directory

get_template_directory() / get_stylesheet_directory()

関数 返す値 子テーマ時の挙動
get_template_directory() 親テーマのフルパス 常に親テーマを参照
get_stylesheet_directory() 現在有効なテーマのフルパス 子テーマがあれば子テーマを返す
get_template_directory_uri() 親テーマのURL CSS・JS読み込みに使う
get_stylesheet_directory_uri() 現在有効なテーマのURL 子テーマのCSSに使う
get_stylesheet_uri() 現在有効なテーマのstyle.cssのURL wp_enqueue_style()によく使う

locate_template()|テンプレートファイルを検索する

子テーマ→親テーマの順でファイルを探し、見つかったパスを返します。テーマのオーバーライドが効くファイル探索が必要な場面で使います。

load_theme_textdomain()|テーマの翻訳ファイルを読み込む

テーマの翻訳(.poファイル)を有効にするために必要な設定です。配布テーマでは必須で、after_setup_themeアクション内で呼び出します。

get_search_form()|検索フォームを出力

テーマにsearchform.phpがある場合はそのHTMLを、なければWordPress標準のフォームHTMLを出力します。

get_search_query()|検索キーワードを安全に取得

検索結果ページで現在の検索語を取得します。内部的にエスケープ処理が行われているため、esc_attr()と組み合わせるだけで安全に出力できます。

まとめ:テーマ制作で守るべき5つの原則

テーマ制作の品質は「エスケープの徹底」「ループのリセット」「テンプレート分割」「enqueue API使用」「wp_head/wp_footerの必須記述」の5原則で決まります。

この記事では、テーマ制作者が使うWordPress関数を22カテゴリ・60関数以上にわたって解説しました。実務で役立てられるよう、最重要ポイントを整理します。

原則 要点
✅ エスケープの徹底 出力時は必ずesc_html・esc_url・esc_attr・wp_kses_postを使う
✅ ループのリセット WP_Queryサブループ後は必ずwp_reset_postdata()
✅ テンプレート分割 get_template_part()でUIパーツを再利用可能にする
✅ enqueue API使用 CSS・JSの直書きを避け依存関係を正しく管理する
✅ wp_head/wp_footerを省略しない この2行を省略するとプラグインの大半が動作しなくなる

次回のPart2では、プラグイン開発における設定画面(Settings API)・管理メニュー・メタボックス・カスタム投稿タイプ・権限管理について詳しく解説します。

WordPress
この記事を書いた人
rapls

Web開発歴6年超のフリーランスエンジニア。WordPress.orgにプラグインを2本公開中。「自分が3時間ハマった問題を、誰かが3分で解決できるように」がブログの原点。Xserver環境でのトラブルシューティングとAI駆動開発が得意分野です。

raplsをフォローする
raplsをフォローする

コメント

タイトルとURLをコピーしました