MENU

【WordPress】「投稿記事に関連記事を出力」「タグ一覧の取得を関数化する」

目次

WordPressの投稿記事に関連記事を出力

デイトラ上級編DAY13〜15を学習しました🏃‍♀️

プラグインを使用しないで、関連記事を出力しました!

関連記事を出力するのは、より多く記事を読んでもらえるようにするという理由があることをしりました☺️

たしかに、YouTubeやAmazonでも関連した動画や商品がでてきますもんね!

今回、プラグインを使用しないで実装しましたが、プラグインを使用しない理由の1つに、

サイト全体のスピードが落ちる」と言うことがあると知りました。

また、保守性の観点からプラグインを入れた方がいいのか、実装した方がいいのか、

考えられるようにしないといけないということを学びました✊

タグ一覧の取得を関数化する

理解するのに、2時間くらいかかりました😅

ググったり、チャットGPTに聞いたりと、自分なりに理解したのでまとめてみました!

まずは、正解のコードです!

functions.php


function my_get_post_tags($id = 0) {
  global $post;

  //引数が渡されなければ投稿IDを見るように設定
  if (0 === $id) {
    $id = $post->ID;
  }

  //タグ一覧を取得
  $tags = get_the_tags($id);

  if ($tags) {
    foreach($tags as $tag) {
      echo '<div class="entry-tag-item"><a href="'. get_tag_link($tag->term_id) .'">'. $tag->name .'</a></div><!-- /entry-tag-item -->';
    }
  }
}

関数とは?変数とは?

そもそも用語の理解があやふやだったので、関数とは、変数とはというところから復習します!

関数とは

まず、関数についてです。

関数とは、特定の物事をまとめておいて、いつでもそれを使えるようにしたもののことを言います。

例えば、あるお店のハンバーグのレシピがあるとします。ハンバーグを作るときのレシピは、「ひき肉200g」、「卵1個」、「パン粉大さじ5」、「玉ねぎ1/2」だとします。その「レシピ」を見れば誰でも簡単にお店のハンバーグを作ることができます。

「レシピ」=「関数」

「レシピを見てハンバーグ作る」=「関数を使う」

と言うことになります!

関数の具体的な例

function weather() {
    echo "いい天気ですね!";
}

これは、「いい天気ですね!」と表示するということをまとめた関数です。

関数を呼び出すには、

weather();

これにより、関数が実行されると、「いい天気ですね」と表示されるようになります!

変数とは

変数とは、情報を入れておく箱のようなもののことを言います!

変数を使うときには、$マークを使います。

例えば、「りんごの数」を変数にしたいと思います。

$apple = 5;

こうすることで、PHPは「$apple」と言う箱に「5」と言う数字を入れます。

$apple = $apple - 1;

これが表しているのは、「4」です!

では、本題に戻り少しずつみていきます👀

function my_get_post_tags($id = 0) {
  global $post;

globalとは

前提としてWordpressは、PHPでできています。PHPでは、関数内で宣言された変数は、その関数内でしか適応されないというルールがあります。しかし、globalを使うことで外側で定義されている変数を関数の中でも使えるようにすることができます。

しかし、globalを使えば、他のテンプレート内(header.phpやsingle.phpなど)でもその変数を使うことができるようになります!

例えば、

$number = 1;

function showNumber() {
    echo $number; // ここでは $number は未定義なのでエラーになります
}

showNumber();

この場合、関数の外で変数を作っているため、エラーになります!PHPが、関数の外で作られた変数と言うことで、別物として扱っているんですね。

globalを使うと、

$number = 1;

function showNumber() {
    global $number; // global を使うことで外の $number を使えるようにする
    echo $number; // これで 1 が表示されます
}

showNumber();

これで、関数の外側で定義されたものでも、$numberの値(=1)を表すことができます!

$postとは

$post → 現在表示されている投稿(記事やページ)の情報の箱

↑この箱の中には、投稿のIP、タイトル、内容、日付など投稿に関するデータが入っています

global $post;

とすることで、関数の外側に存在する$postの内容を使って処理することができます!

次に、↓この部分を解説します!

 $tags = get_the_tags($id);

返り値$tagsについて

$tags → get_the_tags()の結果(タグのID,名前、スラッグ(タグのURLに使われる簡潔な名前)などの情報)が入っています。

get_the_tags()関数について

get_the_tags() → 指定したい投稿(記事やページ)に関連づけられるタグを取得するために使います。

引数$idについて

$id → 取得したい投稿IDを指定するためのもの。このIDをget_the_tags()に渡すことで、そのIDに対応する投稿に付けられたタグの一覧を取得できます!

具体例

例えば、投稿IDが10の記事に「バナナ」「りんご」という2つのタグが付けられている場合、以下のようなコードが実行されます。

$tags = get_the_tags(10);

$tags の内容は以下のようになります

Array
(
    [0] => stdClass Object
        (
            [term_id] => 1
            [name] => バナナ
            [slug] => banana
            [description] => バナナに関する投稿です。
        )
    [1] => stdClass Object
        (
            [term_id] => 2
            [name] => りんご
            [slug] => apple
            [description] => りんごに関する投稿です。
        )
)

nameは、タグの表示名

slugは、タグのURLに使われる名前

term_id はタグごとに割り当てられた一意のID

次に、↓この部分を解説します!

foreach($tags as $tag)

このコードは、$tags 配列の中身を一つずつ取り出して $tag という変数に代入しながらループ処理を行うことを意味します。各ループの中で、$tag には1つのタグオブジェクトが入ります。

foreachループについて

foreachループは、PHPで配列やオブジェクトを簡単に繰り返し処理するために使う構文です。

$tags について

get_the_tags() 関数から取得したタグ情報の一覧(配列全体)の情報(タグのID、名前、スラッグなど)が入っています。

$tagについて

$tags 配列の各要素を順番に取り出して格納する変数です。$tag は配列から取り出された1つのタグオブジェクトを指します。

foreach($tags as $tag)の具体例

 if ($tags) {
    foreach($tags as $tag) {
    echo $tag->name .;
 } else {
    echo 'この投稿にはタグがありません。';
}

・1回目のループ:$tags 配列の最初のタグ(例えば、「バナナ」)が $tag に代入されます。echo $tag->name . ; が実行され、「バナナ」というタグ名が表示されます。

・2回目のループ:$tags 配列の次のタグ(例えば、「りんご」)が $tag に代入されます。echo $tag->name . ; が実行され、「りんご」というタグ名が表示されます。

・配列内の全てのタグが処理されると、foreach ループが終了します。

最後にsingle.phpを書き換えてあげると、タグ一覧の関数化ができます!!

お疲れ様でした☺️✨

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

webスキルを学習中のひろみです。教員を目指し大学に進学するも、犯罪学に興味を持ち、大学卒業後はお金貯めて公務員の予備校に1年通いました。そして、法務省の専門職員として4年在籍し、2024年に退職しました。30歳1児の母です。大好きなのは、ビール、牛タン、旅行です。教員免許、ビジネス実務マナー技能検定1級所持。

コメント

コメントする

目次