WordPressでよく使う条件分岐(if、while)のススメ🏃

公開日 : 最終更新日 :

  • コーディング
WordPressでよく使う条件分岐のススメ🏃

こんにちは、AndHAコーディング部です。

弊社はお客さまからのご依頼でWordPressを使ったサイト構築を数多く手がけており、WordPressに特化したメディアサイトである「WPWeb」も運営しています!

WordPress特化型メディアサイト【WPWeb】 (and-ha.com)

WordPressをカスタムしていくには各ページごとの条件分岐が重要となってきます。今回はよく使う条件分岐をご紹介していきたいと思います。

一般投稿によく使う条件分岐

メインページ・フロントページ

<?php if ( is_home() || is_front_page() ) : ?>
メインページ・フロントページの場合に true
<?php endif; ?>

複数にわたるページ

<?php if ( is_paged() ) : ?>
2ページ目以降の場合に true
<?php endif; ?>

投稿ページ

<?php if ( is_single() ) : ?>
投稿ページの場合に true
<?php endif; ?>

固定ページ

<?php if ( is_page() ) : ?>
固定ページの場合に true
<?php endif; ?>

アーカイブページ

<?php if( is_archive() ) : ?>
アーカイブページの場合に true
<?php endif; ?>

カテゴリーページ

<?php if( is_category() ) : ?>
カテゴリーページの場合に true
<?php endif; ?>

記事がカテゴリーに属しているか

<?php if( in_category('[IDか名前かスラッグを必ず指定]') ) : ?>
指定したカテゴリーに属する投稿の場合に true
<?php endif; ?>

タグページ

<?php if( is_tag() ) : ?>
タグページの場合に true
<?php endif; ?>

特定のタグを持つ投稿ページか

<?php if( has_tag('タグID') ) : ?>
指定したタグを持つ投稿ページの場合に true
<?php endif; ?>

日付別アーカイブページ

<?php if( is_date() ) : ?>
日付別アーカイブページの場合に true
<?php endif; ?>

年別

<?php if( is_year() ) : ?>
年別のアーカイブページの場合に true
<?php endif; ?>

月別

<?php if( is_month() ) : ?>
月別のアーカイブページの場合に true
<?php endif; ?>

日別

<?php if( is_day() ) : ?>
日別のアーカイブページの場合に true
<?php endif; ?>

カスタム投稿でよく使う条件分岐

カスタム投稿でよく使う条件分岐

<?php if ( is_singular( 'カスタム投稿名' ) ): ?>
指定したカスタム投稿タイプの投稿ページの場合に true
<?php endif; ?>

カスタム投稿のアーカイブページ

<?php if ( is_post_type_archive() ) : ?>
カスタム投稿タイプのアーカイブページの場合に true
<?php endif; ?>

カスタムタクソノミーのアーカイブページ

<?php if ( is_tax() ) : ?>
カスタムタクソノミーのアーカイブページの場合に true
<?php endif; ?>

カスタムフィールドを使った条件分岐

カスタムフィールドの値の有無

<?php $value = get_post_meta($post->ID, 'カスタムフィールド名', true);?>
<?php if(!empty($value)):?>
[カスタムフィールド名]が空ではない場合に true
<?php endif;?>

カスタムフィールドの値が一致するかを評価

<?php if(get_post_meta($post->ID,'カスタムフィールド名',true) == '文字列'): ?>
[カスタムフィールド名]の値が[文字列]と一致した場合に true
<?php endif; ?>

Advanced Custom Fieldsで作成した値の有無

<?php if(get_field('フィールド名')): ?>
[フィールド名]が存在する場合に true
<?php endif; ?>

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; ?>

知っておくと良い条件分岐

知っておくと良い条件分岐

<?php if( is_author() ) : ?>
ユーザーのアーカイブページの場合に true
<?php else: ?>
それ以外のページで表示するコンテンツや処理を記載。
<?php endif; ?>

検索結果ページ

<?php if ( is_search() ) : ?>
検索ページの場合に true
<?php endif; ?>

404ページ

<?php if ( is_404() ) : ?>
404ページの場合に true
<?php endif; ?>

アイキャッチ画像

<?php if ( has_post_thumbnail() ): ?>
アイキャッチがある場合に true
<?php endif; ?>

ログイン中

<?php if( is_user_logged_in() ) : ?>
ユーザーがWordPressの管理画面にログインしている場合に true
<?php endif; ?>

抜粋

<?php if ( has_excerpt() ) : ?>
抜粋に値がある場合にtrue
<?php endif; ?>

モバイルデバイス

紹介はしますが、UAから条件分岐を行っているだけなので挙動が正確ではありません。

<?php if ( wp_is_mobile() ) : ?>
ユーザーがモバイルデバイスを使ってアクセスしている場合に true
<?php endif; ?>

おまけ:モバイルデバイスの条件分岐をより正確に行いたい場合

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条件分岐タグでどの種類のページに対してどのタグが有効なのかを理解していきましょう。

上記取り上げたタグ以外にも様々なタグがありますので、さらに調べてみてください!

合わせて読みたい!