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

公開日 :

コーディング

WordPressでよく使う条件分岐のススメ🏃

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

上記取り上げたタグ以外にも様々なタグがありますので、さらに調べてみたい場合には下記を参考にすると良いと思います。

https://wpdocs.osdn.jp/条件分岐タグ

それでは、また。

この記事をシェア

  • Twitter
  • Facebook
  • hatena-bookmark

合わせて読みたい