如何使用 foreach 循环创建这个长短代码 (PHP + Wordpress)
How to create this long shortcode by using a foreach loop (PHP + Wordpress)
任何人都可以使用 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]
如您所见,每首歌曲的短代码接连出现,包含在 start/close 标签中。
我认为最简单的方法是使用 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()); ?>
一切正常。再次感谢社区。
只需使用带有简单 for 循环的示例代码来打印结果,就可以了。
似乎是某些字符串值包含特殊字符(例如:/' "")
您可以检查字符串值或使用下面的一些示例代码来测试该方法。
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
希望这会有所帮助。
它可能不起作用,因为 [/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 );
}
任何人都可以使用 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]
如您所见,每首歌曲的短代码接连出现,包含在 start/close 标签中。
我认为最简单的方法是使用 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()); ?>
一切正常。再次感谢社区。
只需使用带有简单 for 循环的示例代码来打印结果,就可以了。
似乎是某些字符串值包含特殊字符(例如:/' "")
您可以检查字符串值或使用下面的一些示例代码来测试该方法。
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
希望这会有所帮助。
它可能不起作用,因为 [/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 );
}