我正在使用Wordpress创建自定义页面,需要将查询结果划分为基于标记的列表。我知道有一个Wordpress堆栈交换,但这对我来说似乎更像是一个基本的PHP函数。我在Wordpress堆栈上找到的唯一一件事就是根据标签名称执行新的查询。
必须有一种更有效的方式......
我是PHP的新手。为了使问题进一步复杂化,我一直在努力解决循环问题,但每天都在越来越多地掌握这个概念。
这是我想要实现的逻辑:
查询数据库并获取标有“红色,绿色,蓝色,黄色”的帖子的“标题”。这部分我可以使用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]-->
结束循环
我理解第一个循环会迭代结果并输出所有记录的标题,我只是对如何循环结果并进一步除以颜色感到困惑。
非常感谢任何帮助。
答案 0 :(得分:0)
首先,您可以对从数据库中获得的结果进行排序,只需添加
即可ORDER BY `color` // for MySql at least
如果您希望在一个循环中完成所有操作,代码将变得有点混乱。你必须存储最后一种颜色,并在每次颜色变化时终止+开始一个新的ul
元素。
另一个(更好的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>';
}