我正在尝试按元键对帖子进行分组。到目前为止,我能够用meta键(“分组”)显示所有帖子,但它列出了每个帖子的分组。
我想要实现的是将分组列为标题,然后将所有包含该分组的帖子列在标题下。
例如:
圣诞节后1至7日爵士乐后8至9日。。。等等“圣诞节”、“当代”和“爵士乐”是“分组”的元价值观。
这是我当前的循环:
<ul>
<?php $args = array(
// \'post_parent\' => $post->ID,
\'post_type\' => \'attachment\',
\'post_mime_type\' => array(\'audio/midi\', \'zip\'),
\'numberposts\' => -1,
\'meta_key\' => \'grouping\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\',
);
$posts = get_posts($args);
if( $posts ): ?>
<ul>
<?php foreach( $posts as $post ):
setup_postdata( $post );
$grouping = get_field(\'grouping\');
?>
<?php if ($grouping == $grouping ) { ?>
<h2><?php echo $grouping; ?></h2>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php } ?>
<?php endforeach; ?>
</ul>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
返回如下内容:
圣诞节,我完全理解我们三个国王的圣诞节。我似乎不知道如何通过“分组”元键对帖子进行分组。我做错了什么?
谢谢
最合适的回答,由SO网友:Benjamin Love 整理而成
这实际上是一个php/html问题,因为这个问题出现在Wordpress之外。您要做的是对照前一个检查当前的元名称,如果它不同,那么您将回显标题。你已经一次完成了所有需要的帖子,所以这就像:
$currentGroup = "";
foreach ($posts as $post) {
setup_postdata($post);
$grouping = get_field(\'grouping\');
if ($grouping != $currentGroup) {
if ($currentGroup != "") {
echo "</ul>";
}
echo "<h2>" . $grouping . "</h2><ul>";
}
$currentGroup = $grouping;
echo "<li><a href=\'" . the_permalink() . "\'>" . the_title() . "</a></li>";
}
干杯。