WordPressを学ぶ

WordPressの構文

更新日:

WordPressの定型的な処理

このページでは、条件分岐やループ処理などWordPressでよく使う定型処理(構文)について説明しています。

内容は、Codex のPHP コーディング規約を参考にしています。

条件分岐

条件に応じて動作を変える。

【参考】条件分岐タグ(Codexオンラインマニュアル)

条件分岐処理の基本

<?php if(条件): ?>
 条件がtrueの時に実行される動作
<?php else: ?>
 条件がfalseの時に実行される動作
<?pho endif; ?>
<?php
  if ( 条件1 ) {
    // 条件1に該当する場合の処理
  }
?>

複数の条件分岐

論理和と論理積を使った条件判定。

論理和を使った場合
// コメント機能が有効またはコメントが存在する場合にcomments_template();を実行する。
if ( comments_open() || get_comments_number() ) {
		comments_template();
	}
論理積を使った場合
// コメント機能が有効かつコメントが存在する場合にcomments_template();を実行する。
if ( comments_open() && get_comments_number() ) {
		comments_template();
	}
論理値の反転

「!」を使うことで、真→偽に偽→真に反転させることができます。

// 条件が成立しない(偽の)場合に、処理が実行される。
if ( ! 条件 ) {
  処理
}
比較演算子

X == Y :等しければ真
X != Y :等しくなければ真
X > Y  :XがYより大きければ真
X >= Y :XがY以上なら真
X < Y  :XがYより小さければ真
X <= Y :XがY以下なら真
X === Y  : 型も含めてXとYが等しければ真

複雑な分岐処理

<?php
if ( 条件1 ) {
    条件1が成立したときに実行される処理
    if ( 条件2 ) {
        条件1が成立し条件2が成立したときに実行される処理
    } else {
        条件1が成立し条件2が不成立のときに実行される処理
    }
} elseif ( 条件3) {
    条件1が不成立で条件3が成立したときに実行される処理。
} elseif ( 条件4 ) {
    条件1と条件3が不成立で条件4が成立した時に実行される処理
}
?>
条件分岐の例

index.phpの場合

<?php
/**
 * The main template file
 *
 * This is the most generic template file in a WordPress theme
 * and one of the two required files for a theme (the other being style.css).
 * It is used to display a page when nothing more specific matches a query.
 * E.g., it puts together the home page when no home.php file exists.
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/
 *
 * @package WordPress
 * @subpackage Twenty_Twenty_One
 * @since Twenty Twenty-One 1.0
 */

get_header(); ?>

<?php if ( is_home() && ! is_front_page() && ! empty( single_post_title( '', false ) ) ) : ?>
	<header class="page-header alignwide">
		<h1 class="page-title"><?php single_post_title(); ?></h1>
	</header><!-- .page-header -->
<?php endif; ?>

<?php
if ( have_posts() ) {

	// Load posts loop.
	while ( have_posts() ) {
		the_post();

		get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
	}

	// Previous/next page navigation.
	twenty_twenty_one_the_posts_navigation();

} else {

	// If no content, include the "No posts found" template.
	get_template_part( 'template-parts/content/content-none' );

}

get_footer();

switch文

変数を異なる値と比較し、値に応じて異なった処理を行う。

// swtich 文:変数$iの値により処理が分岐する。
// $iが0の時処理1を行う。
// $iが1の時処理2を行う。
// $iが2の時処理3を行う。
// 一致する条件がない場合処理4を行う。
//  case文に一致する条件が無くdefault文もない場合は処理は実行されない。
<?php
switch ($i) {
    case 0:
        処理1;
        break;
    case 1:
         処理2;
        break;
    case 2:
         処理3;
        break;
  default:
     処理4;
}
?>

上記switch文と下記switch文は等価。

<?php
switch ($i):
    case 0:
        処理1;
        break;
    case 1:
         処理2;
        break;
    case 2:
         処理3;
        break;
  default:
     処理4;
endswitch;
?>
switch文例
/**
 * Return uniform "anonymous" data by type.
 *
 * @since 4.9.6
 *
 * @param string $type The type of data to be anonymized.
 * @param string $data Optional The data to be anonymized.
 * @return string The anonymous data for the requested type.
 */
