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

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

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

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

PHP

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

Q&A

解決済

1回答

1595閲覧

特定のカテゴリ一覧ページだけ指定のbodyIDを追加したい

mamamamamama

総合スコア25

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/11/08 03:01

前提・実現したいこと

特定のカテゴリ一覧ページだけ指定のbodyIDを追加したいのですが、どのように記載したらよいか分からず質問させていただきました。
現在は、<body id="<?php echo esc_attr( $post->post_name ); ?>" <?php body_class(); ?>>
のように記載し、スラッグ名がIDとして追加される表記になっています。

特定のカテゴリ一覧ページ(category-スラッグ.php)ですとbodyIDが「<body id="%e3%81%8a%e7%9f%a5%e3%82%89%e3%81%9b">」のように出力されてしまい指定のCSSを反映することができません。

スラッグ名をIDとして追加することはこのまま残しつつ、特定のカテゴリ一覧ページに指定のIDを付与するにはどのようにしたら良いでしょうか?
dodyに追加する形でもfunction.phpに追加する形でも構いません。

記述の仕方をお教え願います!

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

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

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

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

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

marlboro_tata

2018/11/08 03:35

id="" の値は、複数指定することはできません。class="" の値に、category-1 などと追加することなら可能と考えますが、すでにデフォルトで記載されるんじゃなかったかなと記憶しております。
marlboro_tata

2018/11/08 03:39

蛇足ですが、<?php echo esc_attr( $post->post_name ); ?> をカテゴリーアーカイブで表示した場合、そのカテゴリの最新の投稿のスラッグが表示されるはずですね。カテゴリのスラッグを表示しているのではなさそうだなーと思っております。
mamamamamama

2018/11/08 03:55

id="" の値は、複数指定することはできません>>はっ、そうでした...すみません...。となると、class="" の値に、category-1~と表示したいです。「デフォルトで記載」とはどういった意味合いでしょうか?読解力がなくてすみません...
marlboro_tata

2018/11/08 06:26

「デフォルトで記載」というのは、特別に何か設定をしなくても、<?php body_class(); ?> が、いい感じに、今回のような場合に使えそうなclass="" の値を吐き出しているはずだなと、思った次第です。
mamamamamama

2018/11/08 06:39

なるほど!理解いたしました!
guest

回答1

0

ベストアンサー

(なんかあんまり表現がうまくなくて申し訳ないのですが)

header.phpテンプレートなどに

PHP

1<body <?php body_class(); ?>>

と、記載がある場合、<body> タグの class 属性として、 category-[タームのID] というクラス名は、特段何か設定しなくても、出力されていたように記憶しております。

<?php body_class(); ?> を使わずに、ということでしたら、

PHP

1<?php 2 $add_class = '';//特定カテゴリ以外で変数が定義されていないエラーが出るのを防ぐためなので必須 3 if(is_category('hoge')){ //'hoge'は特定のカテゴリのIDやスラッグ名 4 $add_class = 'category-'. $cat; 5 } 6?> 7<body class="<?php echo $add_class;?>">

こんな感じで、実現できると思います。

投稿2018/11/08 06:37

編集2018/11/09 01:34
marlboro_tata

総合スコア525

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

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

mamamamamama

2018/11/09 01:15

回答いただきました内容も参考に下記のコードで(汚いかもしれませんが...)実現できました! <?php if (is_category('カテゴリースラッグ')){ $term = get_queried_object(); $body_class = $term->slug ; } ?> <body id="<?php echo esc_attr( $post->post_name ); ?>" <?php echo ' class="' . $body_class . '"'; ?>>
marlboro_tata

2018/11/09 01:33

if文の前に、$body_class =''; を入れておかれることをおすすめします。 そうでないと、特定のカテゴリーのページ以外では $body_class の値が空になってしまうので、<body>のなかでechoできなくなるので、何らかエラーが発生するはずです。
mamamamamama

2018/11/09 01:37

そうなのですね!早速追加します。ご丁寧にありがとうございました!
mamamamamama

2018/11/09 01:42

えっと...すみません。if文の前に、$body_class =''; を入れるというのは...十番を入れ替えて<?php $body_class = $term->slug ; if (is_category('info')){ $term = get_queried_object(); } ということでしょうか。無知すぎてすみません...
marlboro_tata

2018/11/09 01:45

<?php $body_class =''; if (is_category('カテゴリースラッグ')){ $term = get_queried_object(); $body_class = $term->slug ; } ?> こうですね。
mamamamamama

2018/11/09 01:49

なるほどです...たびたびありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問