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

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

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

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

PHP

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

Q&A

解決済

2回答

3677閲覧

WordPressのfunctions.phpでの記事毎に別々のCSS読み込み

hirokuro900

総合スコア33

WordPress

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

PHP

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

1グッド

1クリップ

投稿2019/12/03 05:35

functions.phpの条件分岐を少しスッキリとさせたいです。
現在はWordPressのfunctions.phpで固定ページごとに違う種類のcssをif文で読み込んでいます。

PHP

1function pages_styles() { 2 if ( is_page('aaa')){ 3 wp_enqueue_style( 'aaa-style', get_template_directory_uri() . '/css/aaa.css', array()); 4 } 5 if ( is_page('bbb')){ 6 wp_enqueue_style( 'bbb-style', get_template_directory_uri() . '/css/bbb.css', array()); 7 } 8} 9add_action( 'wp_enqueue_scripts', 'pages_styles' );

この方法だとうまくいくのですが、switch文などを使うとうまくいきません..

PHP

1function pages_styles() { 2 switch ( is_page($slug)) { 3 case $slug = 'aaa': 4 wp_enqueue_style( 'aaa-style', get_template_directory_uri() . '/css/aaa.css', array()); 5 break; 6 7 case $slug = 'bbb': 8 wp_enqueue_style( 'bbb-style', get_template_directory_uri() . '/css/bbb.css', array()); 9 break; 10 11 default: 12 wp_enqueue_style( 'style', get_template_directory_uri() . '/css/style.css', array()); 13 break; 14 } 15} 16add_action( 'wp_enqueue_scripts', 'pages_styles' );

このswitch文だとどのページでもaaa.cssを読み込んでしまいます。
予定の動作は、
・aaaのページではaaaのみ
・bbbのページではbbbのみ
を読み込んでもらう予定でした。

他の方法でも良いのですが個別CSSの読み込みをもう少しスッキリと記述する方法は
ありませんでしょうか?

gorimaz👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

switchの使い方が間違ってます

php

1if(is_page($slug)){ 2 switch ($slug) { 3 case 'aaa':....;break; 4 case 'bbb':....;break; 5 default:.....; 6 } 7}

シンプルにするなら

php

1if(in_array($slug,['aaa','bbb'],true)){ 2 wp_enqueue_style( $slug.'-style', get_template_directory_uri() . '/css/'.$slug.'.css', []); 3} 4else{ 5 ... 6}

柔軟に スラッグに対応するcssがあれば読み込み

php

1if(file_exists(get_template_directory().'/css/'.$slug.'.css')){ 2 wp_enqueue_style( $slug.'-style', get_template_directory_uri() . '/css/'.$slug.'.css', []); 3} 4else{ 5 .... 6}

追記

もしかして・・・

php

1switch(true){ 2 case ($hoge=='fuga'):...;break; 3 case ($hoge=='piyo'):...;break; 4 ... 5}

みたいなTips使おうとしてましたかね

とすればswitchの使い方が間違っているではなく
同値判定は=でなく==
is_page($slug)がfalseだったらどうするの
ってところが問題ですね

しかしこのTipsの使いどころではないとも思いますが


switchの使い方が違うってとこだけ言ってましたが
そもそも$slugって変数はどっから湧いて出たのか
って問題もあります

多分

php

1$slug=$GLOBALS['post']->post_name;

みたいなコードが抜けてます

投稿2019/12/03 05:50

編集2019/12/03 11:23
KazuhiroHatano

総合スコア7804

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

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

hirokuro900

2019/12/03 11:09

貴重なご回答ありがとうございますm(_ _)m 現在色々検証をしているのですが、 function pages_styles() { if (is_page($slug)) { if(in_array($slug,['aaa,'bbb'],true)){ wp_enqueue_style( $slug.'-style', get_template_directory_uri() . '/css/'.$slug.'.css', []); } } } add_action( 'wp_enqueue_scripts', 'pages_styles' ); と function pages_styles() { if(in_array($slug,['aaa','bbb'],true)){ wp_enqueue_style( $slug.'-style', get_template_directory_uri() . '/css/'.$slug.'.css', []); } } add_action( 'wp_enqueue_scripts', 'pages_styles' ); など色々試しているのですがCSSは読み込まれないです.. エラーにはなっていなくて、cssのファイル名などは確認しているので記述ミスはないと思うのですが、他にも何か記述が必要なのでしょうか?
hirokuro900

2019/12/03 11:51

お恥ずかしながら、何も定義せずにいきなりifのところから使い初めていました..すみません。 いただいた情報を元に調べながら頑張ってみます! ありがとうございますm(_ _)m
hirokuro900

2019/12/03 12:19

貴重なお知恵を貸していただきとても感謝しています!本当にありがとうございますm(_ _)m 僕一人ではとてもじゃないですが、見つけ出す事はできませんでした。 初心者の方で困っている方がいらっしゃるかもしれないので今回の「特定の固定ページに特定のCSSを読み込む方法」を記載させていだきます。 //functions.php(親テーマを直接編集していますので子テーマの場合はget_template_directory_uri()が変わります。) function page_styles() { //スラッグを定義 $slug=$GLOBALS['post']->post_name; //もし固定ページだったら if (is_page($slug)) { switch ($slug) { case 'AAA': //スラッグ名 wp_enqueue_style( $slug.'-style', get_template_directory_uri() . '/css/'.$slug.'.css?' . date("Y-m-d-His", filemtime( get_template_directory() . '/css/'.$slug.'.css')), array()); // AAA固定ページ専用のJS読み込み wp_enqueue_script( $slug.'-js', get_template_directory_uri() . '/js/'.$slug.'.js' ,array(), '1.0', true); break; case 'BBB': wp_enqueue_style( $slug.'-style', get_template_directory_uri() . '/library/css/'.$slug.'.css?' . date("Y-m-d-His", filemtime( get_template_directory() . '/library/css/'.$slug.'.css')), array()); break; } } add_action( 'wp_enqueue_scripts', 'page_styles' ); cssファイル名に毎回日付を付け足してスーパーリロード対策をしています。 jsもオリジナルのファイルを読み込んでいます。 ご回答をしてくださった先輩方にとても感謝しています!ありがとうございました。
guest

0

switchの使い方が間違っています。
switchでやるのであれば、現在のページのスラッグを取得、それをもとにcaseを作っていきます。

PHP

1switch ($i) { 2 case "apple": 3 echo "i is apple"; 4 break; 5 case "bar": 6 echo "i is bar"; 7 break; 8 case "cake": 9 echo "i is cake"; 10 break; 11}

例えばこれなら、$iにapple、bar、cakeのいずれかが入る前提です。
同じようにswitch()に開いているページのスラッグ名を入れ、caseにそれぞれのパターンを入れれば実現可能です。


別方向からのアプローチとして、カスタムフィールドを使う方法もあるようです。
WordPress 固定ページごとにCSSを読み込ませる方法

投稿2019/12/03 05:42

Takumiboo

総合スコア2534

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問