WordPressでよく使う条件分岐(if、while)のススメ🏃
公開日 : 最終更新日 :
- コーディング
こんにちは、AndHAコーディング部です。
弊社はお客さまからのご依頼でWordPressを使ったサイト構築を数多く手がけており、WordPressに特化したメディアサイトである「WPWeb」も運営しています!
https://wordpress-web.and-ha.com/
WordPressをカスタムしていくには各ページごとの条件分岐が重要となってきます。
今回はよく使う条件分岐をご紹介していきたいと思います。
一般投稿によく使う条件分岐
メインページ・フロントページ
<?php if ( is_home() || is_front_page() ) : ?> メインページ・フロントページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_home
https://wpdocs.osdn.jp/関数リファレンス/is_front_page
複数にわたるページ
<?php if ( is_paged() ) : ?> 2ページ目以降の場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_paged
投稿ページ
<?php if ( is_single() ) : ?> 投稿ページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_single
固定ページ
<?php if ( is_page() ) : ?> 固定ページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_page
アーカイブページ
<?php if( is_archive() ) : ?> アーカイブページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_archive
カテゴリーページ
<?php if( is_category() ) : ?> カテゴリーページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_category
記事がカテゴリーに属しているか
<?php if( in_category('[IDか名前かスラッグを必ず指定]') ) : ?> 指定したカテゴリーに属する投稿の場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/in_category
タグページ
<?php if( is_tag() ) : ?> タグページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_tag
特定のタグを持つ投稿ページか
<?php if( has_tag('タグID') ) : ?> 指定したタグを持つ投稿ページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/has_tag
日付別アーカイブページ
<?php if( is_date() ) : ?> 日付別アーカイブページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_date
年別
<?php if( is_year() ) : ?> 年別のアーカイブページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_year
月別
<?php if( is_month() ) : ?> 月別のアーカイブページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_month
日別
<?php if( is_day() ) : ?> 日別のアーカイブページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_day
カスタム投稿でよく使う条件分岐
カスタム投稿の投稿ページ
<?php if ( is_singular( 'カスタム投稿名' ) ): ?> 指定したカスタム投稿タイプの投稿ページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_singular
カスタム投稿のアーカイブページ
<?php if ( is_post_type_archive() ) : ?> カスタム投稿タイプのアーカイブページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_post_type_archive
カスタムタクソノミーのアーカイブページ
<?php if ( is_tax() ) : ?> カスタムタクソノミーのアーカイブページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_tax
カスタムフィールドを使った条件分岐
カスタムフィールドの値の有無
<?php $value = get_post_meta($post->ID, 'カスタムフィールド名', true);?> <?php if(!empty($value)):?> [カスタムフィールド名]が空ではない場合に true <?php endif;?>
https://wpdocs.osdn.jp/関数リファレンス/get_post_meta
https://www.php.net/manual/ja/function.empty.php
カスタムフィールドの値が一致するかを評価
<?php if(get_post_meta($post->ID,'カスタムフィールド名',true) == '文字列'): ?> [カスタムフィールド名]の値が[文字列]と一致した場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/get_post_meta
Advanced Custom Fieldsで作成した値の有無
<?php if(get_field('フィールド名')): ?> [フィールド名]が存在する場合に true <?php endif; ?>
https://www.advancedcustomfields.com/resources/get_field/
Advanced Custom FieldsのRepeater Fieldで作成した値の有無
<?php if(have_rows('リピーターフィールド名')): ?> <?php while(have_rows('リピーターフィールド名')): the_row(); ?> <?php if(get_sub_field('リピーターフィールド名-フィールド名')): ?> [リピーターフィールド名-フィールド名]が存在する場合に true <?php endif; ?> <?php endwhile; ?> <?php endif; ?>
https://www.advancedcustomfields.com/resources/get_sub_field/
知っておくと良い条件分岐
ユーザーアーカイブページ
<?php if( is_author() ) : ?> ユーザーのアーカイブページの場合に true <?php else: ?> それ以外のページで表示するコンテンツや処理を記載。 <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_author
検索結果ページ
<?php if ( is_search() ) : ?> 検索ページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_search
404ページ
<?php if ( is_404() ) : ?> 404ページの場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_404
アイキャッチ画像
<?php if ( has_post_thumbnail() ): ?> アイキャッチがある場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/has_post_thumbnail
ログイン中
<?php if( is_user_logged_in() ) : ?> ユーザーがWordPressの管理画面にログインしている場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/is_user_logged_in
抜粋
<?php if ( has_excerpt() ) : ?> 抜粋に値がある場合にtrue <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/has_excerpt
モバイルデバイス
紹介はしますが、UAから条件分岐を行っているだけなので挙動が正確ではありません。
<?php if ( wp_is_mobile() ) : ?> ユーザーがモバイルデバイスを使ってアクセスしている場合に true <?php endif; ?>
https://wpdocs.osdn.jp/関数リファレンス/wp_is_mobile
おまけ:モバイルデバイスの条件分岐をより正確に行いたい場合
wp_is_mobile()
はとても便利な関数ですが、正確な条件分岐が行えないため解決するコードを紹介します。
コピペでは動作出来ないので、説明をよく読んで利用してみてください。
1. Mobile Detectをダウンロード
公式サイト(http://mobiledetect.net/)
GitHub(https://github.com/serbanghita/Mobile-Detect)
上記のどちらからでもよいので、Mobile_Detect.php
をthemesディレクトリなどに設置してください。
2. function.phpに定義
下記のコードをfunction.php
に追加しましょう。
require_once
で設置場所はご自身の環境にあわせてくださいね。
/** * Mobile Detect */ require_once ('/[path]/Mobile_Detect.php'); $detect = new Mobile_Detect ; $is_mobile = $detect->isMobile(); $is_tablet = $detect->isTablet(); $is_phone = false; if($detect->isMobile() && !$detect->isTablet()){ $is_phone = true; }
3. Mobile Detectの使い方
上記コードをfunction.php
に正しく設定が出来た場合、下記コードはそれぞれの実機にて条件分岐ができるようになります。
<?php if( $is_mobile ): ?> タブレットまたはスマートフォンで閲覧した場合に true <?php endif; ?> <?php if( $is_phone ): ?> スマートフォンで閲覧した場合に true <?php endif; ?> <?php if( $is_tablet ): ?> タブレットで閲覧した場合に true <?php endif; ?> <?php if( !$is_mobile ): ?> その他で閲覧した場合に true <?php endif; ?>
4. Mobile_Detect.phpをショートコードとして使う
ショートコードでも使いたい場合には下記の様にfunction.php
に追加してください。
**2. function.phpに定義**
で説明したときと同様にrequire_onceで設置場所はご自身の環境にあわせてくださいね。
/** * Mobile Detect */ require_once ('/[path]/Mobile_Detect.php'); $detect = new Mobile_Detect ; $is_mobile = $detect->isMobile(); $is_tablet = $detect->isTablet(); $is_phone = false; if($detect->isMobile() && !$detect->isTablet()){ $is_phone = true; } /** * Mobile_Detect short code */ function is_phone( $atts, $content = null ): string { require_once ('/[path]/Mobile_Detect.php'); $detect = new Mobile_Detect; if($detect->isMobile() && !$detect->isTablet()) { return '' . $content; } else { return ''; } } add_shortcode('is_phone', 'is_phone'); function is_tablet( $atts, $content = null ): string { require_once ('/[path]/Mobile_Detect.php'); $detect = new Mobile_Detect; if($detect->isTablet()) { return '' . $content; } else { return ''; } } add_shortcode('is_tablet', 'is_tablet'); function is_pc( $atts, $content = null ): string { require_once ('/[path]/Mobile_Detect.php'); $detect = new Mobile_Detect; if(!$detect->isMobile() && !$detect->isTablet()) { return '' . $content; } else { return ''; } } add_shortcode('is_pc', 'is_pc');
上記が設置出来たら、WordPressの投稿や固定ページ内で下記のコードで条件分岐が行えるようになります。
[is_phone] スマートフォンで閲覧した場合に表示されます [/is_phone] [is_tablet] タブレットで閲覧した場合に表示されます [/is_tablet] [is_pc] パソコンで閲覧した場合に表示されます [/is_pc]
まとめ
今回はよく使う条件分岐を紹介しました。
フルカスタムしていくには条件分岐がとても重要になってきますので、WordPress条件分岐タグでどの種類のページに対してどのタグが有効なのかを理解していきましょう。
上記取り上げたタグ以外にも様々なタグがありますので、さらに調べてみたい場合には下記を参考にすると良いと思います。
それでは、また。