カスタム投稿のカテゴリに自由に色を設定したいと思いAdvanced Custom Fieldsを導入しました。
Advanced Custom Fieldsで設定したフィールド「catcolor」の値を出力させたいのですが、get fieldが効かず?何も反映されない状態です。
細工なコードかもしれませんが以下現状となります。
<?php the_field( '[フィールド名]' ); ?>で値が出力されると思ったのですが、何が悪いのかわかりません。php
1<ul class="list pc"> 2 <li class="item bg--01 active">全てを見る</li> //全てのカテゴリ(現在のページなのでactive) 3 <?php $categories = get_categories(array('taxonomy' => 'news_cat')); if ( $categories ) : ?> //カスタム投稿で作成したnews_catというカテゴリを取得 4 <?php foreach ( $categories as $category ): ?> //以下、news_catカテゴリがあるだけ繰り返す処理 5 <?php $color = get_field('catcolor');?>//catcolorの値を$colorとする 6 <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/カテゴリ名とする。 7 <li data-id="<?php echo $category->slug ?>"><?php echo esc_html( $category->name ); ?></li>//data-idとしてカテゴリスラッグを取得、テキストでカテゴリ名を出力 8</a> 9<?php endforeach; ?>//繰り返し処理終わり 10<?php endif; ?> 11</ul>
エラーなどは出ていないので、間違いはないと思うのですが…これはcatcolorを読めてないだけなのでしょうか。
詳しい方、どうぞお知恵を貸してください。
追記
上記phpはarchive-news.phpとtaxonomy.phpに記述します。
さらに追記
現状のarchive.phpです。
php
1<ul class="list pc"> 2 <li class="item bg--01 active">全てを見る</li> 3 <?php $categories = get_categories(array('taxonomy' => 'news_cat')); if ( $categories ) : ?> 4 <?php foreach ( $categories as $category ): ?> 5 <?php 6 $taxonomy = 'news'; 7 $term_slug = get_query_var('term'); 8 $the_term = get_term_by('slug', $term_slug, $taxonomy); 9 $cat_id = $category->cat_ID; 10 $term_idsp = 'category_'.$cat_id; 11 //if(get_field('catcolor', $term_idsp)){ 12 //echo get_field('catcolor', $term_idsp);} 必要かどうか分からないので非表示、今の所必要なさそう 13 ?> 14 <a class="item bg--<?php echo $category->slug ?> <?php echo get_field('catcolor', $term_idsp); ?> 15 <?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> 16 </a> 17 <?php endforeach; ?> 18 <?php endif; ?> 19 </ul>
ここまででカラーコードをa.itemのクラス名として出力することはできました。
ここから行いたいこととして、
0. JSを使い、現在ページのURLにスラッグ名が含まれている場合、背景色をcatcolorで定めた色にする
0. 記事のループの中でカテゴリアイコンの背景色をcatcolorにする(以下コード詳細)
php
1<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 2<!-- ▽ ループ開始 ▽ --> 3 <li class="item"> 4 <div class="item__left"> 5 <div class="item__date" datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y.m.d'); ?></div> 6 <?php $terms = get_the_terms($post -> ID, 'news_cat');//カスタム投稿名news_catの投稿を取得 7 foreach($terms as $term){ 8 $term_slug = $term -> slug; 9 }?> 10 <div class="item__cate item__cate--<?php echo esc_html($term_slug); ?>" style="background-color:"> <!--カテゴリボタン ここにカラーコードを入れたい--> 11 <?php echo esc_html($term->name); ?><!--カテゴリ名--> 12 </div> 13 </div> 14 <div class="item__right"> <!--記事タイトル--> 15 <?php 16 $last_post_ids = array(); 17 $lastposts = get_posts('post_type=news&posts_per_page=1'); 18 foreach($lastposts as $lastpost) { 19 $last_post_ids[] = $lastpost->ID; 20 }?> 21 <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 22 </div> 23</li> 24<!-- △ ループ終了 △ --> 25<?php endwhile; ?>
このコードの中に、先ほどのコードを記述してもカラーコードは表示されません。
おそらく
〜foreach($terms as $term){$term_slug = $term -> slug;}?> で違うループを指定しているのが原因だと思うのですが
ここを変えると他の部分が表示されなくなってしまいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/26 14:57
2020/03/27 01:08 編集
2020/03/27 03:32
2020/03/30 01:22 編集