假设我需要在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”的帖子设置但那在当时听起来有点刺耳。。你认为有更好的方法来处理这种行为吗?如果我想使用分类法而不是CPT呢?就用户体验而言,用户更喜欢为歌曲添加标签,而不是手动创建相册并向其中添加歌曲。
这是一种很常见的模式,但我找不到正确的方法:(
最合适的回答,由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
然而,他们受到了质疑。当歌曲属于某个唱片集时,该唱片集中的任何后续歌曲都会添加到堆栈中&;将出现在第一首歌曲索引的嵌套列表中。