如何对帖子进行分组,并获得帖子和群组的混合视图?

时间:2015-02-11 作者:thomascharbit

假设我需要在WordPress中实现以下功能:

我有一首名为“song”的CPT,是来自不同艺术家的单曲。有时歌曲可以按专辑分组,但并不总是这样。

然后我想在我的主页上显示最新版本,如:

LATEST RELEASES

<歌曲1、歌曲2、歌曲3、专辑1、歌曲4、歌曲7、歌曲9、歌曲6、歌曲8、歌曲10等。。

因此,规则是显示所有帖子,从最新到最旧,但如果它们属于一个组,则显示该组,使用组中的最新帖子日期将该组与其他帖子排序。

你看到如何在WordPress中创建这个了吗?使用CTP+自定义分类法?还是2张CPT(1张专辑,1首歌曲)?

我过去使用2张CPT(1张专辑,1首歌曲)完成了这项工作:

您可以将任意数量的歌曲添加到相册中(使用ACF,在save\\u post操作中,我向每个子项添加了一个“parent\\u id”自定义字段,其中包含…parent post id。然后,我可以通过WP\\u查询来实现这一点,该查询要求两个CPT,但排除了带有cusom字段“parent\\u id”的帖子设置

这是一种很常见的模式,但我找不到正确的方法:(

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

自定义分类法非常有意义-希望我没有遗漏什么:

$songs = get_posts(
    array(
        \'post_type\' => \'song\',
    )
);

$index = array(); // Build an album_id => songs index
foreach ( $songs as $song ) {
    if ( $albums = get_the_terms( $song->ID, \'album\' ) )
        $index[ $albums[0]->term_id ][] = $song;
    else
        $index[ count( $index ) - 1 ][] = $song; // All on it\'s own. Negative index will not clash with album ID
}

echo \'<ul class="songs">\';
foreach ( $index as $album_id => $songs ) {
    if ( count( $songs ) > 1 ) // More than one song in this album?
        echo \'<li class="album">\' . get_term_field( \'name\', $album_id, \'album\' ) . \'<ul>\';

    foreach ( $songs as $song )
        echo \'<li>\' . get_the_title( $song ) . \'</li>\';

    if ( count( $songs ) > 1 )
        echo \'</ul></li>\';
}
echo \'</ul>\';
$index 将继承$songs 然而,他们受到了质疑。当歌曲属于某个唱片集时,该唱片集中的任何后续歌曲都会添加到堆栈中&;将出现在第一首歌曲索引的嵌套列表中。

结束

相关推荐

如何对帖子进行分组,并获得帖子和群组的混合视图? - 小码农CODE - 行之有效找到问题解决它

如何对帖子进行分组,并获得帖子和群组的混合视图?

时间:2015-02-11 作者:thomascharbit

假设我需要在WordPress中实现以下功能:

我有一首名为“song”的CPT,是来自不同艺术家的单曲。有时歌曲可以按专辑分组,但并不总是这样。

然后我想在我的主页上显示最新版本,如:

LATEST RELEASES

<歌曲1、歌曲2、歌曲3、专辑1、歌曲4、歌曲7、歌曲9、歌曲6、歌曲8、歌曲10等。。

因此,规则是显示所有帖子,从最新到最旧,但如果它们属于一个组,则显示该组,使用组中的最新帖子日期将该组与其他帖子排序。

你看到如何在WordPress中创建这个了吗?使用CTP+自定义分类法?还是2张CPT(1张专辑,1首歌曲)?

我过去使用2张CPT(1张专辑,1首歌曲)完成了这项工作:

您可以将任意数量的歌曲添加到相册中(使用ACF,在save\\u post操作中,我向每个子项添加了一个“parent\\u id”自定义字段,其中包含…parent post id。然后,我可以通过WP\\u查询来实现这一点,该查询要求两个CPT,但排除了带有cusom字段“parent\\u id”的帖子设置

这是一种很常见的模式,但我找不到正确的方法:(

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

自定义分类法非常有意义-希望我没有遗漏什么:

$songs = get_posts(
    array(
        \'post_type\' => \'song\',
    )
);

$index = array(); // Build an album_id => songs index
foreach ( $songs as $song ) {
    if ( $albums = get_the_terms( $song->ID, \'album\' ) )
        $index[ $albums[0]->term_id ][] = $song;
    else
        $index[ count( $index ) - 1 ][] = $song; // All on it\'s own. Negative index will not clash with album ID
}

echo \'<ul class="songs">\';
foreach ( $index as $album_id => $songs ) {
    if ( count( $songs ) > 1 ) // More than one song in this album?
        echo \'<li class="album">\' . get_term_field( \'name\', $album_id, \'album\' ) . \'<ul>\';

    foreach ( $songs as $song )
        echo \'<li>\' . get_the_title( $song ) . \'</li>\';

    if ( count( $songs ) > 1 )
        echo \'</ul></li>\';
}
echo \'</ul>\';
$index 将继承$songs 然而,他们受到了质疑。当歌曲属于某个唱片集时,该唱片集中的任何后续歌曲都会添加到堆栈中&;将出现在第一首歌曲索引的嵌套列表中。

相关推荐