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

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

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

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

PHP

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

Q&A

解決済

2回答

5077閲覧

PHPでif文をループで記述する方法

umauman

総合スコア57

WordPress

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

PHP

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

0グッド

1クリップ

投稿2016/12/25 03:25

WordPressで下記条件文を100個ほど記述しなければならないのですが、ループを使って記述するにはどうしたら良いのでしょうか。
forやwhile文で試行錯誤してみましたが実現する方法がわからず困っています。

php

1 2if(is_category('1')): 3 $hoge = '1'; 4elseif(is_category('2')): 5 $hoge = '2'; 6elseif(is_category('3')): 7 $hoge = '3'; 8 9//これが100個ほど続く… 10 11endif; 12 13//このあと変数を使用した処理 14

やりたいことは、100個ほどカテゴリー用の変数を定義してその後にその変数を使用した処理を行うことです。
今のところ上記の記述で動作はできています。

ただ、今後多くカテゴリー追加が見込まれるため100個ほど記述しておく必要があり、できればループ等で記述できればと思っています。

下記のような感じで試行錯誤していますが文法エラーが出続けます…

if(is_category('1')): $hoge = '1'; for ($i=2; $i < 100; $i++) { //この中で「elseif」以降の記述を試行錯誤 } endif;

初心者ゆえ、何かを根本的に間違えている可能性が大きいのですが
どうぞよろしくお願いいたします。
(例えばループ以外実現できたりするのでしょうか…)

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

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

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

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

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

guest

回答2

0

ベストアンサー

is_category は引数に配列をとることができます。

PHP

1if ( is_category( array( 1, 3, 5, 7, 9 ) ) ) { 2 $tmp = $cat; // category ID 3}

【is_category() | Function | WordPress Developer Resources】
https://developer.wordpress.org/reference/functions/is_category/

【現在のカテゴリーIDを取得する8種の方法 ? WordPress Snippet】
http://tenman.info/labo/snip/archives/7741


追記:

色々なものが動かない理由がいまいち掴めませんが、ループでis_categoryするのであれば下記のようにすれば出来ると思います。

PHP

1foreach ( array( 1, 2, 3, 4, 5,) as $tmp_cat_id ) { 2 if ( !is_category( $tmp_cat_id ) ) { continue; } 3 $hoge = $tmp_cat_id; 4}

投稿2016/12/25 04:57

編集2016/12/25 16:47
kei344

総合スコア69407

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

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

umauman

2016/12/25 06:12

回答と参考サイトありがとうございます! 配列であれば、100個でも苦痛なく記述できそうです。とても勉強になりました。 ただ、カテゴリー毎の変数を定義する部分の記述をどのようにしたら良いのでしょうか。 if ( is_category( array( 1, 2, 3, 4, 5,… ) ) ) { $hoge = $cat; } 上記では動作せず、「$hoge = $cat;」の部分をarrayのIDと対応させて $hoge ='1'; $hoge ='2'; $hoge ='3' と出力するにはどうしたら良いのでしょうか。 何度も申し訳ございません。
kei344

2016/12/25 07:43

カテゴリアーカイブでは $cat に id が入っているのですが、どこか違う場所で処理されているのでしょうか。提示したサイト( http://tenman.info/labo/snip/archives/7741 )にカテゴリIDの取得方法がいくつか書いてあるので、それを試してみてください。
umauman

2016/12/25 12:27

再度のご回答ありがとうございます! $categories = get_the_category(); を使用しており、 これが問題を引き起こしていたようです。 教えていただきました参考サイトにカテゴリーページに使用すると 問題が起きる可能性がある旨書かれておりました。 こちらをコメントアウトしたところ、動作するようになりました!とても嬉しいです。 ただ今度は別の問題が… 実は、 ・カテゴリーの文字列を操作したい ・カテゴリースラッグを取得したい という理由から、the_category();を使用せず 下記のようにカテゴリー名称/リンク、スラッグを取得しておりました。 $categories = get_the_category(); $categories_id = $categories[0]->cat_ID; $categories_name = $categories[0]->name; $categories_slug = $categories[0]->category_nicename; $categories_link = get_category_link($categories_id); $categories = get_the_category(); をコメントアウトすることにより これらが機能しなくなってしまいました。 カテゴリー名称は、single_cat_title等、別の方法で試しているところですが なかなかうまくいきません。 マナーとしては恐らく別の質問とするべきなのかもしれませんが、 引き続き苦戦しており、再度お答えをいただければとても助かります。 ランキングがすごい方でいらっしゃるので… わがままなお願いで本当に申し訳ございません。 もし、別質問にする必要ありましたらその旨遠慮なくおっしゃってください。
kei344

2016/12/25 13:04

> $categories = get_the_category(); 今回のものとは関係ないと思いますが、$categories など使われそうな変数名を避けたほうがよいと思います。 get_the_category() で事前に取得しているのであれば、そのまま使えば良いと思います。 if ( is_category( array( 1, 2, 3, 4, 5,… ) ) ) { $hoge = $categories_id; } というか事前に取得しているのであれば、is_category にこだわる必要も無いでしょう。 if ( in_array( $categories_id, array( 1, 2, 3, 4, 5,… ), true ) ) { $hoge = $categories_id; } 【PHP: in_array - Manual】 http://php.net/manual/ja/function.in-array.php > ランキング マメに回答していればいずれ上がるものなので、残念ながらランキングと技術力は相関しませんよー。
umauman

2016/12/25 14:56

何度も本当にすみません。 変数名にも留意するようにいたします。 教えていただいた「in_array」の判定で、ほぼ実現できるようになったのですが、 もう後一息な感じです… 最初の質問のendif;の後の「//このあと変数を使用した処理」の部分が、 投稿数が「0」のカテゴリーの場合実行されない事象が起こってしまいます。 【パターンA】投稿数「0」の場合でも実行される if ( is_category( array( 1, 2, 3, 4, 5,… ) ) ) { $hoge = $cat; } ※しかし「get_the_category();」と干渉 【パターンB】投稿数「0」の場合実行されない if ( in_array( $categories_id, array( 1, 2, 3, 4, 5,… ), true ) ) { $hoge = $categories_id; } 最初の質問の通り「if文をループで記述する」(といいつつ方法がわからない) くらいしか解決策が思いつかないのですが、何か手立てはありますでしょうか。 カテゴリーは追加したり、消去したり、欠番になったりするので ご教授いただいた配列の手法が気に入っているのですが…。 実は本日はじめてこちらのサイトを利用を開始したこともあり(最初の質問になります) 勝手もわかっておらずご迷惑をおかけしております…
kei344

2016/12/25 15:53

get_the_category() を get_queried_object() に変えてみても同じですか?
umauman

2016/12/25 16:38

何度もありがとうございます。 単純に「get_queried_object();」に変更するだけでは「Fatal Error: Cannot use object of type WP_Term as array in…on line 16」になってしまいました… 16行目:$categories_id = $cat[0]->cat_ID; 先に教えていただいたサイト等を参考にしつつ「get_the_category();」以外でカテゴリーページでカテゴリー名称、リンク、スラッグを取得する方法をもうちょっと調べてみます。 遅い時間まで本当にすみませんでした。
kei344

2016/12/25 20:10

$categories_id = $tmp_cat>term_id;
umauman

2016/12/26 08:37

ループの追記、本当にありがとうございます。 ($categories_id = $tmp_cat>term_id;でも難しかったので…) 先に必要なID分の配列を作って…は目からウロコでした。 これだと不要になったIDも削除できますし、最初にご提案いただいた if ( is_category( array( 1, 2, 3, 4, 5,… ) )と同等のメリットがありますね。 ただ、いただいたソースそのままでは動作せず、下記でやっと動くようになりました。 $idArray = array(1, 2, 3, 4, 5,…); //カテゴリーID foreach ( $idArray as $tmp_cat_id ) { if ( is_category( $tmp_cat_id )): $hoge = $tmp_cat_id; endif; } 上記の記述、もっとスマートな記述がありますでしょうか。 「continue;」の使い方を調べてみましたがすぐには理解できず… (最後に「endif;」を加えてみたら動作するかと思ったのですが) 最初の質問から脱線してしまい申し訳ございませんでした。 「もっとスマートな記述…」の部分だけ少しお返事を待って 本日中に質問を締め切るようにいたします。 (お忙しい場合はお返事大丈夫です。)
kei344

2016/12/26 09:26

continue は PHP の解説書にも載っていると思いますので、そのあたりを御覧ください。 「スマートな」というのであれば get_queried_object を使う方法を動くようにするほうがスマートなので、自分で組むならそうします。また、そこまで変なコードだとは思いません。
umauman

2016/12/26 10:07

再度のご返信ありがとうございます。 一旦は動作するようになったという担保ができましたので 引き続き「get_queried_object」等で実現できるか頑張ってみます。 この度はつたない質問に根気よくお付き合いいただき、感謝の気持ちでいっぱいです。 本当にありがとうございました!!
umauman

2016/12/27 13:38

get_queried_object();で何とかいけました。 自己解決…ではないのですが、自己解決欄に一式まとめました。 今回、色々と勉強になりました。ありがとうございました。
guest

0

■ループで取得する方法

php

1 $idArray = array(1,3,5,); //カテゴリIDの配列 2 foreach ($idArray as $tmp_cat_id) { 3 if (is_category( $tmp_cat_id)): 4 $hoge = $tmp_cat_id; 5 endif; 6 }

■配列で取得する方法

php

1if ( is_category(array(1,3,5,))) { 2$hoge = $cat; 3}

■get_queried_object();でカテゴリー名称/リンク、スラッグを取得する方法
※配列がなぜかget_the_category();と干渉したため

php

1$categories = get_queried_object(); 2$categories_id = $categories -> cat_ID; // ID取得 3$categories_name = $categories -> cat_name; // カテゴリー名 4$categories_slug = $categories -> category_nicename; // スラッグ 5$categories_link = get_category_link($categories_id); // リンクURL

投稿2016/12/27 13:37

編集2016/12/27 13:43
umauman

総合スコア57

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問