0

Wordpress でカスタム ページを作成しており、タグに基づいてクエリ結果をリストに分割する必要があります。Wordpress スタック交換があることは知っていますが、これは基本的な PHP 関数のように思えます。Wordpress スタックで見つけた唯一のものは、タグ名に基づいて新しいクエリを実行するというものでした。

もっと効率的な方法があるはずです...

私はPHPが初めてです。さらに複雑なことに、私は常にループに苦労してきましたが、その概念を毎日ますます理解しています。

私が達成しようとしているロジックは次のとおりです。

DB をクエリして、「赤、緑、青、黄」のタグが付いた投稿の「タイトル」を取得します。この部分はWP_Query()機能的にできるのでそこは問題ないのですが・・・ 困ったのは次の部分です。

クエリと出力をループします。

<ul id="red">
<li>Output title of first post tagged with Red</li>
<li>Output title of second post tagged with Red</li>
<li>Output title of third post tagged with Red</li>
<!--[etc...]-->
</ul>
<ul id="green">
<li>Output title of first post tagged with Greeen</li>
<li>Output title of second post tagged with Green</li>
<li>Output title of third post tagged with Green</li>
<!--[etc...]-->
</ul>
<!--[continue for other colors requested in the query]-->

ループを終了する

結果を反復処理してすべてのレコードのタイトルを出力する最初のループを理解しています。結果をループしてさらに色で分割する方法について混乱しています。

どんな助けでも大歓迎です。

4

1 に答える 1

0

まず、データベースから取得した結果を並べ替えることができます。追加するだけです。

ORDER BY `color` // for MySql at least

これをすべて1つのループで実行しようとしている場合、コードは少し厄介になります。最後の色を保存しul、色が変わるたびに新しい要素を終了して開始する必要があります。

もう1つの(より良いIMO)オプションは、要素をループ内の配列に分類し、ループの後に、各配列の内容を適切にエコーアウトすることです。

$colors = array();
while($row = ..FETCH_MORE_DATA_FROM_DB...){
  if (!is_array($colors[$row['color']])){ 
    $colors[$row['color']] = array(); 
  }
  $colors[$row['color']][] = "<li>{$row['title}</li>";
}

foreach($colors AS $colorName => $elements){
  echo '<ul id="'. $colorName .'">';
  foreach($elements AS $element){
    echo $element;
  }
  echo '</ul>';
}
于 2013-03-12T17:21:42.823 に答える