我正试图在网站每一页的侧边栏中的第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>';
}
}
您的查询是错误的。您正在以和id(?!)调用$attachment()
。当您在foreach循环中执行$attachment
的print_r
时,您可以看到它们显然是对象。因此,您需要通过使用->
引用所需的值来获得每个对象的id。请参阅此处了解OOP的更多信息。
$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
这将返回CCD_ 12属性的值。如果你想获得帖子标题,你会参考
$attachment->post_title
等等。
因此,我们将该ID分配给了名为$attachment_id
的变量。现在我们可以随心所欲地使用它,例如wp_get_attachment_image_src()
之类的各种wordpress功能。
你需要知道你从查询和循环中得到了什么,所以当你开发东西时,print_r()
总是一个好主意。
此外,请记住foreach
将逐个循环遍历帖子。因此,即使您的print_r($attachment)
返回了一堆帖子,也只意味着它多次这样做(在您的情况下是6次,因为您的查询只返回了6个帖子),并将其打印出来。它会被"粘"在一起,所以你会想:但等一下,这个前臂会回很多东西。如何只得到单一的东西?但请记住,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
我有点偏离了轨道,但我希望这对未来的人也有帮助:)