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

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

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

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

PHP

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

Q&A

解決済

1回答

3842閲覧

記事詳細ページのカテゴリーにカレントクラスを付けたい

yesma

総合スコア16

WordPress

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

PHP

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

0グッド

0クリップ

投稿2020/11/17 23:51

WordPressのオリジナルテーマ開発をしています。
記事詳細ページにてカテゴリー一覧を表示させているのですが、
閲覧している記事のカテゴリに合わせて、該当カテゴリーにカレントクラスを付けたいのですが、
色々試してうまくできなかったので、ご相談致します。

原因としては、ループの外側で表示しているからカテゴリーを読み込めないのでしょうか?
知識不足ですいません。
不足している情報等ありましたら、お知らせください。
以下がコードになります。

php

1single.php 2<?php 3/** 4 * The template for displaying post pages 5 * Template Name: post_page 6 * 7 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/ 8 * 9 * @package hamaen 10 */ 11 12get_header(); 13?> 14 <section class="page_title"> 15 <div class="breadcrumb"> 16 <a href="<?php echo home_url(); ?>">HOME</a> 17 <a href=""><?php wp_title(''); ?></a> 18 </div> 19 <img src="<?php echo get_template_directory_uri(); ?>/images/company/shio.svg" alt=""> 20 <h2 class=""><?php wp_title(''); ?></h2> 21</section> 22<main> 23<section class="info_intro"> 24 <p class="info_intro_txt">本ページは、メーカー様・小売店様・専門業者様・官公庁などお取引様向けの情報提供ページになります。<br>一般のお客様へ商品の直接販売は行っておりませんのでご了承ください。</p> 25 26 <ul class="category_list"> 27 <li><a href="<?php echo home_url("information"); ?>">新着情報</a></li> 28 <?php 29 $categories = get_categories('hide_empty=1&title_li='); 30 if (is_array($categories)) { 31 foreach($categories as $category): 32 $cat_id = $category->cat_ID; 33 $cat_title = $category->cat_name; 34 $cat_url = get_category_link($cat_id); 35 echo "<li"; 36 if (is_category($cat_id)) { 37 echo ' class="current"'; 38 } 39 echo '><a href="'.$cat_url.'" title="'.$cat_title.'">'.$cat_title.'</a></li>'; 40 endforeach; 41 } 42 ?> 43 </ul> 44 <div class="info_archive_box"> 45 <?php 46 // 同じカテゴリから記事を10件呼び出す 47 $categories = get_the_category($post->ID); 48 $category_ID = array(); 49 foreach($categories as $category): 50 array_push( $category_ID, $category -> cat_ID); 51 endforeach ; 52 $args = array( 53 #'post__not_in' => array($post -> ID), // 今読んでいる記事を除く 54 'posts_per_page'=> -1, 55 'category__in' => $category_ID, 56 #'orderby' => 'rand', // ランダムに記事を選ぶ 57 ); 58 $query = new WP_Query($args); 59 if( $query -> have_posts() ): while ($query -> have_posts()) : $query -> the_post(); 60 ?> 61 <div class="info_post"> 62 <a href="<?php the_permalink(); ?>"></a> 63 <time datatime="<?php echo get_the_date('Y年n月j日'); ?>" itemprop="datepublished"><?php echo get_the_date('Y年n月j日'); ?></time> 64 <span class="info_cat"> 65 <?php $cat = get_the_category(); 66 $cat = $cat[0]; 67 { echo $cat->cat_name; } ?> 68 </span> 69 <p><?php the_title(); ?></p> 70 </div> 71 <?php endwhile; endif; ?> 72 <?php wp_reset_postdata(); ?> 73 </div> 74</section> 75<section class="info_contents"> 76 <h3 class="info_post_title"><?php the_title(); ?></h3> 77 <time datatime="2<?php echo get_the_date('Y年n月j日'); ?>" itemprop="datepublished"><span>情報公開日 : </span><?php echo get_the_date('Y年n月j日'); ?></time> 78 <div class="info_item"> 79 <?php the_content(); ?> 80 </div> 81</section> 82</main> 83<!-- フッター --> 84<?php get_footer('common'); ?>

分かりにくいと思いますので、以下の箇所が今回のカテゴリーを一覧で表示しているコードです。
こちらは上部のコードから抜粋しているものです。

php

1 <ul class="category_list"> 2 <li><a href="<?php echo home_url("information"); ?>">新着情報</a></li> 3 <?php 4 $categories = get_categories('hide_empty=1&title_li='); 5 if (is_array($categories)) { 6 foreach($categories as $category): 7 $cat_id = $category->cat_ID; 8 $cat_title = $category->cat_name; 9 $cat_url = get_category_link($cat_id); 10 echo "<li"; 11 if (is_category($cat_id)) { 12 echo ' class="current"'; 13 } 14 echo '><a href="'.$cat_url.'" title="'.$cat_title.'">'.$cat_title.'</a></li>'; 15 endforeach; 16 } 17 ?> 18 </ul>

以上になります。
ご確認お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

php

1 2if (is_category($cat_id 3

ではなくて、

php

1 2if (in_category($cat_id 3

にしてみたらいかがでしょうか?

投稿2020/11/18 00:25

hiok

総合スコア590

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

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

yesma

2020/11/18 01:15

ご確認と回答ありがとうございました! 試してみたところ、クラスが付与されました。 助かりました。ありがとうございます。 ちなみに、このような知識はどの様に身に付けられましたか? wordpressの技術本などでしょうか? お忙しいところ、申し訳がありませんができましたらご回答お願いいたします。
hiok

2020/11/18 01:35

うまくいったようでよかったです。 wordpressの技術本は読んだことないです。 都度ググります。 yesmaさんはオリジナルテーマを作成されるくらいには知識があるようですし、ググるのがよいと思います。 「何をググるのか?」については、 うまくいっていない処理周辺についてググる、 といった感じです。 今回ですと、class="current"がechoされない、という現象に着目して、 (1) echo ' class="current"'; 自体は文法的にも問題ないのでOK (2)ということは、 if (is_category($cat_id)) { がtrueになっていない可能性が高いので (2-1)is_category関数は何を判別する関数なのかググる といった感じです。 is_categoryは「カテゴリーアーカイブが表示されているかチェックする」関数ですから、この関数では目的が達成できなさそうです。 では、 (3)現在の投稿が所属するカテゴリーを判別する方法はあるのか を探します。 今回はたまたまin_categoryが使えそうなので、それでよかったのですが、 そのものずばりの関数が無い時は、処理を自分で書きます。 といった感じで、都度ググりながら、少しずつ知見がたまるという感じです。 ご参考まで。
yesma

2020/11/18 01:49

すごい丁寧に、まとめて下さりありがとうございます。 確かに制作の仕様に合わせて作り変える必要があるので、 ググりながら知識を蓄えるというやり方が、合っていると感じました。 次からは、問題点の分析とググる方法を意識してやってみたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問