我在Wordpress模板页面上构建了一系列图像URL,如下所示:
<?php $attachments = get_posts(array(
'order' => 'ASC',
'post_type' => 'attachment',
'post_parent' => $post->ID,
'post_mime_type' => 'image',
'post_status' => null,
'numberposts' => -1,
));
if ($attachments) {
//set up array of urls
$image_urls = array();
foreach($attachments as $attachment){
$image_object = wp_get_attachment_image_src($attachment->ID,'full');
$image_urls[] = $image_object[0];
}
} ?>
然后,在footer.php
中,我想像这样打印Javascript数组:
<script>
var images = [<?php $num_urls = count($image_urls);
$num = 1;
foreach($image_urls as $image_url) {
echo $image_url;
$num++;
if($num<$num_urls) echo ', ';
} ?>];
</script>
我错误地认为,在连接模板页面和footer.php
时,PHP会将脚本视为连续的,并记住变量值,但事实并非如此,因为它返回:
警告:为foreach()提供的参数无效
如何声明$image_urls
数组以便以后可以引用它,而不会出现作用域/命名空间危险?
PS 除了后一段代码中的最后一项之外,还有更好的方法来添加逗号吗?
答案 0 :(得分:3)
要在多个脚本中安全地传递$ image_urls,请按以下方式声明:
$GLOBALS['image_urls'] = array();
foreach($attachments as $attachment){
$image_object = wp_get_attachment_image_src($attachment->ID,'full');
$GLOBALS['image_urls'][] = $image_object[0];
}
后来,引用它:
<script>
var images = [<?php $num_urls = count($GLOBALS['image_urls']);
$num = 1;
foreach($GLOBALS['image_urls'] as $image_url) {
echo $image_url;
$num++;
if($num<$num_urls) echo ', ';
} ?>];
</script>
为确保不与任何内容发生冲突,您可以为image_urls添加前缀,以表明它是您的。
答案 1 :(得分:2)
脚本看起来很好。
尽管如此,这会更好:
<script>
var images = [<?php echo implode(',',$image_urls) ?>];
</script>
答案 2 :(得分:2)
我错误地认为,在连接模板页面和footer.php时,PHP会将脚本视为连续的,并记住变量值
它应该,除非Wordpress以这种方式是奇数,或者除非变量在函数范围内(在任一文件中)。如果是这样,请添加此声明:
global $image_urls;
位于函数的顶部。 或者,通过$ GLOBALS引用$ image_urls到处。如,
$GLOBALS['image_urls'][] = $image_object[0];
除了后一段代码中的最后一项之外,还有更好的方法来添加逗号吗?
使用内爆功能:
echo implode(', ', $image_urls);
我认为你们每个项目都需要引用,所以:
if (count($image_urls)) {
echo '"' . implode('", "' $image_urls) . '"';
}
或者,一般来说,我会为这种类型的循环执行类似的操作:
$first = true;
foreach (...) {
if ($first) $first = false; else echo ', ';
echo $item;
}