Categories: PHPWordpress

【Wordrpess】でよく使うphp、テンプレ関数まとめ (2021/5/15最新版)

言語によって記法が違うのをそらで覚えるのは大変だしミスもある!

サイトを制作するといろんなコードに触れますが、言語によって記述ルールがまちまちで、いっぱいやってるとどれがどの記法だったかわかんなくなりませんか?

たとえば、条件文でifを使ったとして、

if(条件式){ //判定の等号は、phpやjavascript,pythonの場合"=="とふたつ続くことにも注意!! VBAでは"="とひとつで表現する!

}else{

}elseif{

}

という場合と

if(条件式){

}else{

}else if{

}

という場合があります。
(”elseif”か”else if”か、問題)

Excelのマクロだと

If 条件式1 Then

 条件式1が成立した場合に実行する処理

ElseIf 条件式2 Then

 条件式2が成立した場合に実行する処理

Else 

 どの条件式も成立しなかった場合に実行する処理

End If

(ややこしいい~💦💦個人的にはVBAが一番クセつよいですね。。)

というように、“{}”を使用しない代わりに”End If”で閉じないといけなかったり、pythonだと

if 条件式1:

    `条件式1がTrueのときに行う処理`

elif 条件式2:

    `条件式1がFalseで条件式2がTrueのときに行う処理`

elif 条件式3:

    `条件式1, 2がFalseで条件式3がTrueのときに行う処理`

というように、“{}”を使わずにインデント(字下げ)で構造を表現しますが、締めの閉じがなかったり。

ループ文の記法も違うし、html出力する関数も違うしあとはコメントアウトの記法もバラバラですよね。

「言語」とはよくいったもので、言ってる内容や大まかな言語構造は一緒なんですが、それぞれ方言がある感じです。
僕的には”{}”,”()”の迷子問題や記述工数が少ないpythonみたいな言語が好きですが、WordpressやEC-CUBEを触っているとphpが圧倒的に便利だな~と思います。
Shopifyのliquidも、MVCが一つのファイルにセットになったりしていてphpフレームワークをガリガリ書いている人ならけしからんと思われるかもですが、
ブロック化構造が完結しているので、僕のようなずぼらには大助かりです!

WordPressでよく使うphp、テンプレートコード

そんなわけでこのサイトで自分がすぐ引き出せるように&誰かの役に立つように、JS,CSS,PHP,liquid,pythonなんかでよく使う関数を言語をごとに1ページ内にまとめて、都度更新していきたい次第です。

サイトのURL

<?php bloginfo('url'); ?>

テーマのアセットファイルなどのURL

<?php echo get_template_directory_uri(); ?>
//使用例(画像) <img src="<?php echo get_template_directory_uri(); ?>/assets/images/logo.jpg" alt="">
//使用例(CSS) <?php echo get_template_directory_uri(); ?>/assets/css/
//使用例(JS) <?php echo get_template_directory_uri(); ?>/assets/js/

条件文

if( 条件① ) {
 /* 条件①を満たす場合に行う処理 */} elseif ( 条件② ) {
 /* 条件②を満たす場合に行う処理 */} else {
 /* 条件①も条件②を満たさない場合の処理 */}

固定ページで投稿記事の情報を取得する(Wordpressサイト制作では熟語的に頻繁に使うことになります)

<?php $args = array(
 //'numberposts' => 10, //表示したい記事の数
 'post_type' => 'rent_room' //カスタム投稿で作成した投稿タイプ
 );
 $customPosts = get_posts($args);
 if($customPosts) : foreach($customPosts as $post) : setup_postdata( $post );
 ?>

 <?php endforeach; ?>
 <?php else : //記事が無い場合 ?>
  <p>登録がありません。</p>
<?php endif;
wp_reset_postdata(); //クエリのリセット ?>

カスタムフィールドの表示

<?php echo get_post_meta($post->ID, 'フィールド名', true); ?>

繰り返し要素を持つカスタムフィールド内の画像表示

<?php $変数A = get_field( '繰り返し要素を持つカスタムフィールド名', $変数B->ID ); ?>
<?php
  $i = 0;
  if($変数A){
    foreach($変数A as $row) {
      if( $i >= 30 ) {
        break;//画像を30枚のみ表示してループ終了
      }
      echo ('<img src="' . $row['繰り返されている方のカスタムフィールド名'] . '">');
      $i += 1;
    }
  }
?>

記事につけたターム(カスタムタクソノミー)を表示する

<?php
$変数A = get_the_terms($post->ID, 'カスタム分類名');
// 複数のカスタム分類を指定する場合は配列を使用する
// $terms = get_the_terms($post->ID, array('カスタム分類名1','カスタム分類名2'));
if ( $変数A ) {
 echo '<ul>';
 foreach ( $変数A as $変数B ) {
  echo '<li>'.$変数B->name.'</li>';
 }
 echo '</ul>';
}
?>

指定したターム(カスタムタクソノミー)のカスタム投稿タイプの記事一覧を表示させる方法

<?php
$custom_posts = get_posts(array(
    'post_type' => 'カスタム投稿タイプスラッグ', // 投稿タイプ
    'posts_per_page' => 6, // 表示件数
    'orderby' => 'date', // 表示順の基準
    'order' => 'DESC', // 昇順・降順
    'tax_query' => array(
        array(
            'taxonomy' => 'タクソノミースラッグ', //タクソノミーを指定
            'field' => 'slug', //ターム名をスラッグで指定する
            'terms' => 'タームスラッグ', //表示したいタームをスラッグで指定
            'operator' => 'IN'
        ),
    )
));
global $post;
if($custom_posts): foreach($custom_posts as $post): setup_postdata($post); ?>
    <!-- ループはじめ -->
    <h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
    <p><?php the_time('Y/m/d') ?></p>
    <p><?php the_excerpt(); ?></p>
    <!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); endif; ?>

WordPressの「オブジェクト」とPHPの連想配列(2次元配列)の違いについて

めちゃくちゃ紛らわしい!これのせいで3時間くらいハマった!
WordPressでは、投稿情報やカテゴリ情報などはオブジェクト形式( WP_Object )で取得するという仕様!!

扱われ方は連想配列に似ているのに、値の取り出し方に違いがあった!

(オブジェクト形式では「アロー関数」という概念で、オブジェクトが保持している値(プロパティ)を取り出す!)

//オブジェクトからの値(プロパティ値)の取り出し方
echo $obj->name; //プロパティ名を指定して値を出力

//連想配列からの値の取り出し方
echo $array['name']; //キーを指定して値を出力

//オブジェクト形式
$cat = get_category(10);
echo $cat->name;   //出力できる
echo $cat['name']  //エラー

//連想配列形式
$cat = get_category(10, 'ARRAY_A');
echo $cat->name;   //エラー
echo $cat['name']  //出力できる。

phpのインクルード

//インクルード(階層が同じならphpファイル名のみ)
<?php include('ファイルのパス'); ?>

変数や配列のダンプ

<?php var_dump($変数名or配列名) ; ?>

今日聴いていた曲はこちら

ナナイロ

ECサイト制作に強いフロントエンドエンジニア。Web関連のお役立ち技術情報を発信しています。 2025年の最新のAI生成コーディングのコースをUdemyに公開いたしました。爆速でコードを書きたい方は必見です!! さらに、今年(2025年)からVoicyのパーソナリティに挑戦し始めました!ラジオでWebエンジニアの生の声をお届けしています。

Share
Published by
ナナイロ