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

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

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

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

PHP

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

Q&A

解決済

3回答

5102閲覧

条件分岐でページごとに読み込ませるCSSを変えたい

mamamamamama

総合スコア25

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/11/05 04:59

前提・実現したいこと

以下のように外部CSSを読み込ませたいのですが思うようにいかず、頭がごっちゃになってしまいよく分からなくなってしまいました...。
どのように記述したら思うように読み込みできるのかご教授願います!

■希望
トップページ(front-page.php) → base.css
カスタム投稿ページ(アーカイブ・個別ページ共に)→ bace.css、example.css
上記2ページ以外の固定ページ → bace.css、page.css

発生している問題・エラーメッセージ

現在下記のように記述していますが、カスタム投稿ページにもpage.cssが読み込まれてしまいます。

<link href="<?php echo esc_url( home_url( '/' ) ); ?>css/base.css" rel="stylesheet"> <!-- カテゴリ別CSS --> <?php if ( !is_home() && !is_front_page() ) : ?> <link href="<?php echo esc_url( home_url( '/' ) ); ?>css/page.css" rel="stylesheet"> <?php endif; ?> <?php if (is_singular( 'カスタム投稿名' )): ?> <link href="<?php echo esc_url( home_url( '/' ) ); ?>css/example.css" rel="stylesheet"> <?php elseif ( is_page() ) : ?> <link href="<?php echo esc_url( home_url( '/' ) ); ?>css/page.css" rel="stylesheet"> <?php endif; ?>

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

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

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

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

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

kei344

2018/11/05 05:17 編集

(勘違いだったため削除)
guest

回答3

0

ベストアンサー

とりあえず提示のコードを入れ替えました。

PHP

1<?php if ( !is_home() && !is_front_page() ) : ?> 2<?php if (is_singular( 'カスタム投稿名' )): ?> 3<link href="<?php echo esc_url( home_url( '/' ) ); ?>css/example.css" rel="stylesheet"> 4<?php elseif ( is_page() ) : ?> 5<link href="<?php echo esc_url( home_url( '/' ) ); ?>css/page.css" rel="stylesheet"> 6<?php endif; ?> 7<?php endif; ?>

投稿2018/11/05 05:19

kei344

総合スコア69400

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

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

mamamamamama

2018/11/06 01:12

希望が実現できました。今後は自身の頭で考えて記述できるように勉強していきたいと思います。ありがとうございました!
guest

0

まず、トップページの定義があってるか確認してください
条件の判定
WordPressページ

その上で整理します。
①base.cssは絶対使う
②example.cssはカスタム投稿ページの時だけ使う
③page.cssはトップページとカスタム投稿ページ以外で使う

とした場合、現在は
α. if ( !is_home() && !is_front_page() ) : でデフォルトホームページ以外の場合、page.cssを使う
β. if (is_singular( 'カスタム投稿名' )): でカスタム投稿ページの場合、example.cssを使う
カスタム投稿ページ以外で
γ. elseif ( is_page() ) でページの場合page.cssを使う

となっています。

つまり、base.cssは必ず使われ、
トップページでない場合はpage.cssが使われます。

カスタム投稿ページの場合、example.cssと(トップページでは無いので)page.cssが使われます。
固定ページの場合page.cssと(トップページでは無い場合)page.cssが使われます。(二重に使われる)
というふうに現状なっています。

わかりやすいよう書き換えて直します。

<?php $esc = esc_url( home_url( '/' )); $csslinks = array(); //使いたいcssファイルを列挙する配列 $csslinks[] = 'base.css'; if (is_front_page() && is_home()) { // デフォルトホームページでは必ず何も使わない } elseif(is_singular()) { //個別の投稿を表示中で if(is_singular( 'カスタム投稿名' )){ //指定したカスタム投稿ページなら $csslinks[] = 'example.css'; } elseif(is_page()) { //固定ページなら $csslinks[] = 'page.css'; } else { //指定してないカスタム投稿ページと固定ページ以外(添付ページなど) } } else { //上記以外 } ?> <?php foreach($csslinks as $cssname): ?> <link href="<?= $esc ?>css/<?= $cssname ?>" rel="stylesheet"> <?php endforeach; ?>

となります。

投稿2018/11/05 09:55

namda

総合スコア705

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

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

mamamamamama

2018/11/06 01:13

知らなかった記述法など提示くださいまして勉強になりました、ありがとうございました!
guest

0

とりあえずHTMLの中にPHPタグを記述するのを止めて
PHPの中でHTMLを出力するようにしましょう。

また,各関数(esc_url,home_url,is_home,is_front_page,is_singular,is_page)が何をしてくれるのか,何を返す関数なのか分からないためプログラムが正しいかどうかは判断しかねます。
それぞれの関数はバグ無く意図通りに動いていますか?

適当にPHPベースの記法にしてみましたので見直してみて下さい。
(再現出来てなかったらゴメンナサイ)

PHP

1<?php 2// それぞれの関数の戻り値を一旦出力,どれも正しく動いているか? 3echo '<pre>' . 4 json_encode( 5 [ 6 'home_url' => $homeUrl = home_url('/'), 7 'esc_url' => esc_url($homeUrl), 8 'is_home' => is_home(), 9 'is_front_page' => is_front_page(), 10 'is_singular' => is_singular('カスタム投稿名'), 11 'is_page' => is_page(), 12 ], JSON_PRETTY_PRINT) . 13 '</pre>'; 14 15$escUrl = esc_url(home_url('/')); 16 17echo "<link href = \"{$escUrl}css/base.css\" rel = \"stylesheet\">"; 18 19// カテゴリ別CSS 20 21if (!is_home() && !is_front_page()) { 22 echo "<link href = \"{$escUrl}css/page.css\" rel = \"stylesheet\">"; 23} 24 25if (is_singular('カスタム投稿名')) { 26 echo "<link href = \"{$escUrl}css/example.css\" rel = \"stylesheet\">"; 27} elseif (is_page()) { 28 echo "<link href = \"{$escUrl}css/page.css\" rel = \"stylesheet\">"; 29}

投稿2018/11/05 06:52

YuusukeYama

総合スコア38

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

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

mamamamamama

2018/11/06 01:13

勉強になりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問