我正在尝试在网站的每个页面的侧边栏中显示ID为7的画廊中的6个随机图像。
这是我的代码,但是我无法显示缩略图链接!
$args = array( 'post_id' => '7', 'post_type' => 'attachment', 'numberposts' => 6, 'orderby' => 'rand');
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $attachment) {
$attachment_id = $attachment();
print_r($attachment())
echo '<a href="' . wp_get_attachment_url() . '"><img src="' . wp_get_attachment_image_src( $attachment_id ) . '" /></a>';
}
}
您的查询是错误的。您正在呼叫$attachment()
as和id(?!)。在foreach循环中执行print_r
of$attachment
时,可以看到它们显然是对象。因此,您需要使用“->
参阅此处有关OOP的更多信息”,通过引用所需的值来获取每个对象的ID 。
$args = array(
'post_id' => '7',
'post_type' => 'attachment',
'numberposts' => 6,
'orderby' => 'rand'
);
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $attachment) {
$attachment_id = $attachment->ID;
$image = wp_get_attachment_image_src( $attachment_id );
if (!empty($image)) {
$image_url = $image[0];
}
echo '<a href="' . wp_get_attachment_url( $attachment_id ) . '"><img src="' . $image_url . '" /></a>';
}
}
wp_reset_postdata();
此外,wp_get_attachment_image_src()返回一个包含以下内容的数组
[0] => url
[1] => width
[2] => height
[3] => boolean: true if $url is a resized image, false if it is the original or if no image is available.
由于这是一个数组,因此我总是检查它是否不为空(为安全起见)。
查询后,请始终执行wp_reset_postdata();
。
而已。
详细说明
因此,您在这里所做的只是一个简单的查询。您想要获得与您在$args
数组中设置的某些参数匹配的帖子。您可以做很多事情。点击这里。
该查询的作用是,它返回与您的查询参数匹配的帖子。它返回的是一个对象数组。所以,如果你想访问他们中的每一个,你需要循环穿过。为此,存在foreach
循环。
Foreach将遍历数组中的每个项目,并且您可以按自己的方式访问它$attachment
。您可以循环任何类型的数组。简单数组,多维数组,包含对象的数组等。
因此,我们已经说过,您的查询将返回一个对象列表(数组)。在您的foreach循环中$attachment
是单个对象。一般来说,对象是可以包含很多东西的东西。描述该对象的属性,使该对象执行某些操作的方法(对象中的函数)等。
我们的对象相对简单。它包含诸如ID, post_author, post_name, post_type, post_title
和更多的属性。基本上,您只需要查找有关您的帖子的信息。
如前所述,在我们的foreach中,您使用引用了一个对象$attachment
,并且可以通过引用它们来获取其各种属性的值,例如
$attachment->ID
这将返回ID
属性的值。如果要获取帖子标题,请参考
$attachment->post_title
等等。
因此,我们已将该ID分配给名为的变量$attachment_id
。现在,我们可以自由地将其与各种wordpress制作的功能wp_get_attachment_image_src()
(例如)一起使用。
您需要知道从查询和循环中得到的结果,因此在开发东西时,print_r()
获得结果总是一个好主意。
另外,请记住,这些内容foreach
将逐个循环。因此,即使您print_r($attachment)
返回一堆帖子,也仅意味着它做了多次(在您的情况下为6次,因为您的查询仅返回6条帖子)并且只是将其打印出来。它将全部“粘合”在一起,所以您会想到:但是,等等,这个foreach返回了大量的东西。如何只获得单个东西?但是请记住,foreach
循环内的代码引用了数组的单个实例,并且foreach会像这样:
item 1
|
v
do stuff with it...
|
v
done (output or whatever you are doing in foreach)
|
v
more items?
|
v
YES!
|
v
move to item 2
|
v
do same stuff with it
|
v
done
|
v
more items?
|
v
YES!
|
v
move to item 3
.
.
.
|
v
more items?
|
v
NO :(
|
v
exit loop
这就是foreach的工作原理,所以不要害怕它:D
我走了一些路,但我希望这也会对将来的人有所帮助:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句