カスタマイズ 2024.06.03 2024.06.06
WordPressの条件分岐とは?書き方・注意点よく使うタグをわかりやすく解説
WordPressの条件分岐は、特定の条件が満たされたときに特定のアクションを実行するためのコードを書く方法です。WordPressでは便利な条件分岐タグが複数用意されているため、うまく使いこなすと複雑な条件を指定することや、細かなカスタマイズを行うことができます。
本記事は、WordPress初心者が知りたい条件分岐タグの基本的な書き方や注意点を解説しています。また、タグを忘れてしまったときに役立つ「条件分岐タグ一覧」も掲載していますので、困った際にはぜひお役立てください。
目次
WordPressの条件分岐とは何か
「条件分岐」とは、プログラミングでよく使用される手法です。具体的には、ある条件が満たされた場合に、指定したアクションを実行します。WordPressでは、投稿、カテゴリーなど、WordPressの特定のページやモバイル端末からアクセスしているか、WordPressにログインしているかによって異なる表示や操作をさせたい場合に使用します。
これらの条件分岐を設定するために、「is_single()」や「is_page()」などWordPress独自に用意されている条件分岐タグを使用します。
WordPress条件分岐の書き方の基本
条件分岐タグの基本は、以下のとおりです。PHPで記述しますが、処理部分はHTMLで記述することが可能です。そのため、「投稿一覧ページが表示されたらテキストを表示する」といった指定ができます。
ほか、条件分岐を記述する際のルールは以下のとおりです。
- 「if(条件)」「elseif(条件)」の後ろはコロン(:)、「endif()」の後はセミコロン(;)をつける
- 条件を否定する場合(条件1が成り立たない場合)は条件の前にビックリマーク(!)をつける
- elseは省略可能、別の条件分岐を追加する場合は「elseif」を使用する
- OR条件(条件1の場合、または条件2の場合)は「条件1 || 条件2」と記述する
- AND条件(条件1の場合、かつ条件2の場合)は「条件1 && 条件2」と記述する
PHPファイル以外には使用しない
WordPressで条件分岐を行う際のコードは、PHPファイルに記述します。処理部分はHTMLも記述できますが、WordPressの記事エディタ内やウィジェットなどに記述しても動作しませんので注意してください。
if文は「コロン」か「波かっこ」どちらで記述すべき?
WordPressで条件分岐を行う方法には、先ほど紹介した記法のほかに波かっこを使用した
以下のような記法もあります。他のプログラムに慣れた方は、こちらの記法のほうが馴染みがあるかもしれません。
1 2 3 4 5 6 7 8 |
<?php if (①条件){ ここに条件に当てはまった場合の処理を記述する } else{ ここに条件に当てはまらなかった場合の処理を記述する } ?> |
※こちらの場合は、「endif」の記述は不要です。
PHPの文法的には、どちらの書き方でも間違いはありません。しかしHTMLと組み合わせて記述する場合やWordPressの条件分岐タグを使用する場合は、コロンを使用して記述するほうが可読性が高くおすすめです。
WordPress条件分岐を使う際に注意したいポイント
WordPressの条件分岐はPHPを使用して記述します。PHPでは、以下の点に注意するとエラーが起きにくく、またわかりやすいコードになります。
【ポイント1】全角文字は使用しない
PHPコード内に、全角スペースや全角記号(コロン、セミコロンなど)を記述するとエラーになります。WordやWebサイトからコードをコピペする際に全角文字が含まれやすいため、念のため確認すると安心です。
【ポイント2】コロン、セミコロンを忘れずにつける
PHPでは、「if() 」および「elseif()」の直後にコロン(:)を付けます。「endif」の直後にはセミコロン(;)を付けます。混同しやすいため、注意しましょう。
かっこの数に気を付ける
かっこの開始「(」と終了「)」はセットで使用します。数が一致しないとエラーになります。適切にインデントを行うとかっこの数を把握しやすくなります。
適宜コメントを残す
コードを記述する際には、コメント形式で「何に対するコードなのか」を残しておくことをおすすめします。自分自身で後から確認する際だけでなく、他の人が見た時にもコードの内容を把握しやすくするためです。
コメントの例:
1 2 3 4 5 6 7 8 9 10 11 |
<?php //〇〇の場合 if (条件): ?> 条件に当てはまった場合の処理を記述する <?php //〇〇でない場合 else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
上記のように、PHPタグ内で「//」をつけるとコメントを残すことができます。
HTMLタグのコメント「<!– –>」を使用しても良いのですが、ソースコード上にコメントが見えてしまうので注意しましょう。
また、HTMLタグのコメントはPHPタグの外で使うようにしましょう。
よく使う条件分岐関数8選
条件分岐タグは非常に数多くありますが、特に以下の8つのタグは使用頻度が高いものです。
トップページ:is_home() || is_front_page()
トップページかどうかを判定したい場合には、基本の記述ルールにあったOR条件を使用して「is_home() || is_front_page()」と記述します。
1 2 3 4 5 |
<?php if (is_home() || is_front_page()) : ?> ここにトップページだった場合の処理を記述 <?php else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
なお、トップページの条件分岐については、多くの場合「is_front_page()」のみで問題ありませんが、特定のテーマ・プラグインなどで影響がある可能性があるため、上記で紹介しています。それぞれのタグの違いについては、以下を参考にしてください。
【参考情報】is_home()とis_front_page()の違い
WordPressでは、Webサイトで最初に表示されるページ(いわゆるトップページ)として「フロントページ」と「ブログ投稿インデックスページ」の2種類があります。それぞれを判定する条件分岐タグとして以下を使用します。
- is_home():ブログ投稿インデックスページかどうか判定
- is_front_page():フロントページかどうかを判定
これは、トップページに何を設定しているかによって変わります。表示設定で、ホームページの表示を「最新の投稿」または「投稿ページ」に設定していると、「is_home()」でTRUEを返します。
しかし、ホームページの表示を「固定ページ」で、かつ投稿ページの設定をしないと「is_home()」でFALSEを返します。
そのため、「is_front_page()」と「is_home()」とを組み合わせることで、「ホームページの表示が最新の投稿の場合」などのきめ細やかな条件設定ができるようになります。
投稿ページ:is_single()
投稿ページかどうかを判定したい場合には、「is_single()」を使用します。特定の記事IDで指定したい場合には、「is_single(‘投稿ID’)」のように、かっこ内にシングルクォートで括ったID番号を記述します。
1 2 3 4 5 |
<?php if (is_single()) : ?> ここに投稿ページだった場合の処理を記述 <?php else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
固定ページ:is_page()
固定ページかどうかを判定したい場合には、「is_page()」を使用します。投稿ページと同様、特定の記事IDで指定したい場合には、「is_page(‘ページID’)」のように、かっこ内にシングルクォートで括ったID番号を記述します。
1 2 3 4 5 |
<?php if (is_page()) : ?> ここに固定ページだった場合の処理を記述 <?php else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
カテゴリーページ:is_category()
カテゴリーページかどうかを判定したい場合には、「is_category()」を使用します。特定のカテゴリーページだけを指定したい場合には、「is_category(‘カテゴリーID’)」のように、かっこ内にシングルクォートで括ったID番号を記述します。
1 2 3 4 5 |
<?php if (is_category()) : ?> ここにカテゴリーページだった場合の処理を記述 <?php else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
検索ページ:is_search()
検索結果ページかどうかを判定したい場合には、「is_search()」を使用します。
1 2 3 4 5 |
<?php if (is_search()) : ?> ここに検索結果ページだった場合の処理を記述 <?php else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
404ページ:is_404()
404ページかどうかを判定したい場合には、「is_404()」を使用します。
1 2 3 4 5 |
<?php if (is_404()) : ?> ここに404ページだった場合の処理を記述 <?php else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
モバイルかどうか:wp_is_mobile()
ページを表示しているデバイスがモバイル(スマホやタブレット)かどうかを判定したい場合には、「wp_is_mobile()」を使用します。
1 2 3 4 5 |
<?php if (wp_is_mobile()) : ?> ここに端末がモバイルだった場合の処理を記述 <?php else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
ログイン中かどうか:is_user_logged_in()
ログイン中かどうかを判定したい場合には、「is_user_logged_in()」を使用します。
1 2 3 4 5 |
<?php if (is_user_logged_in()) : ?> ここにログイン中だった場合の処理を記述 <?php else: ?> 条件に当てはまらなかった場合の処理を記述 <?php endif; ?> |
【保存版】WordPress条件分岐一覧表
WordPressが用意している条件分岐タグの一覧表です。前項で紹介したタグは色付けされています。
条件判定内容 | 関数名 |
---|---|
404ページかどうかを判定 | is_404() |
日別アーカイブかどうか判定 | is_day() |
文字が右から左へ (RTL) かどうか判定 | is_rtl() |
SSLが使用されるかどうか判定 | is_ssl() |
タグアーカイブページかどうか判定 | is_tag() |
カスタム分類アーカイブページかどうか判定 | is_tax() |
日付アーカイブページかどうか判定 | is_date() |
フィードに対するものであるかどうか判定 | is_feed() |
ブログのホームページかどうか判定 | is_home() |
固定ページかどうか判定 | is_page() |
年別アーカイブページかどうか判定 | is_year() |
管理画面内のページかどうか判定 | is_admin() |
電子メールが有効であるかどうか判定 | is_email() |
埋め込み投稿に対するものかどうか判定 | is_embed() |
月別アーカイブページかどうか判定 | is_month() |
アーカイブの1ページ目かどうかを判定 | is_paged() |
著者アーカイブページかどうか判定 | is_author() |
ロボットリクエストかどうか判定 | is_robots() |
検索結果ページかどうかを判定 | is_search() |
投稿ページかどうかを判定 | is_single() |
固定表示かどうかを判定 | is_sticky() |
各種アーカイブページかどうか判定 | is_archive() |
favicon.icoファイルかどうか判定 | is_favicon() |
投稿の公開日が、前の投稿の公開日と異なるかどうか判定 | is_new_day() |
投稿用かページ プレビュー用か判定 | is_preview() |
UUIDが有効かどうか判定 | wp_is_uuid() |
カテゴリーページかどうかを判定 | is_category() |
GD イメージ関数で受け入れられるタイプであるかどうか判定 | is_gd_image() |
ナビゲーション メニューであるかどうか判定 | is_nav_menu() |
投稿または固定ページかどうかを判定 | is_singular() |
指定された変数が WordPress エラーかどうか判定 | is_wp_error() |
メイン サイトであるかどうか判定 | is_main_site() |
マルチサイトが有効かどうか判定 | is_multisite() |
トラックバック エンドポイント呼び出しに対するものであるかどうか判定 | is_trackback() |
ページを表示しているデバイスがモバイル端末(スマホやタブレット)かどうかを判定 | wp_is_mobile() |
指定されたパスがストリームURLかどうか判定 | wp_is_stream() |
添付ファイルページかどうか判定 | is_attachment() |
サイトの管理インターフェースかどうか判定 | is_blog_admin() |
トップページかどうかを判定 | is_front_page() |
メインクエリであるかどうか判定 | is_main_query() |
シリアル化されているかどうか判定 | is_serialized() |
ユーザー管理画面に対するものであるかどうか判定 | is_user_admin() |
子テーマが使用されているかどうか判定 | is_child_theme() |
ユーザーがサイト管理者であるかどうか判定 | is_super_admin() |
ユーザーがスパマーとしてマークされているかどうか判定 | is_user_spammy() |
switch_to_blog() が有効かどうか判定 | ms_is_switched() |
オブジェクトかどうか判定 | rest_is_object() |
ディレクトリが書き込み可能かどうか判定 | wp_is_writable() |
コメントフィードが稼働しているかどうか判定 | is_comment_feed() |
マルチサイトインストールのメイン ネットワークであるかどうか判定 | is_main_network() |
ディレクトリが書き込み可能かどうか判定 | win_is_writable() |
ウィジェットが表示されるかどうか判定 | is_active_widget() |
ID がナビゲーションメニュー項目であるかどうか判定 | is_nav_menu_item() |
ネットワーク管理者ページであるかどうか判定 | is_network_admin() |
ページ テンプレートを使用するかどうか判定 | is_page_template() |
プラグインがアクティブかどうか判定 | is_plugin_active() |
プラグインが技術的にアクティブであるが、ロード中に一時停止されたかどうか判定 | is_plugin_paused() |
パスが絶対パスかどうか判定 | path_is_absolute() |
WordPress がすでにインストールされているかどうか判定 | is_blog_installed() |
指定されたオブジェクトが指定された用語のいずれかに関連付けられているかどうか判定 | is_object_in_term() |
プライバシーポリシーページかどうか判定 | is_privacy_policy() |
メタキーが保護されているかどうか判定 | is_protected_meta() |
ログイン中かどうかを判定 | is_user_logged_in() |
ブロックベースのテーマかどうか判定 | wp_is_block_theme() |
HTTPSを使用しているかどうか判定 | wp_is_using_https() |
XML リクエストであるかどうか判定 | wp_is_xml_request() |
用語が複数の分類間で共有されているかどうか判定 | wp_term_is_shared() |
プラグインが非アクティブかどうか判定 | is_plugin_inactive() |
IP アドレスが有効かどうか判定 | rest_is_ip_address() |
JSON リクエストであるかどうか判定 | wp_is_json_request() |
添付ファイルかどうか判定 | is_local_attachment() |
別の用語の祖先であるかどうか判定 | term_is_ancestor_of() |
指定された URL が内部ホストリストに含まれるホストのものであるかどうか判定 | wp_is_internal_link() |
現在のリクエストが JSONP リクエストであるかどうか判定 | wp_is_jsonp_request() |
大規模なネットワークがあるかどうか判定 | wp_is_large_network() |
変数が数値インデックスの配列かどうか判定 | wp_is_numeric_array() |
指定された投稿が自動保存であるかどうか判定 | wp_is_post_autosave() |
指定された投稿がリビジョンであるかどうか判定 | wp_is_post_revision() |
WordPress がリカバリモードであるかどうか判定 | wp_is_recovery_mode() |
REST API エンドポイントリクエストが現在処理されているかどうか判定 | wp_is_rest_endpoint() |
管理バーを表示するかどうか判定 | is_admin_bar_showing() |
サイトがカスタマイザーでプレビューされているかどうか判定 | is_customize_preview() |
投稿タイプのアーカイブ ページかどうか判定 | is_post_type_archive() |
シリアル化されたデータが文字列型であるかどうか判定 | is_serialized_string() |
サブドメイン構成が有効かどうか判定 | is_subdomain_install() |
分類が「閲覧可能」であるとみなされるかどうか判定 | is_taxonomy_viewable() |
テキストドメインの翻訳があるかどうか判定 | is_textdomain_loaded() |
指定されたファイルが有効な ZIP ファイルかどうか判定 | wp_zip_file_is_valid() |
指定されたオブジェクト タイプが指定された分類に関連付けられているかどうか判定 | is_object_in_taxonomy() |
投稿タイプが「閲覧可能」かどうか判定 | is_post_type_viewable() |
WSOD から保護する必要があるエンドポイント上にいるかどうか判定 | is_protected_endpoint() |
サイドバーが登録されているかどうか判定 | is_registered_sidebar() |
HTTPS がサポートされているかどうか判定 | wp_is_https_supported() |
文字列が有効な JSON メディア タイプであるかどうか判定 | wp_is_json_media_type() |
HTTP オリジンが承認されたものかどうかを判定 | is_allowed_http_origin() |
このコメントタイプでアバターの取得が許可されているかどうか判定 | is_avatar_comment_type() |
カスタム ヘッダー ビデオが現在のページに表示できるかどうか判定 | is_header_video_active() |
プラグインがネットワークのみかどうか判定 | is_network_only_plugin() |
ランダムなヘッダー画像が使用されているかどうか判定 | is_random_header_image() |
サイトメタが有効かどうか判定 | is_site_meta_supported() |
ユーザーが特定のブログのメンバーであるかどうか判定 | is_user_member_of_blog() |
指定されたフィールドを応答本文に含めるべきかどうか判定 | rest_is_field_include() |
添付ファイルが画像であるかどうか判定 | wp_attachment_is_image() |
サイトが指定された開発モードであるかどうか判定 | wp_is_development_mode() |
ファイルの変更を許可するかどうか判定 | wp_is_file_mod_allowed() |
サイトに多数のユーザーがいるかどうか判定 | wp_is_large_user_count() |
メンテナンスモードが有効になっているかどうか判定 | wp_is_maintenance_mode() |
サイトが初期化されているかどうか判定 | wp_is_site_initialized() |
電子メール アドレスを禁止されたドメインのリストと照合 | is_email_address_unsafe() |
投稿ステータスが「閲覧可能」とみなされるかどうか判定 | is_post_status_viewable() |
プラグインをアンインストールできるかどうか判定 | is_uninstallable_plugin() |
指定された HTML 文字列がこの WordPress サイトからの出力である可能性が高いかどうか判定 | wp_is_local_html_output() |
Ajax アクションを処理しているかどうか判定 | is_protected_ajax_action() |
分類オブジェクトが階層的であるかどうか判定 | is_taxonomy_hierarchical() |
現在の WordPress バージョンとの互換性をチェック | is_wp_version_compatibility() |
ファイルが Web ページ内に表示するのに適しているかどうか判定 | file_is_displayable_image() |
現在の PHP バージョンとの互換性をチェック | is_php_version_compatibility() |
投稿が公開状態かどうか判定 | is_post_publicly_viewable() |
投稿タイプが階層型であるかどうか判定 | is_post_type_hierarchical() |
用語が一般公開されるかどうか判定 | is_term_publicly_viewable() |
現在のブログの割り当てにアップロード スペースが残っているかどうか判定 | is_upload_space_available() |
サイトが割り当てられたアップロード スペースを使用したかどうか判定 | Upload_is_user_over_quota() |
サイトURLがHTTPSを使用しているかどうか判定 | wp_is_home_url_using_https() |
PHP ini 値が実行時に変更可能かどうか判定 | wp_is_ini_value_changeable() |
WordPress が現在 REST API リクエストを処理しているかどうか判定 | wp_is_serving_rest_request() |
WordPress が保存されている現在のサイトの URL が HTTPS を使用しているかどうか判定 | wp_is_site_url_using_https() |
プラグインがネットワーク全体でアクティブであるかどうか判定 | is_plugin_active_for_network() |
エクスポート中にテーマ ディレクトリを無視するかどうか判定 | wp_is_theme_directory_ignored() |
項目の自動更新が強制されているかどうか判定 | wp_is_auto_update_forced_for_item() |
fatal error handlerが有効になっているかどうか判定 | wp_is_fatal_error_handler_enabled() |
自動更新が有効になっているかどうか判定 | wp_is_auto_update_enabled_for_type() |
HTTP Basic 認証によって保護されているかどうか判定 | wp_is_site_protected_by_basic_auth() |
アプリケーション パスワードがグローバルに利用可能かどうか判定 | wp_is_application_passwords_available() |
アプリケーションパスワードがサポートされているかどうか判定 | wp_is_application_passwords_supported() |
パスワードのリセットが許可されているかどうか判定 | wp_is_password_reset_allowed_for_user() |
アプリケーション パスワードを使用できるかどうか判定 | wp_is_application_passwords_available_for_user() |
リダイレクト URL プロトコル スキームを検証 | wp_is_authorize_application_redirect_url_valid() |
まとめ
WordPressの条件分岐タグは、Webサイトをカスタマイズする際に欠かせないものです。いくつもあるタグを覚える必要はありません。本記事などを参考に、「こんな条件分岐ができるのか」というイメージだけ掴んでいただき、後で必要な時に探せるようにしておくとよいでしょう。
WordPressサイト制作・カスタマイズなら「wp.make」にお任せ!
WordPressでのサイト制作やリニューアルを検討する時、以下のようなお悩みはありませんか?
- WordPressに詳しい制作会社に依頼したいが、どこがいいかわからない…
- セキュリティ対策をしっかりしたいが、社内にノウハウがないのでプロに任せたい…
- WordPressに最適なサーバーの選定や構築から依頼したい…
- SEO対策や高速化も考慮したサイト構築を行なってほしい…
- 制作後の保守・運用についてもサポートしてほしい…
- 今のサイトを簡単に運用できるようにしてほしい…
「wp.make」は、WordPressのプロフェッショナル集団によるWordPressサイト制作・カスタマイズサービスです。
サイトの制作だけでなく、WordPressに最適なサーバーの選定や構築といったインフラ面の支援から、SEO対策や表示スピードの高速化、高度なセキュリティ対策や制作後の保守・運用サポートまで、WordPressに関わることならあらゆるお悩みを解消いたします。
既存のお客さまからも
「コミュニケーションが取りやすく、クオリティが高い」
「WordPressのプロとして信頼感がある」
と大変ご好評をいただいています。
WordPressサイトの制作・カスタマイズをご検討されているなら、ぜひ以下からお気軽にご相談ください。
WordPress開発・カスタマイズなら 『wp.make』
全案件WordPressのみ!
株式会社e2eの『wp.make』はWordPress専門のWeb制作サービスです。
WordPress案件だけを扱っているから、技術・ノウハウ・対応力が圧倒的!
【WordPressサイト制作でよくあるお悩み】
・運用シーンが想定されておらず、更新しづらかった…
・打ち合わせで専門用語が多くてわかりづらい…
・制作後の保守には対応してくれなかった…
こんな事態になる前に、ぜひ一度、ご相談ください!
WordPressサイトを作るなら、一番WordPressに詳しいところへ!