質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.51%

Advanced Custom Fieldsの値が出力されない

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 115

xminimx

score 41

カスタム投稿のカテゴリに自由に色を設定したいと思いAdvanced Custom Fieldsを導入しました。
Advanced Custom Fieldsで設定したフィールド「catcolor」の値を出力させたいのですが、get fieldが効かず?何も反映されない状態です。
細工なコードかもしれませんが以下現状となります。

<ul class="list pc">
 <li class="item bg--01 active">全てを見る</li> //全てのカテゴリ(現在のページなのでactive)
 <?php $categories = get_categories(array('taxonomy' => 'news_cat')); if ( $categories ) : ?> //カスタム投稿で作成したnews_catというカテゴリを取得
 <?php foreach ( $categories as $category ): ?> //以下、news_catカテゴリがあるだけ繰り返す処理
 <?php $color = get_field('catcolor');?>//catcolorの値を$colorとする
  <a class="item bg--<?php echo $category->slug ?> <?php echo $color ; ?> <?php echo $category->slug ?>" href="<?php echo esc_url( home_url() ); ?>/news/<?php echo $category->slug ?>/">//クラスbg--の後ろにカテゴリスラッグをつけ、スラッグ自体もクラスにする。ここでcolorも出てくるはずが、何も出てこない。リンク先はドメイン/news/カテゴリ名とする。
 <li data-id="<?php echo $category->slug ?>"><?php echo esc_html( $category->name ); ?></li>//data-idとしてカテゴリスラッグを取得、テキストでカテゴリ名を出力
</a>
<?php endforeach; ?>//繰り返し処理終わり
<?php endif; ?>
</ul>


<?php the_field( '[フィールド名]' ); ?>で値が出力されると思ったのですが、何が悪いのかわかりません。
エラーなどは出ていないので、間違いはないと思うのですが…これはcatcolorを読めてないだけなのでしょうか。
詳しい方、どうぞお知恵を貸してください。


追記
上記phpはarchive-news.phpとtaxonomy.phpに記述します。


さらに追記
現状のarchive.phpです。

<ul class="list pc">
          <li class="item bg--01 active">全てを見る</li>
          <?php $categories = get_categories(array('taxonomy' => 'news_cat')); if ( $categories ) : ?>
          <?php foreach ( $categories as $category ): ?>
          <?php
          $taxonomy = 'news';
          $term_slug = get_query_var('term');
          $the_term = get_term_by('slug', $term_slug, $taxonomy);
          $cat_id = $category->cat_ID;
          $term_idsp = 'category_'.$cat_id;
          //if(get_field('catcolor', $term_idsp)){
          //echo get_field('catcolor', $term_idsp);} 必要かどうか分からないので非表示、今の所必要なさそう
          ?>
          <a class="item bg--<?php echo $category->slug ?> <?php echo get_field('catcolor', $term_idsp); ?>
 <?php echo $category->slug ?>" href="<?php echo esc_url( home_url() ); ?>/news/<?php echo $category->slug ?>/"><li data-id="<?php echo $category->slug ?>"><?php echo esc_html( $category->name ); ?></li>
          </a>
          <?php endforeach; ?>
          <?php endif; ?>
        </ul>


ここまででカラーコードをa.itemのクラス名として出力することはできました。
ここから行いたいこととして、

  1. JSを使い、現在ページのURLにスラッグ名が含まれている場合、背景色をcatcolorで定めた色にする
  2. 記事のループの中でカテゴリアイコンの背景色をcatcolorにする(以下コード詳細)
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<!-- ▽ ループ開始 ▽ -->
 <li class="item">
  <div class="item__left">
   <div class="item__date" datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y.m.d'); ?></div>
   <?php $terms = get_the_terms($post -> ID, 'news_cat');//カスタム投稿名news_catの投稿を取得
       foreach($terms as $term){
       $term_slug = $term -> slug;
       }?>
   <div class="item__cate item__cate--<?php echo esc_html($term_slug); ?>" style="background-color:"> <!--カテゴリボタン ここにカラーコードを入れたい-->
     <?php echo esc_html($term->name); ?><!--カテゴリ名-->
     </div>
    </div>
 <div class="item__right"> <!--記事タイトル-->
  <?php
  $last_post_ids = array();
  $lastposts = get_posts('post_type=news&posts_per_page=1');
  foreach($lastposts as $lastpost) {
  $last_post_ids[] = $lastpost->ID;
  }?>
  <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
 </div>
