masa_beginner
@masa_beginner

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

WordPressで記事のカテゴリーを表示させたいですがうまくいきません。

解決したいこと

WordPressで記事のカテゴリーを表示させたいですがうまくいきません。
ループ内でget_the_category();で取得した配列を$categoryに代入して、
$categoryに入っている、nameの値を
echo $category->nameで出力しようとするとエラーになってしまい取り出すことができません。

しかし、 echo $category[0]->nameだと上手くいきます。
なぜこのような現象が起きるのでしょうか?
[0]に何の意味があるのでしょうか?

ご教授お願いいたします。

var_dump($category);
スクリーンショット 2021-04-08 3.48.00.png

該当するソースコード

         <ul class="newest-blog-block__list">
            <?php for ($i = 0; $i < 3; $i++) : the_post(); ?>
              <li class="newest-blog-content">
                <a class="content-box" href="">
                  <?php
                  $id = get_post_thumbnail_id();
                  $img = wp_get_attachment_image_src($id, 'large');
                  $category = get_the_category();
                  // var_dump($category);
                  ?>
                  <div class="content-box__img" style="background-image:url('<?php echo $img[0]; ?>');">
                    <p class="content-category"><?php echo $category[0]->name; ?></p>
                  </div>
                  <div class="content-box__title-and-date-box">
                    <h3 class="content-box__title-and-date-box content-box__title-and-date-box--title">
                      <?php
                      if (mb_strlen($post->post_title) > 40) {
                        $title = mb_substr($post->post_title, 0, 40);
                        echo $title . '...';
                      } else {
                        echo $post->post_title;
                      }
                      ?>
                    </h3>
                    <p class="content-box__title-and-date-box content-box__title-and-date-box--data"><?php the_time('Y-m-d'); ?></p>
                  </div>
                </a>
              </li>
            <?php endfor; ?>
          </ul>

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。
$category[0]->nameにすると無事出力されますが、理由が分からず気持ちが悪いです。

0

1Answer

カテゴリーは複数登録されることがあるので $category は配列になっているのだと思います。

$category[0]->name は、カテゴリーが複数ある場合には先頭の一つだけを取り出しているという意味です。

0Like

Comments

  1. @masa_beginner

    Questioner

    なるほど!!
    $categoryの中に複数の配列が入っていて、
    $category[0]で1つ目の配列を選択し、
    $category[0]=>$keyで1つ目の配列から値をを取り出すというようなイメージで良いでしょうか?

    また、var_dumpの中身の構造イマイチ分からないのですが、
    回答を参考に、下記ようにイメージしているのですが合っていますでしょうか?
    $category = array{
    [0]=>{
    ['key']=>'.....',
    ['key']=>'.....',
    .
    .
    .
    }
    }
  2. @masa_beginner

    Questioner

    理解できました!
    ありがとうございますm(_ _)m

Your answer might help someone💌