function wp_privacy_anonymize_data( $type, $data = '' ) {

	switch ( $type ) {
		case 'email':
			$anonymous = 'deleted@site.invalid';
			break;
		case 'url':
			$anonymous = 'https://site.invalid';
			break;
		case 'ip':
			$anonymous = wp_privacy_anonymize_ip( $data );
			break;
		case 'date':
			$anonymous = '0000-00-00 00:00:00';
			break;
		case 'text':
			/* translators: Deleted text. */
			$anonymous = __( '[deleted]' );
			break;
		case 'longtext':
			/* translators: Deleted long text. */
			$anonymous = __( 'This content was deleted by the author.' );
			break;
		default:
			$anonymous = '';
			break;
	}

繰り返し構文

while

条件が成立するまで処理を繰り返す。

// 条件が成立するまで処理を繰り返す。
while (条件) :
 処理
条件の更新(更新を続けることで条件が成立するように更新する)
endwhile;

条件が成立するまで処理を繰り返す。(PHPの制御構造を用いた場合)

<?php
while(条件) {
 処理
 条件の更新(更新を続けることで条件が成立するように更新する)
}
?>

WordPressループ

投稿がある間は処理を繰り返す。

<?php if ( have_posts() ) : ?>
  <?php while(have_posts()): the_post(); ?>
    <!-- 繰り返し処理する内容 -->
  <?php endwhile; ?>
<?php endif; ?>

投稿がある場合に処理を繰り返す。投稿がない場合は別の処理を行う。

<?php if(have_posts()): ?>
  <?php while(have_posts()): the_post(); ?>
    <!-- 繰り返し処理する内容 -->
  <?php endwhile; ?>
<?php else: ?>
  <!-- 投稿データがない場合の処理 -->
<?php endif; ?>
Codexでのサンプル

Codexでのループサンプル

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
処理
<?php endwhile; else : ?>
	<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

PHPの制御構造を用いた場合

<?php 
if ( have_posts() ) {
	while ( have_posts() ) {
		the_post(); 
		//
		// 投稿がここに表示される
		//
	} // end while
} // end if
?>
singular.phpでの実際

テンプレート階層で、single.phpまたはpage.phpが存在しない場合に使用されるテンプレートファイル。

// have_posts() :投稿の有無をチェックする。投稿がる場合は真を返す。
// the_post(); :次の投稿を取得して、現在の投稿としてセットアップする。
// get_template_part :テンプレートパーツをテーマの中へ読み込む。

<?php

	if ( have_posts() ) {

		while ( have_posts() ) {
			the_post();

			get_template_part( 'template-parts/content', get_post_type() );
		}
	}

	?>

foreach

配列の要素を順に取り出して処理を行うときに使用します。

配列$arrの要素を変数$valueに格納しながら、配列の最後の要素まで繰り返し処理を行います。

<?php
 foreach ($arr as $value){
    処理
 }
?>

連想配列$arrのキーを変数$keyに要素を変数$valueに格納しながら配列の最後の要素まで繰り返し処理を行います。

<?php
 foreach ($arr as $key => $value) {
    処理
 }
?>
foreach使用例
// Loop through each of the template conditionals, and find the appropriate template file.
	foreach ( $tag_templates as $tag => $template_getter ) {
		if ( call_user_func( $tag ) ) {
			$template = call_user_func( $template_getter );
		}

		if ( $template ) {
			if ( 'is_attachment' === $tag ) {
				remove_filter( 'the_content', 'prepend_attachment' );
			}

			break;
		}
	}

for

for (初期化式; 継続条件式; 条件更新) {
	処理;
}
// 0~9までの数字を出力する。
<?php
  for($i = 0; $i<10; $i++){
	  echo $i;
}
?>

配列

複数のデーター(要素)を個々に格納するために名前を付けた入れ物。

インデックス配列

下記は、syuuという配列に月~土の文字列を格納したイメージ。

0から順番に要素を格納した配列。それぞれの格納位置をインデックスという。

インデックスは0から数えるため$syuu[0]は文字 `日' なり、$syuu[6]は文字 '土' になる。

配列イメージ

// 配列の作成
<?php
$syuu = [];
$syuu[0] = '日';
$syuu[1] = '月';
$syuu[2] = '火';
$syuu[0] = '水';
$syuu[1] = '木';
$syuu[2] = '金';
$syuu[2] = '土';
echo $syuu[2];
?>
// 実行結果は、火になる。
// 配列の作成
<?php
$syuu = array('日', '月', '火', '水','木', '金', '土');
echo $syuu[1];
?>
// 実行結果は、月になる。

連想配列

連想配列は、要素が入れてある位置にキーを付けて管理する。、

// 連想配列の作成~1
<?php
$syuu = [];
$syuu[sun] = '日';
$syuu[mon] = '月';
$syuu[tue] = '火';
$syuu[wed] = '水';
$syuu[thu] = '木';
$syuu[fry] = '金';
$syuu[sat] = '土';
echo  $syuu['wed'];
?>
// 実行結果は、水になる。
// 連想配列の作成 ~2
<?php
$syuu = array(
'sun' => '日',
'mon' => '月',
'tue' => '火'
'wed' => '水',
'thu' => '木',
'fry' => '金'
'sat' => '土'
);
echo  $syuu['wed'];
?>
// 実行結果は、水になる。
連想配列例
$tag_templates = array(
		'is_embed'             => 'get_embed_template',
		'is_404'               => 'get_404_template',
		'is_search'            => 'get_search_template',
		'is_front_page'        => 'get_front_page_template',
		'is_home'              => 'get_home_template',
		'is_privacy_policy'    => 'get_privacy_policy_template',
		'is_post_type_archive' => 'get_post_type_archive_template',
		'is_tax'               => 'get_taxonomy_template',
		'is_attachment'        => 'get_attachment_template',
		'is_single'            => 'get_single_template',
		'is_page'              => 'get_page_template',
		'is_singular'          => 'get_singular_template',
		'is_category'          => 'get_category_template',
		'is_tag'               => 'get_tag_template',
		'is_author'            => 'get_author_template',
		'is_date'              => 'get_date_template',
		'is_archive'           => 'get_archive_template',
	);

真偽判定条件

真と判定する場合

正の値 1 ~
負の値 ~ -1
倍角文字
文字列 true
条件が成立する場合

※ trueは、1と評価される。

// 下記を実行すると1が表示される。
<?php echo true ?>

偽と判定する場合

0
文字列 false
条件が成立しない場合

※ false は半角スペースと評価される。

// 下記を実行すると1 2 3が表示される。
<?php if(5-5): ?>
	<?php echo true ?>
<?php else: ?>
	<?php echo 1?>
	<?php echo false ?>
	<?php echo 2 ?>
	<?php echo false ?>
	<?php echo 3 ?>
<?php endif; ?>

-WordPressを学ぶ

Copyright© WordPressの始め方 , 2022 All Rights Reserved.