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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4269閲覧

投稿ページに属するタームにカレントクラスを付けたい

yesma

総合スコア16

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/05/27 04:16

カスタム投稿で作成した投稿ページ single-shio_a.php
ページ内にあるタームリストの箇所に、投稿に属するタームにカレントクラスをつけたくて模索してたのですが
うまくできず投稿した次第です。

該当ページ関するコードと今回の対象箇所を抜粋したコードを2つ貼り付けます。

予測ですが、if ( has_term($slug))が機能せず、投稿のタームを判別できずtrueになっていないと考えています。
現在の投稿のタームを判別する関数has_term ,is object in termなどを試してみましたがうまくできませんでした。
指定の仕方が間違っているのか、そもそも書き方が間違っているのか・・・

恐縮ですが、ご意見お願いいたします。
不足している情報などありましたらご連絡お願いいたします。

wordpress 5.7.2
php 7.4

php

1<?php 2get_header(); 3?> 4 <section class="page_title"> 5 <div class="breadcrumb"> 6 <a href="<?php echo home_url(); ?>">HOME</a> 7 <a href="<?php echo home_url("information"); ?>"><?php wp_title(''); ?></a> 8 </div> 9 <img src="<?php echo get_template_directory_uri(); ?>/images/company/shio.svg" alt=""> 10 <h2 class=""><?php wp_title(''); ?></h2> 11</section> 12<main> 13<section class="info_intro"> 14 <p class="info_intro_txt"></p> 15 16 <ul class="category_list cat_list"> 17 <li class=""><a href="<?php echo home_url("shio_a"); ?>">新着情報</a></li> 18 <?php // get_terms を使ったターム一覧の表示 19 $terms = get_terms('shio_a_cate','hide_empty=0'); 20 if (is_array($terms)) { 21 foreach($terms as $term): 22 $cat_id = $term->term_id; 23 $slug = $term->slug; 24 $cat_title = $term->name; 25 $cat_url = get_term_link($slug, 'shio_a_cate');; 26 echo "<li"; 27 if ( has_term($slug)) { 28 echo ' class="current"'; 29 } 30 echo '><a href="'.$cat_url.'" title="'.$cat_title.'">'.$cat_title.'</a></li>'; 31 endforeach; 32 } 33 ?> 34 </ul> 35 <div class="info_archive_box"> 36 <?php // 現在表示されている投稿と同じタームに分類された投稿を取得 37 $taxonomy_slug = 'shio_a_cate'; // タクソノミーのスラッグを指定 38 $post_type_slug = 'shio_a'; // 投稿タイプのスラッグを指定 39 $post_terms = wp_get_object_terms($post->ID, $taxonomy_slug); // タクソノミーの指定 40 if( $post_terms && !is_wp_error($post_terms)) { // 値があるときに作動 41 $terms_slug = array(); // 配列のセット 42 foreach( $post_terms as $value ){ // 配列の作成 43 $terms_slug[] = $value->slug; // タームのスラッグを配列に追加 44 } 45 } 46 $args = array( 47 'post_type' => $post_type_slug, // 投稿タイプを指定 48 'posts_per_page' => -1, // 表示件数を指定 49 //'orderby' => 'rand', // ランダムに投稿を取得 50 //'post__not_in' => array($post->ID), // 現在の投稿を除外 51 'tax_query' => array( // タクソノミーパラメーターを使用 52 array( 53 'taxonomy' => $taxonomy_slug, // タームを取得タクソノミーを指定 54 'field' => 'slug', // スラッグに一致するタームを返す 55 'terms' => $terms_slug // タームの配列を指定 56 ) 57 ) 58 ); 59 ?> 60 <?php $the_query = new WP_Query( $args ); ?> 61 <?php if ( $the_query->have_posts() ) : ?> 62 <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 63 <div class="info_post"> 64 <a href="<?php the_permalink(); ?>"></a> 65 <time datatime="<?php echo get_the_date('Y年n月j日'); ?>" itemprop="datepublished"><?php echo get_the_date('Y年n月j日'); ?></time> 66 <span class="info_cat"> 67 <?php 68 $term = get_the_terms($post->ID,'shio_a_cate'); 69 echo $term[0]->name; 70 ?> 71 </span> 72 <p><?php the_title(); ?></p> 73 </div> 74 <?php endwhile; ?> 75 <?php wp_reset_postdata(); ?> 76 <?php else : ?> 77 <!-- // 投稿がない場合の表示を処理 --> 78 <p>ただいま準備中です。</p> 79 <?php endif; ?> 80 </div> 81</section> 82<section class="info_contents"> 83 <?php for($i = 1; $i <= 1; $i++) : ?> 84 <?php if ( have_posts() ) : ?> 85 <?php while ( have_posts() ) : the_post(); ?> 86 <h3 class="info_post_title"><?php the_title(); ?></h3> 87 <time datatime="<?php echo get_the_date('Y年n月j日'); ?>" itemprop="datepublished"><span>情報公開日 : </span><?php echo get_the_date('Y年n月j日'); ?></time> 88 <div class="info_item"> 89 <?php the_content(); ?> 90 </div> 91 <?php 92 $cnt++; 93 if($cnt > 0){ break 2; } 94 ?> 95 <?php endwhile;?> 96 <?php wp_reset_postdata(); ?> 97 <?php else : ?> 98 <!-- // 投稿がない場合の表示を処理 --> 99 <p>ただいま準備中です。</p> 100 <?php endif; ?> 101 <?php endfor; ?> 102</section> 103</main> 104<!-- フッター --> 105<?php get_footer('common'); ?> 106

抜粋したコード
タームの一覧表示している箇所になります。

php

1<ul class="category_list cat_list"> 2 <li class=""><a href="<?php echo home_url("shio_a"); ?>">新着情報</a></li> 3 <?php // get_terms を使ったターム一覧の表示 4 $terms = get_terms('shio_a_cate','hide_empty=0'); 5 if (is_array($terms)) { 6 foreach($terms as $term): 7 $cat_id = $term->term_id; 8 $slug = $term->slug; 9 $cat_title = $term->name; 10 $cat_url = get_term_link($slug, 'shio_a_cate');; 11 echo "<li"; 12 if ( has_term($slug)) { 13 echo ' class="current"'; 14 } 15 echo '><a href="'.$cat_url.'" title="'.$cat_title.'">'.$cat_title.'</a></li>'; 16 endforeach; 17 } 18 ?> 19 </ul>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決したので記載します。
if ( has_term($slug))の記述が間違っていまして
if (is_object_in_term( get_the_ID(), 'shio_a_cate', $slug ))に
パラメータを指定する事で解決できました。

ご検討いただきありがとうございました!

投稿2021/05/27 07:29

yesma

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問