</li>
<!-- △ ループ終了 △ -->
<?php endwhile; ?>


このコードの中に、先ほどのコードを記述してもカラーコードは表示されません。
おそらく
〜foreach($terms as $term){$term_slug = $term -> slug;}?> で違うループを指定しているのが原因だと思うのですが
ここを変えると他の部分が表示されなくなってしまいます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

こちら、参考になるでしょうか?
カテゴリやタームに紐づけたカスタムフィールドを取得し、表示する

以下のように、第2引数を指定するとよさそうです。
今回の場合だと「タームID」を追加してください。

// get_field('カスタムフィールド名', カスタム分類(タクソノミー)名_タームID)
get_field('catcolor', news_cat_タームID)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/26 23:57

    リンク先では別の書き方をしていますよ。

    キャンセル

  • 2020/03/27 10:07 編集

    kei344さん
    <?php get_field('カスタムフィールド名', $post->ID)?>
    で行うところを、<?php get_field('カスタムフィールド名', 'カスタム分類(タクソノミー)名_タームID')?>
    にするということだと思うのでnew1roさんのアドバイスを試してみようと思います。

    new1roさん
    ありがとうございます。ちなみにとても初歩的な質問になるのですが、タームIDはどうやって確認すれば良いでしょうか。
    <?php get_queried_object_id();?>
    <p>タームID:<?php $tax_id=get_queried_object_id();echo $tax_id;?></p>
    これを試してみたのですが、0となったので0で良いのでしょうか。

    キャンセル

  • 2020/03/27 12:32

    > 0となったので0で良いのでしょうか。
    断言できないですが、おそらく違います。

    WordPressの管理画面で、

    「カテゴリやタームに紐づけたカスタムフィールドを取得し、表示する」のリンク先
    https://kaiza.jp/result/result-391/
    を参考に、試してみてほしいです。

    -----

    // カスタム分類名
    $taxonomy = 'products_cat';
    $term_slug = get_query_var('term');

    $the_term = get_term_by('slug', $term_slug, $taxonomy);
    $term_id = $the_term->term_id;

    //タームのカスタムフィールドを取得するためのIDは「カスタム分類(タクソノミー)名_タームID」
    $term_idsp = $taxonomy."_".$term_id;

    キャンセル

  • 2020/03/30 10:04 編集

    すみません、リンク先の内容をほとんど理解できていないです…
    ご提示いただいた「カスタム分類名」以下のコードをarchive-news.phpに書いてみましたが何も変わりませんでした。

    https://webkcampus.com/201903/1567/ こちらも参考にしながらfunction.phpとarchive.phpを編集してみたのですがこちらも何も表示されませんでした。

    追記
    再度確認してみて
    <?php
    $taxonomy = 'news';
    $term_slug = get_query_var('term');

    $the_term = get_term_by('slug', $term_slug, $taxonomy);
    $cat_id = $category->cat_ID;

    //タームのカスタムフィールドを取得するためのIDは「カスタム分類(タクソノミー)名_タームID」
    $term_idsp = 'category_'.$cat_id;

    //なお、タームではなく、カテゴリの場合は「category_カテゴリID」にする
    //$cat_id = $category->cat_ID;
    //$term_idsp = 'category_'.$cat_id;

    if(get_field('catcolor', $term_idsp)){
    echo get_field('catcolor', $term_idsp);
    }
    ?>
    以上を記述したところ、設定したカラーコードが表示されるようになりました、ありがとうございます!
    if(get_field('catcolor', $term_idsp)){
    echo get_field('catcolor', $term_idsp);
    }
    ?>
    ここで表示されていると思うのですが、cssの中に呼び出すのに苦戦しております。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる