任何人都可以通过使用foreach循环帮助我创建一个短代码,例如下面的代码吗?
此短代码的目的是生成播放列表,并使用开始和结束标记:
[zoomsounds id="favorites_playlist"] [/zoomsounds]
在这些标签之间,要添加到播放列表的每首歌曲都有自己的短代码,如下所示:
[zoomsounds_player config="favorites-playlist" source="'.$source.'" type="detect" songname="'.$title.'" init_player="off" play_target="footer"]
所以,让我们说用户的播放列表中有2首歌曲,整个短代码看起来像这样:
[zoomsounds id="favorites_playlist"][zoomsounds_player config="favorites-playlist" source="http://www.test.com/sound/brobob.mp3" type="detect" songname="Song 1" init_player="off" play_target="footer"][zoomsounds_player config="favorites-playlist" source="http://www.test.com/sound/brobob2.mp3" type="detect" songname="Song 2" init_player="off" play_target="footer"][/zoomsounds]
正如您所看到的,每首歌曲的短代码都是一个接一个地出现,包含在开始/结束标签中。
我认为我能做到的最简单方法是使用foreach循环生成每首歌曲的短代码。这是我写的简单函数。
function streamFavoritesPlaylist() {
$favs[] = get_user_favorites();
echo do_shortcode('[zoomsounds id="favorites_playlist"]');
foreach ($favs[0] as $fav) {
$title = get_the_title($fav);
$post = get_post($fav);
$post_slug = $post->post_name;
$source = '.../mp3/'.$post_slug.'.mp3';
$song_name = get_the_title($fav);
echo do_shortcode('[zoomsounds_player config="favorites-playlist" source="'.$source.'" type="detect" songname="'.$title.'" init_player="off" play_target="footer"]');
}
echo do_shortcode('[/zoomsounds]');
}
显然,这是做错的方法。更不用说,结束标记没有采用,而是以文本显示。也许这就是为什么整件事都不起作用?
我应该提一下,通过使用整个短代码就可以了。只有当我尝试以这种方式构建短代码时才会起作用。
你怎么建议我去完成这样的事情?非常感谢。
更新 感谢大家的投入。这就是我提出的,类似于@DACrosby发布的内容,@ TheManiac建议。
function streamFavoritesPlaylist() {
$favs[] = get_user_favorites();
$shortcode_full = "";
foreach ($favs[0] as $fav) {
$title = get_the_title($fav);
$post = get_post($fav);
$post_slug = $post->post_name;
$source = '.../mp3/'.$post_slug.'.mp3';
$song_name = get_the_title($fav);
$shortcode = '[zoomsounds_player config="favorites-playlist" source="'.$source.'" type="detect" songname="'.$title.'" init_player="off" play_target="footer"]';
$shortcode_full .= $shortcode;
}
return '[zoomsounds id="favorites_playlist"]'.$shortcode_full.'[/zoomsounds]';
}
我实际需要生成短代码的地方,我正在使用:
<?php echo do_shortcode(streamFavoritesPlaylist()); ?>
它完美运作。再次感谢社区。 p>
答案 0 :(得分:1)
它可能无法正常工作,因为[/zoomsounds]
不是短代码 - 它是一个短代码的结束标记。因此,分别运行第一个[zoomsounds ...]
和结束[/zoomsounds]
并不能按预期工作。就像评论中提到的TheManiac一样,首先尝试构建字符串然后只有一个do_shortcode
function streamFavoritesPlaylist() {
$favs[] = get_user_favorites();
$str = '[zoomsounds id="favorites_playlist"]';
foreach ($favs[0] as $fav) {
$title = get_the_title($fav);
$post = get_post($fav);
$post_slug = $post->post_name;
$source = '.../mp3/'.$post_slug.'.mp3';
$song_name = get_the_title($fav);
$str .= '[zoomsounds_player config="favorites-playlist"'
. ' source="'.$source.'" type="detect"'
. ' songname="'.$title.'" init_player="off"'
. ' play_target="footer"]';
}
$str .= '[/zoomsounds]';
echo do_shortcode( $str );
}
答案 1 :(得分:0)
只需使用简单的for循环获取示例代码即可打印出结果,然后就可以了。
似乎某些字符串值包含特殊字符(例如:/&#39;&#34;&#34;)
您可以检查字符串值或使用下面的示例代码来测试方法。
echo do_shortcode('[zoomsounds id="favorites_playlist"]');
for($i = 0; $i < 5; $i++){
$title = "FAV ".$i;
$post = "FAV ".$i;
$post_slug = "FAV ".$i;
$source = "FAV ".$i;
$song_name = "FAV ".$i;
echo do_shortcode('[zoomsounds_player config="favorites-playlist" source="'.$source.'" type="detect" songname="'.$title.'" init_player="off" play_target="footer"]');
}
echo do_shortcode('[/zoomsounds]');
打印出来: results
希望这会有所帮助。