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

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

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

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

PHP

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

Q&A

解決済

1回答

374閲覧

WordPress PHP 1ループ毎に2カテゴリーを出したい

TomoEno

総合スコア53

WordPress

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

PHP

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

0グッド

0クリップ

投稿2022/06/02 12:41

以下の表示をイメージしておりますが、どの様に行ったら良いのかわかりません。

カテゴリーが全て6つと仮定します。

HTML

1<div class='box'><p>カテゴリー1</p><p>カテゴリー2</p></div> 2<div class='box'><p>カテゴリー3</p><p>カテゴリー4</p></div> 3<div class='box'><p>カテゴリー5</p><p>カテゴリー6</p></div>

以下の様にやるとカテゴリー1と2しか表示されません。

PHP(WordPress)

1<?php $categories = get_categories();foreach ($categories as $category):?> 2 <div class="sheif"><!-- genre 1 --> 3 <div class="sheif__inner"> 4 </div> 5 <div class="sheif__body"> 6 <?php $categories = get_categories(); $x=1; $num=3; foreach ($categories as $category): ?> 7 <?php if( $x>=$num ) { break; } else { ?> 8 <div class="sheif__book"> 9 <a href="<?php echo esc_url(get_category_link($category->term_id)); ?>" class="book-btn"> 10 <img src="<?php echo z_taxonomy_image_url($category->term_id); ?>" alt=""> 11 </a> 12 <a href="<?php echo esc_url(get_category_link($category->term_id)); ?>" class="bar-genre"> 13 <p><?php echo $category->name; ?></p> 14 </a> 15 </div> 16 <?php } $x++ ; ?> 17 <?php endforeach; ?> 18 </div> 19 <div class="sheif__side-bar"> 20 <p>ジャンルメニュー</p> 21 </div> 22 </div><!-- genre 1 --> 23 <?php endforeach; ?>

何か良い方法がございましたら、教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

同じ環境が用意できないのでそのまま動くソースは回答できませんが、
考え方としてはこんな感じです。

  1. 質問中の$x$numでやろうとしていること(ループの回数を把握しているのだと推測します)は、foreachで配列のインデックスを変数にコピーすることで賄える。また、foreachは一回でよくなる
  2. 質問のHTMLを出力するには、ループが偶数回の時はループの先頭に<div>を、ループが奇数回の時は末尾に</div>を付与すると考えられる

PHP

1<?php 2 3$categories = ["カテゴリー1","カテゴリー2","カテゴリー3","カテゴリー4","カテゴリー5","カテゴリー6"]; 4 5foreach($categories as $key => $category){ //こう書くと、foreachは単純配列のインデックスを$keyにコピーする 6 if($key % 2 === 0){ //インデックスを2で割った余りが0の時=偶数の時は<p>の前に<box>を描画 7 echo "<div class='box'>"; 8 } 9 echo "<p>".$category."</p>"; 10 if($key % 2 === 1){//インデックスを2で割った余りが1の時=奇数の時は<p>の後<box>を描画 11 echo "</div>"; 12 } 13 14} 15

結果

HTML

1<div class='box'><p>カテゴリー1</p><p>カテゴリー2</p></div><div class='box'><p>カテゴリー3</p><p>カテゴリー4</p></div><div class='box'><p>カテゴリー5</p><p>カテゴリー6</p></div>

質問中のソースより単純に記述できるので、WordPressで動くように調整できるんじゃないかなと思います。
(回答の範囲で不明なところがあればコメントで質問ください)

投稿2022/06/03 05:35

編集2022/06/03 06:15
tanat

総合スコア18713

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

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

TomoEno

2022/06/03 05:53

ご回答ありがとうございます。 コードの意味合いはわかりますが、自分が行いたいことと少し違うと存じます。 イメージとしては、1つの棚に2つのカテゴリー写真を表示して、カテゴリーの数だけ棚が陳列しているというイメージです。(本屋さんが本を棚で正面に飾っている感じ) なので、カテゴリー/2ごとに棚があって、棚の中には2個ずつカテゴリーが入ると、ループが二つになるのではないのでしょうか。 また、PHP初心者なので、ループの中にまた<?php 写真を表示する&リンクにつながる処理 ?>があるので、echo処理だと文字列としてhtmlタグを用意しても、htmlタグ内のsrcやhref内に記載したPHP処理が機能しなくなってしまいます。
tanat

2022/06/03 06:11

> なので、カテゴリー/2ごとに棚があって、棚の中には2個ずつカテゴリーが入ると、ループが二つになるのではないのでしょうか。 うーん、get_categories()で取得される配列を使って、質問の冒頭に記載のHTMLを実現したいのですよね? 回答中に出力されているHTMLは希望通りになっていますが、どの辺が違いますか?(boxタグは誤記なのでdivタグに修正しました) > また、PHP初心者なので、ループの中にまた<?php 写真を表示する&リンクにつながる処理 ?>があるので、echo処理だと文字列としてhtmlタグを用意しても、htmlタグ内のsrcやhref内に記載したPHP処理が機能しなくなってしまいます。 この辺はまずは単純な形で記述できるようになってから、質問中のWordPressのコードに合わせて調整するのがいいと思いますよ。
tanat

2022/06/03 06:47

> なので、カテゴリー/2ごとに棚があって、棚の中には2個ずつカテゴリーが入ると、ループが二つになるのではないのでしょうか。 このアプローチも可能ですが、その場合は先に配列を二次元配列に組み替えてから二重ループで処理する感じになりますね。 質問中のコードだと、二重ループの中のループで毎回新しいカテゴリー一覧を取得してしまっているので、先頭のカテゴリー1と2しか表示できないことになっています。
TomoEno

2022/06/03 07:12

かしこまりました。もう少し勉強して試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問