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

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

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

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1267閲覧

wordpressで特定条件の文字列が含まれるURLにクラスを追加したい

Yui_note

総合スコア15

WordPress

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/08/25 17:19

前提・実現したいこと

WordPressで、投稿ページにカテゴリ一覧のリンクを作っています。
カテゴリー一覧ページ内に、カテゴリーリンクと全ての記事を表示させる「ALL」カテゴリリンクを追加し、
そのリンクと現在表示しているページ名が一緒であれば、
カレントクラスを追加しようとしていたのですが、どうしてもうまくいきません。

該当のソースコード

php

1<ul class="category-list"> 2 <li><a href="<?php echo home_url(); ?>/news">ALL</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>

試したこと

WordPressで「wp_list_categories」を使いカテゴリ名の出力とそこにカレントリンクを追加することはできましたが、カテゴリにない「ALL」カテゴリを追加し、そこに同じ様にカレントリンクを追加する方法がわかりません。

補足情報(FW/ツールのバージョンなど)

WordPress バージョン 5.2.2
PHP7.2.17

JSでも、「if(document.URL.match」で文字列を判定する方法も試してみましたが、
「news」タグが全てのリンク内に含まれるので、
他のリンクの場合にもnewsのカレントクラスが外れない状態になっています。

もし何か解決方法を少しでもご存知の方がいらっしゃいましたら、
お力をお貸しいただきたいです。

どうぞよろしくお願いいたします。

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

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

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

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

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

kei344

2019/08/25 17:23

「news/」は固定ページですか?
Yui_note

2019/08/25 17:37

はい、固定ページです。 投稿記事一覧を「home.php」で作成し、表示させております。
guest

回答1

0

ベストアンサー

is_categoryで分岐しているように、is_pageで分岐すればよいのではないでしょうか。

【is_page – WordPress私的マニュアル】
https://elearn.jp/wpman/function/is_page.html

【WordPressで特定の固定ページにだけ表示させる場合に使う「is_page」 | delaymania】
https://delaymania.com/201508/wordpress/wordpress-is-page/

投稿2019/08/25 17:45

kei344

総合スコア69407

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

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

Yui_note

2019/08/25 18:04

参考URLとアドバイスありがとうございます。 すみません、WordPressにあまり詳しくないもので、 もう少し具体的にどういったコードを書いたらいいかアドバイスいただけないでしょうか。 どうぞよろしくお願いいたします。
kei344

2019/08/25 18:08

WordPress独自の物は関数( is_page )程度で、後はPHPがわかれば特に問題が無いかなと思います。参考にあげたページに分岐方法が書いてあるので、それと同じように分岐をすればいいですよ。
Yui_note

2019/08/26 00:45 編集

ありがとうございます。 参考サイトを元に、以下の様に修正してみましたが、 今度は「ALL」以外のカテゴリが表示されなくなってしまいました。 <ul class="category-list"> <?php if(is_page( 'news' )): ?> <li><a href="<?php echo home_url(); ?>/news" class="current">ALL</a></li> <?php else: ?> <li><a href="<?php echo home_url(); ?>/news">ALL</a></li> <?php endif; ?> <?php $categories = get_categories('hide_empty=1&title_li='); if (is_array($categories)) { foreach($categories as $category): $cat_id = $category->cat_ID; $cat_title = $category->cat_name; $cat_url = get_category_link($cat_id); echo "<li"; if (is_category($cat_id)) { echo ' class="current"'; } else if (is_page($cat_id)) echo '><a href="'.$cat_url.'" title="'.$cat_title.'">'.$cat_title.'</a></li>'; endforeach; } ?> </ul> is_pageを使用して、同じ様に分岐させたつもりですが 上記コードではどこが問題なのでしょうか。。 度々お手数をおかけいたし申し訳ありません.. もう少しだけお力お貸しいただけないでしょうか。 どうぞよろしくお願いいたします。
kei344

2019/08/26 00:38

そのコードで特に問題は見当たりません。 エラーが出ていないか、デバッグモードで確認してみてください。 【WordPress初心者におすすめ!デバッグモードの使い方 | Mignon Style】 http://mignonstyle.com/debug-mode/
Yui_note

2019/08/26 01:42

ありがとうございます。 解決いたしました。 うまくいっていなかった原因は、条件分岐の書き方の部分で、 固定ページ(is_page)ではなく実際はホーム(is_home)でした。 newsは固定ページに作ったページでしたが、 表示設定で「投稿ページ」に指定したいた関係で(?) https://gyazo.com/cc31bbf050fa5828c650ca0372972cf5 ホーム扱いになっていたのかな・・と思います。 この辺りはもう少し勉強したいですが、 ページ種別の判別から入れる方法は思いつきませんでしたので アドバイスとても助かりました。 ありがとうございました。
kei344

2019/08/26 01:44

「カテゴリが表示されなくなる」のは解決しているのでしょうか。
Yui_note

2019/08/26 01:50

カテゴリ表示の部分も解決いたしました。 そこは単純にコードミスでした。 「else if (is_page($cat_id))」の部分を削除し、 <?php $categories = get_categories('hide_empty=1&title_li='); if (is_array($categories)) { foreach($categories as $category): $cat_id = $category->cat_ID; $cat_title = $category->cat_name; $cat_url = get_category_link($cat_id); echo "<li"; if (is_category($cat_id)) { echo ' class="current"'; } echo '><a href="'.$cat_url.'" title="'.$cat_title.'">'.$cat_title.'</a></li>'; endforeach; } ?> としたところ、無事表示されました。
kei344

2019/08/26 02:01

ああ、そこも書き換えていたのですね、見落としていました、すみません。
Yui_note

2019/08/26 02:04

とんでもないです。 手当たり次第にコード書いてましたので、すみません..。 アドバイス助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問